0%

记第一次构建Docker镜像

交叉编译

在项目目录下执行以下命令:

1
CGO_ENABLED=0 GOOS=linux go build -a -o binary_name .
配置项 含义
CGO_ENABLED 禁用CGO,官方文档中有说到,交叉编译时会自动禁用
GOOS 交叉编译目标操作系统,默认是当前系统
-a 强制编译已经缓存的包
-o 自定义编译后生成的二进制名称

Dockerfile

下面是一个简单的例子:

1
2
3
4
FROM alpine
RUN apk update && apk add ca-certificates && rm -rf /var/cache/apk/*
ADD your_binary_file /bin/
ENDPOINT ["/bin/your_binary_file"]

当然你还可以直接使用 Multi-stage builds

1
2
3
4
5
6
7
8
9
FROM golang as builder
WORKDIR /app
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -o binary_name .

FROM alpine
RUN apk update && apk add ca-certificates && rm -rf /var/cache/apk/*
COPY --from=builder /app/binary_name /bin
ENDPOINT ["/bin/birary_name"]

Docker build

执行以下命令

1
docker build -t username/image-name .

docker build

Docker run

测试镜像是否能正常运行:

1
docker run --rm username/image-name

docker run

发布到DockerHub

首先需要登录(默认会登录到docker.io

1
docker login

docker login

然后需要给镜像打一个标签

1
docker tag short-sha username/image-name

docker tag

然后发布镜像到DockerHub

1
docker push username/image-name:tag

docker push

Happy Ending

到这里,一个Docker的镜像就构建完成并发布到 Docker Hub 上了。当然你完全可以构建过程自动化,以后只需要推送代码就可以了。Anyway,快点构建你的第一个Docker镜像吧!GO!GO!GO!