在Goland中使用Docker插件生成镜像与创建容器

文章原发于taskhub

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即可实现,它将覆盖原有的旧文件

posted @ 2020-09-24 16:35  litchi99  阅读(1866)  评论(0编辑  收藏  举报