在Docker容器中部署Golang应用程序
我需要将安静的应用程序部署到Docker容器中。
我的项目有以下结构
go_proj
|- bin |- src | | |- com.example | | | |- web_service.go | | | |- github.com.gorilla.mux | | | - ... |- Dockerfile
我的Dockerfile应该如何? 也许我应该从容器中下载库(mux)?
我有一些使用Docker部署Go应用程序的经验。
TL; DR
这就是我的项目在${GOPATH}/src/github.com/githubhandle/project
main.go vendor.conf vendor/ github.com/gorilla/mux github.com/sirupsen/logrus github.com/bshuster-repo/logrus-logstash-hook ... Dockerfile
而Dockerfile看起来像这样:
FROM golang:1.8 WORKDIR /go/src/app COPY . . RUN go-wrapper download RUN go-wrapper install EXPOSE [8080] ENTRYPOINT ["go-wrapper", "run", "main.go"]
很多
长答案
一般来说,我喜欢把我的Dockerfile放在服务器目录中:
go/ src/ github.com/ mygithub/ serverproject/ main.go Dockerfile
如果我在我的项目中使用非标准软件包(例如(gorilla / mux)),我可能会使用vndr
来创build一个供应商目录,在这里我放置所有这些软件包并pipe理它们的版本。
之后,我的Dockerfile可能会是这样的:
FROM golang:1.8 WORKDIR /go/src/app COPY . . RUN go-wrapper download RUN go-wrapper install ENTRYPOINT ["go-wrapper", "run", "main.go"]
注意您可能需要自动公开端口号。 例如,添加这一行会将容器内的端口8080暴露给主机。
PORT 8080
剩下要做的就是在go/src/github.com/mygithub/serverproject
构build镜像:
docker build -t serverproject .
并将其部署到一个容器中:
docker run -P --rm --name myserver1 serverproject
如果你想传递参数给服务器,你可以这样做:
docker run -P --rm --name myserver1 serverproject --arg1 --arg2=bla
请注意 ,如果您没有在Dockerfile中指定PORT
并希望将其公开给主机,请将-P
replace为-p
前的-p
,并指定<host-port>:<container-port>
:
docker run --rm -p 8080:8080 ...
这将实际上从您的主机端口转移到容器。
- Golang docker library image在$ PATH中找不到工具
- 在部署到Docker的情况下,在Golang中实现的Apache Kafka消费者恐慌
- Golang连接到docker连接到我的SQLdockergetsockopt:连接被拒绝
- 如何在主机上使用golang访问docker中安装的kafka
- selectGolang泊坞窗基础图像
- 如何在不同的容器中使用docker-comp env文件variables与golang?
- 使用Go Docker API从挂载的文件获取文件上下文
- 无法连接到泊坞窗容器内部的postgresql
- 在写入安装目录中的文件时,docker容器不断增加内存使用量