Docker使用DockerFile部署Go项目

Docker使用DockerFile部署Go项目

  • 1. 文章说明
  • 2. Go项目打包到Linux
    • 2.1 学习链接与知识点
    • 2.2. 打包生成 main 文件
    • 2.3 Docker部署Go项目

1. 文章说明

目的:将打包生成的 main 文件,在Docker里面,使用Dockerfile文件,生成镜像与容器,将命令写成shell文件,每次发布直接运行即可

- 使用Goland软件开发Go项目
- 
- MobaXterm_Personal_20.3 软件远程连接服务器
- 
- 服务器安装了Docker,里面也安装了nginx

如果go后端 vue前端 前后端都要发布线上,可按顺序查看

Docker使用DockerFile部署Go项目
https://blog.csdn.net/weixin_45941687/article/details/129854513

Vue项目proxyTable跨域配置
https://blog.csdn.net/weixin_45941687/article/details/129858961

Vue Cli2.0项目自定义访问路径,并打包发布
https://blog.csdn.net/weixin_45941687/article/details/129858780

2. Go项目打包到Linux

2.1 学习链接与知识点

学习连接 - linux中 echo 里 \033 含义
学习链接 - 重要 - docker基础之DockerFile ❤
学习链接 - 参考 - Golang項目部署


1.  #!/bin/sh  不是注释,是对shell声明,#! 是特殊的表示符,只能放第一行

2. echo命令打印带有颜色的字符
	格式: echo -e "\033[字背景颜色;字体颜色m字符串\033[0m"

3. MAINTAINER指令设置生成的镜像的Author字段,已经废弃使用。LABEL指令是一个更灵活的版本

4. ADD 指令和 COPY 的格式和性质基本一致。但是在 COPY 基础上增加了一些功能

5. 生成镜像的命令
	# 命令 docker build -f dockerfile文件路径 -t 镜像名:[tag] .
 	  docker build -f myDockerDile-Centos -t mycentos:0.1 .

2.2. 打包生成 main 文件

config.yaml 文件的配置更改成线上环境

注意:一般Terminal 窗口执行即可,但项目路径如果有中文,建议cmd,在项目路径下执行,生成 " main " 文件,没有后缀!

set GOARCH=amd64
set GOOS=linux
go build main.go

2.3 Docker部署Go项目

① 进入服务器,创建存放项目文件夹"sjjwtest"

mkdir sjjwtest

② 打包的 " main "文件,拖进”sjjwtest“文件夹

③ 在”sjjwtest“ 里面创建 文件夹 与 文件

# 创建文件夹
# 除 config 与 data 文件夹 , 其他看需求,像upload是我项目上传图片存的地方
mkdir upload template public data config

#创建文件
touch Dockerfile run.sh

④ config.yaml 文件 放置在 第 ③ 步创建的 config 文件夹下

⑤ 编辑 Dockerfile 文件内容


 1. 编辑 Dockerfile 文件
[root@ecs-dead sjjwtest]# vim Dockerfile


 2. 进入文件后,按 字母 I 进入编辑模式
	 内容如下 :
	 

Dockerfile 文件内容如下:

FROM loads/alpine:3.8

LABEL maintainer="15***[email protected]"

ENV WORKDIR  /var/www/main

ADD ./main  $WORKDIR/main
RUN chmod +x $WORKDIR/main

ADD public   $WORKDIR/public
ADD config   $WORKDIR/config
ADD template $WORKDIR/template
ADD upload $WORKDIR/upload

WORKDIR $WORKDIR

ENTRYPOINT ["./main"]

 3. 编辑完成后
    按"esc"键,退出编辑模式
    输入":wq" ,执行 保存并退出 的操作
# (如果要查看文件里面的内容,执行 " cat Dockerfile ")
root@ecs-dead sjjwtest]# cat Dockerfile

⑥ 编辑 run.sh 文件内容


 1. 编辑 run.sh 文件
[root@ecs-dead sjjwtest]# vim run.sh


 2. 进入文件后,按 字母 I 进入编辑模式
	 内容如下 :
	 

run.sh 文件内容如下:

注意:
	cd /dat***er/sjjwtest 文件夹位置,根据自己的来
	-p 8002:8002 端口号设置,根据自己项目的来

	-v 挂载的路径,根据自己创建的路径
	(-v  自己文件路径:/var/www/main/public)
#!/bin/bash
cd /data/docker/container/sjjwtest

echo -e "\033[91m 开始执行... \033[0m"

docker stop sjjwtest
docker rm sjjwtest
docker rmi sjjwtest

docker build -t sjjwtest .
docker run -d -p 8002:8002 --restart=always --name sjjwtest --privileged=true -v /data/docker/container/sjjwtest/public:/var/www/main/public -v /data/docker/container/sjjwtest/template:/var/www/main/template -v /data/docker/container/sjjwtest/config:/var/www/main/config -v /data/docker/container/sjjwtest/data:/var/www/main/data -v /data/docker/container/sjjwtest/upload:/var/www/main/upload sjjwtest

echo -e "\033[36m执行结束...\033[0m"

 3. 编辑完成后
    按"esc"键,退出编辑模式
    输入":wq" ,执行 保存并退出 的操作
# (如果要查看文件里面的内容,执行 " cat run.sh ")

[root@ecs-dead sjjwtest]# cat run.sh


⑦ 查看run.sh 文件权限并修改


[root@ecs-dead sjjwtest]# ls -al
total 32
drwxr-xr-x 7 root root 4096 Mar 30 13:58 .
drwxr-xr-x 8 root root 4096 Mar 30 13:27 ..
drwxr-xr-x 2 root root 4096 Mar 30 13:27 config
drwxr-xr-x 2 root root 4096 Mar 30 13:27 data
-rw-r--r-- 1 root root  302 Mar 30 13:31 Dockerfile
drwxr-xr-x 2 root root 4096 Mar 30 13:27 public
-rw-r--r-- 1 root root    0 Mar 30 13:46 run.sh
drwxr-xr-x 2 root root 4096 Mar 30 13:27 template
drwxr-xr-x 2 root root 4096 Mar 30 13:27 upload


# r 读,值为4
# w 写,值为2
# x 执行,值为1
# 为 run.sh 文件添加执行权限,文件会变成绿色

[root@ecs-dead sjjwtest]# chmod +x run.sh
[root@ecs-dead sjjwtest]# ls
config  data  Dockerfile  public  run.sh  template  upload
[root@ecs-dead sjjwtest]# ls -al
total 32
drwxr-xr-x 7 root root 4096 Mar 30 13:58 .
drwxr-xr-x 8 root root 4096 Mar 30 13:27 ..
drwxr-xr-x 2 root root 4096 Mar 30 13:27 config
drwxr-xr-x 2 root root 4096 Mar 30 13:27 data
-rw-r--r-- 1 root root  302 Mar 30 13:31 Dockerfile
drwxr-xr-x 2 root root 4096 Mar 30 13:27 public
-rwxr-xr-x 1 root root    0 Mar 30 13:46 run.sh
drwxr-xr-x 2 root root 4096 Mar 30 13:27 template
drwxr-xr-x 2 root root 4096 Mar 30 13:27 upload

⑧ 运行run.sh文件,查看容器是否正常运行,再设置nginx转发,使外网也可以访问

1. run.sh文件运行命令:" ./run.sh  "

2.查看容器
[root@ecs-dead conf.d]# docker ps
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS              PORTS                                      NAMES
a2d7576dbb83        sjjwtest              "./main"                 23 hours ago        Up 22 hours         0.0.0.0:8002->8002/tcp                     sjjwtest
... ...

3.查看容器日志,是否有问题
[root@ecs-dead conf.d]# docker logs -f a2d7576dbb83
2023-03-29 15:11:50.057 [INFO] pid[1]: http server started listening on [:8002]
2023-03-29 15:11:50.057 [INFO] swagger ui is serving at address: http://127.0.0.1:8002/swagger/
2023-03-29 15:11:50.057 [INFO] openapi specification is serving at address: http://127.0.0.1:8002/api.json
... ...

4.nginx配置外网访问
location /api/ { 
	proxy_pass http://192.168.0.175:8002/;
}

访问本地: http://127.0.0.1:8002/captcha
外网访问线上: 域名/api/captcha

你可能感兴趣的:(docker)