当前位置: 首页 > news >正文

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/129854513Vue项目proxyTable跨域配置
https://blog.csdn.net/weixin_45941687/article/details/129858961Vue 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 Dockerfile2. 进入文件后,按 字母 I 进入编辑模式内容如下 :

Dockerfile 文件内容如下:

FROM loads/alpine:3.8LABEL maintainer="15***18@163.com"ENV WORKDIR  /var/www/mainADD ./main  $WORKDIR/main
RUN chmod +x $WORKDIR/mainADD public   $WORKDIR/public
ADD config   $WORKDIR/config
ADD template $WORKDIR/template
ADD upload $WORKDIR/uploadWORKDIR $WORKDIRENTRYPOINT ["./main"]
3. 编辑完成后按"esc"键,退出编辑模式输入":wq" ,执行 保存并退出 的操作
# (如果要查看文件里面的内容,执行 " cat Dockerfile ")
root@ecs-dead sjjwtest]# cat Dockerfile

⑥ 编辑 run.sh 文件内容

1. 编辑 run.sh 文件
[root@ecs-dead sjjwtest]# vim run.sh2. 进入文件后,按 字母 I 进入编辑模式内容如下 :

run.sh 文件内容如下:

注意:cd /dat***er/sjjwtest 文件夹位置,根据自己的来-p 8002:8002 端口号设置,根据自己项目的来-v 挂载的路径,根据自己创建的路径(-v  自己文件路径:/var/www/main/public)
#!/bin/bash
cd /data/docker/container/sjjwtestecho -e "\033[91m 开始执行... \033[0m"docker stop sjjwtest
docker rm sjjwtest
docker rmi sjjwtestdocker 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 sjjwtestecho -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
http://www.lryc.cn/news/44102.html

相关文章:

  • C++ Primer第五版_第七章习题答案(31~40)
  • 基于springboot实现学生成绩管理系统【源码+论文】分享
  • Linux diff 命令
  • unity动画状态机
  • 溯源(五)之攻击源的获取
  • 【redis】redis淘汰策略
  • 指针和数组(二)
  • Linux WIFI 驱动实验
  • UART驱动情景分析-write
  • Metasploit入门到高级【第四章】
  • java 继承super
  • Java学习笔记——多态
  • Python处理JSON数据
  • JVM信息查询命令
  • redis 面试题
  • SpringCloud微服务技术栈.黑马跟学(十二)
  • HashMap集合存储学生对象并遍历
  • “提效”|教你用ChatGPT玩数据
  • https://app.hackthebox.com/machines/Inject
  • Java Web 实战 15 - 计算机网络之网络编程套接字
  • 基于pdf2docx模块Python实现批量将PDF转Word文档(安装+完整代码教程)
  • 3.21~3.22
  • Chromium 改造实录:增加 MPEG TS 格式支持
  • 性能优化之-事件代理
  • MSDS 即化学品安全说明书
  • 真人手办没法实现网购?我有一个好办法!
  • 2019湖南省大学生程序设计竞赛题解(D)
  • 【开发】中间件——RocketMQ
  • 36 UnitTest框架 - 参数化
  • Qt源码阅读(四) 事件循环