在Docker for Go程序中构buildDocker
我正在尝试为Go程序构build一个非常小的Docker容器。 为此,我希望使用Docker容器来构buildGo程序,然后(在容器内)构build另一个Docker容器来运行程序。
这是我的构buildDockerfile:
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
要启动构build我去顶部目录并运行:
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与我编译的程序里面?
您已经生成了泊坞窗图像,但是因为您没有指定标签,所以只能通过哈希(d91a908ee663)访问它。 最好指定标签: docker build -t mygoprog .
如果您尝试在没有额外设置的情况下运行映像,则会失败,因为其中没有Docker。 这里最简单的解决scheme是从容器访问docker守护进程:
docker run -v /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker mygoprog
Docker的位置在你的发行版中可能不同,你也可能需要--privileged
标志。
- golang docker私人github存储库
- 提供的标志,但没有定义
- 错误:hyperledger / fabric:make gotools:无法识别的导入path“golang.org/x/tools/go/gcexportdata”
- 尝试使用docker撰写文件连接redis时连接被拒绝
- ssh使用golang中的交互式shell执行nsenter作为远程命令来debuggingdocker容器
- 如何使用engine-api监视docker事件
- 在Docker上安装运行时是否有意义?
- 有一个直接的方式来获得来自unix套接字的html响应(像curl一样)吗?
- 我如何确保kubernetes的优雅缩放?