栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Go语言

构建最小化的 go 语言 docker 容器

Go语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

构建最小化的 go 语言 docker 容器

将你的go语言代码容器化

如何通过引入Scratch,创建一个尽可能小的、go语言代码写的Docker容器?

官方的docker仓库有个项目:https://github.com/docker-library/hello-world,可以在shell终端打印出hello world

本文只需三行Dockerfile+一个简单的.go文件即可完成功能

编写go语言代码

下面是一个简单的go语言程序源码,它每两秒打印出wdnmd字符

package main

import "fmt"
import "time"

func main(){
	for {
	fmt.Println("wdnmd")
	time.Sleep(time.Duration(2)*time.Second)
	}
}
编译出静态链接的二进制文件

go语言默认是动态链接的,比如你使用 go build指令,那么会得到一个动态链接文件,为了得到静态 链接的二进制文件,需要使用以下编译命令:

CGO_ENABLED=0 go build -a -ldflags '-s' 1.go 

为了验证编译出的文件是否是静态链接的,可以使用ldd命令检查:

$ ldd hello
        not a dynamic executable

这说明是一个静态链接文件

下面是动态链接的结果,由于是动态链接,因此缺少共享库

$ ldd container_hello 
        linux-vdso.so.1 (0x00007ffe3d7bc000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fe94a709000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fe94a318000)
        /lib64/ld-linux-x86-64.so.2 (0x00007fe94a928000)
编写Dockerfile
  • 空镜像scratch是用来构建超小容器镜像的不二之选,并且它不会在镜像中创建额外的层,详见https://hub.docker.com/_/scratch
  • copy指令将.go文件编译出的hello文件复制到容器镜像的根目录中
  • 最后一条指令运行我们的hello文件
FROM scratch

COPY hello /

CMD ["/hello"]
构建镜像

通过以下命令构建镜像:

sudo docker image build -t hello:sleep .
  • 镜像名字为hello
  • tag为sleep

查看镜像是否构建成功:

sudo docker image ls
[sudo] password for zaralts:
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
hello         sleep     503f2930b6fe   3 hours ago    1.76MB
运行容器实例
sudo docker container run hello:sleep
结束

至此,我们通过go语言的二进制文件,创建了一个最小化的docker容器,它每两秒在终端打印出wdnmd字符

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/903984.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号