在Goland中使用Docker插件生成镜像与创建容器
1. 在Goland中连接本地或远程Docker daemon
1.1 在File->Setting->Build->Docker中配置连接地址
Docker为C/S架构,安装在服务器上的Docker daemon守护程序为server端,我们可使用Goland的Docker插件作为client端访问daemon.
如果出现connection fail,则可能是daemon的端口未配置正确,需要进行如下配置。
1.2 打开docker daemon的tcp访问端口
- 在终端中打开并修改docker的配置文件:
sudo vim /lib/systemd/system/docker.service
- 用#注释原有的ExecStart,并加入如下配置:
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
- 重新加载守护进程:
systemctl daemon-reload
- 重启docker服务:
systemctl restart docker.service
- 测试2375端口是否已经开启:
curl http://127.0.0.1:2375/info
1.3 在Goland中查看和使用docker
2. 编译工程与创建镜像
2.1 创建Dockerfile
- goland中无创建Dockerfile的内置选项,直接对项目右键New->File,然后输入Dockerfile即可
2.2 多阶段构建Docker镜像
- 向创建的空Dockerfile输入以下信息,并注意调用配置文件时所使用的相对路径,镜像执行时,以main.go所在的目录为工作目录,路径的相对关系以其为参考
- 在多阶段构建过程中,使用了多个FROM指令,确保不同阶段的生成结果不直接传递到下一阶段,从而减小Docker镜像的体积
# 构建:使用golang:1.14版本
FROM golang:1.14 as build
# 容器环境变量添加
ENV GO111MODULE=on
ENV GOPROXY=https://goproxy.cn,direct
# 设置当前工作区
WORKDIR /go/release
# 把全部文件添加到/go/release目录
ADD . .
# 编译: 把main.go编译为可执行的二进制文件, 并命名为app
RUN GOOS=linux CGO_ENABLED=0 GOARCH=amd64 go build -ldflags="-s -w" -installsuffix cgo -o app main.go
# 运行: 使用scratch作为基础镜像
FROM scratch as prod
# 在build阶段, 复制时区配置到镜像的/etc/localtime
COPY --from=build /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 在build阶段, 复制./app目录下的可执行二进制文件到当前目录
COPY --from=build /go/release/app /
# 在build阶段, 复制yaml配置文件到当前目录, 此处需要注意调用该配置文件时使用的相对路径, main.go在当前目录下执行
COPY --from=build /go/release/config.yaml /
# 启动服务
CMD ["/app"]
2.3 Goland配置Dockerfile运行环境
- 在Edit Configurations中创建dockerfile配置项,然后安装下图对镜像和容器的名称、宿主机和容器的端口映射进行设置
- 设置完毕后,点击界面在右上角的运行按钮,完成镜像的构建与容器的安装,最终将自动运行容器程序
3. 构建
- 完成dockerfile的配置后,开始执行镜像打包与容器创建过程,该过程需要耗费一定的时间,详情如下所示:
- 至此,完成的镜像构建与容器创建的全部过程
4. 重新编译
- 当项目文件改动时,需要重新构建docker镜像与容器,此时使用Redeploy即可实现,它将覆盖原有的旧文件