golang项目在idea中使用docker自动部署

一、docker 开启远程链接访问

  • vi /usr/lib/systemd/system/docker.service 修改docker.service文件,添加监听端口。将ExecStart开头的那一行修改为:ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock。如图:
pic


  • systemctl daemon-reload systemctl的守护程序重新加载
  • 重启docker服务:systemctl restart docker
切记服务器2375端口,不可开放公网端口访问,只能本机访问或者iptables防火墙指定IP。否则可能被挖矿病毒扫描到主机端口
windows开启docker远程访问:


二、IDEA配置docker远程服务



三、服务器安装必要的服务(redis,mysql,etcd)

  • 安装etcd的docker版本,单机部署Etcd:
docker run -d --name etcd-server 
--network host 
--publish 2379:2379 
--publish 2380:2380 
--env ALLOW_NONE_AUTHENTICATION=yes 
--env ETCD_ADVERTISE_CLIENT_URLS=http://etcd-server:2379 
bitnami/etcd:latest
  • mysql添加用户,授权创建数据库
  1. mysql -u root -p 连接数据库
  2. 创建用户:CREATE USER 'username'@'%' IDENTIFIED BY 'password'; 这里用户可任意主机访问,可以防火墙限制3306指定IP访问
  3. 用户授权 // 查询mysql数据库用户 select host,user,authentication_string from mysql.user; // 查看用户权限 show grants for 用户; // 授全部权限(慎用) GRANT ALL PRIVILEGES ON * . * TO 'anyue'@'%'; // 刷新权限 FLUSH PRIVILEGES;


四、项目创建Dockerfile

  • golang项目根目录写Dockerfile文件,这里写一个简单的作为示例:
FROM alpine                                          // 拉取一个简洁的基础镜像

WORKDIR /opt                                         // 设置工作目录
ADD cmsrpc /opt/                                     // copy编译好的程序到工作目录
ADD ./com.anyue.rpc.cms/cmsrpc/etc /opt/etc          // copy配置文件到工作区
EXPOSE 8876                                          // 指定端口
CMD [ "./cmsrpc" ]
为了加快部署,我们采用先编译再构建镜像,这样可以使镜像尽可能小,减少编译不必要的环境打包。
  • 多级构建,使用Docker部署项目时,只需要把编译及运行环境分开,就能够减小镜像的大小。可以在dockerfile中采用两阶段构建,Dockerfile示例代码:
#基础镜像,这也是我本地的golang版本
FROM golang:1.17.10 as builder

#环境变量
ENV GO111MODULE=on
ENV GOPROXY=https://goproxy.cn,direct

#指定工作目录
WORKDIR /go/src/labs.api
#复制根目录内所有源码文件到工作目录下
COPY . .

#编译
RUN GOOS=linux CGO_ENABLED=1 GOARCH=amd64 go build -installsuffix cgo .

#基础镜像,运行环境
FROM ubuntu:18.04 as runner

#指定工作目录
WORKDIR /go/app
#复制二进制执行文件和必要的Configs目录到工作目录
COPY --from=builder /go/src/labs.api/labs.api .
COPY --from=builder /go/src/labs.api/configs ./configs

#暴露的端口
EXPOSE 18888

#运行 labs.api是我的项目名称
CMD ["./labs.api"]

五、IDEA自动构建项设置

  • 设置goland构建配置


  • 运行参数配置:--restart=always --network=host --env GO_APP_PORT=8876 --expose 8876 -d --security-opt=seccomp:unconfined
  • 脚本自动部署可使用命令
--restart=always \
--network=host \
--env AnyuePubEnv=dev \
--env GO_APP_PORT=8876 \
--expose 8876 \
-d \
-p 8876:8876 \
-v /etc/localtime:/etc/localtime \
-v /home/anyueserver/logs/cmsrpc:/opt/logs \
--security-opt=seccomp:unconfined