我正在尝试为 Go 程序构建一个非常小的 Docker 容器。为此,我希望使用 Docker 容器来构建 Go 程序,然后(在容器内)构建另一个 Docker 容器来运行该程序。
这是我的构建 Dockerfile:
FROM google/golang
WORKDIR /gopath/src/mycompany/mygoprog
# Build the Contributors application
RUN mkdir -p /gopath/src/mycompany/mygoprog
ADD ./src/* /gopath/src/mycompany/mygoprog/
RUN CGO_ENABLED=0 GOOS=linux go build -a -tags rs -ldflags '-w' /gopath/src/mycompany/mygoprog/*.go
RUN cp mygoprog /mygoprog
CMD docker build -t foobar /gopath/src/mycompany/mygoprog
我的源目录有我的 Go 程序(简单的——编译/运行)和这个用于最终产品的 Dockerfile:
FROM scratch
ADD /mygoprog mygoprog
ENTRYPOINT ["/mygoprog"]
EXPOSE 9100
这些文件是这样组织的:
/myproject
Dockerfile
/src
Dockerfile
mygoprog.go
要启动构建,我转到顶级目录并运行:
docker build .
这运行没有错误......并且没有最终图像!输出如下所示:
bash-3.2$ docker build .
Sending build context to Docker daemon 6.656 kB
Sending build context to Docker daemon
Step 0 : FROM google/golang
---> 3cc1d7ae0e9c
Step 1 : WORKDIR /gopath/src/mycompany/mygoprog
---> Using cache
---> 49b9686dcbed
Step 2 : RUN mkdir -p /gopath/src/mycompany/mygoprog
---> Using cache
---> 0d0139bb8cae
Step 3 : ADD ./src/* /gopath/src/mycompany/mygoprog/
---> 964ea5ca6afb
Removing intermediate container e57719a417d5
Step 4 : RUN CGO_ENABLED=0 GOOS=linux go build -a -tags rs -ldflags '-w' /gopath/src/mycompany/mygoprog/*.go
---> Running in 608ad65db52c
---> 6e91f06b7654
Removing intermediate container 608ad65db52c
Step 5 : RUN cp mygoprog /mygoprog
---> Running in 196af3db881b
---> 5e90e11ffc7d
Removing intermediate container 196af3db881b
Step 6 : CMD docker build -t foobar /gopath/src/mycompany/mygoprog
---> Running in 4794354abf2b
---> d91a908ee663
Removing intermediate container 4794354abf2b
Successfully built d91a908ee663
我错过了什么,所以我得到了一个最终的、可运行的 Docker,里面有我编译的程序?
幕布斯6054654
相关分类