当前位置: 首页 > 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

相关文章:

Docker使用DockerFile部署Go项目

Docker使用DockerFile部署Go项目1. 文章说明2. Go项目打包到Linux2.1 学习链接与知识点2.2. 打包生成 main 文件2.3 Docker部署Go项目1. 文章说明 目的:将打包生成的 main 文件,在Docker里面,使用Dockerfile文件,生成镜像与容器&…...

C++ Primer第五版_第七章习题答案(31~40)

文章目录练习7.31练习7.32练习7.33练习7.34练习7.35练习7.36练习7.37练习7.38练习7.29练习7.40练习7.31 定义一对类X 和Y,其中X 包含一个指向 Y 的指针,而Y 包含一个类型为 X 的对象。 class Y;class X{Y* y nullptr; };class Y{X x; };练习7.32 定义你…...

基于springboot实现学生成绩管理系统【源码+论文】分享

基于springboot实现学生成绩管理系统演示开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包&…...

Linux diff 命令

Linux diff 命令用于比较文件的差异。 diff 以逐行的方式&#xff0c;比较文本文件的异同处。如果指定要比较目录&#xff0c;则 diff 会比较目录中相同文件名的文件&#xff0c;但不会比较其中子目录。 语法 diff [-abBcdefHilnNpPqrstTuvwy][-<行数>][-C <行数&g…...

unity动画状态机

介绍&#xff1a; 动画状态机&#xff08;Animation State Machine&#xff09;是Unity中用于控制动画状态转换的工具&#xff0c;它由多个状态&#xff08;State&#xff09;和转换&#xff08;Transition&#xff09;组成&#xff0c;可以通过状态转换来控制动画的播放行为。…...

溯源(五)之攻击源的获取

溯源&#xff08;一&#xff09;之溯源的概念与意义 溯源&#xff08;二&#xff09;之 windows-还原攻击路径 溯源&#xff08;三&#xff09;之Linux-入侵排查 溯源&#xff08;四&#xff09;之流量分析-Wireshark使用 溯源整体流程的思维导图 攻击源的获取 1、获取哪些数…...

【redis】redis淘汰策略

一、说明 1.redis key没有设置过期时间被redis主动删除了 2.当redis已用内存超过maxmemory限定时&#xff0c;触发主动清理策略 3.主动清理策略在redis4.0之前一共实现了6种内存淘汰策略&#xff0c;在4.0之后&#xff0c;增加了2种&#xff0c;总共8种 二、淘汰策略 2.1 针对…...

指针和数组(二)

目录 指针和数组 数组名和指针的区别 多维数组 数组指针 语法 作用 内存大小 自增运算 【】运算 指针和数组 结论&#xff1a;数组的本质就是指针。数组的【】运算同样可以用指针来运算 证明 C代码 int array[5];int* ptr{ &array[0] };*ptr 5;array[0] 5;arr…...

Linux WIFI 驱动实验

目录WIFI 驱动添加与编译向Linux 内核添加WIFI 驱动配置Linux 内核编译WIFI 驱动驱动加载测试wireless tools 工具移植与测试wireless tools 移植wireless tools 工具测试wpa_supplicant 移植openssl 移植libnl 库移植wpa_supplicant 移植WIFI 联网测试RTL8188 USB WIFI 联网测…...

UART驱动情景分析-write

一、write过程分析 App写&#xff1a; 使用行规程来写数据最终存入uart_state->xmit的buffer里 硬件发送&#xff1a; 使用硬件驱动中uart_ops->start_tx开始发送具体的发送方式有两种&#xff1a;通过DMA、通过中断 中断方式&#xff1a; 方法1&#xff1a;直接使能tx …...

Metasploit入门到高级【第四章】

来自公粽号&#xff1a;Kali与编程预计更新第一章&#xff1a;Metasploit 简介 Metasploit 是什么Metasploit 的历史和发展Metasploit 的组成部分 第二章&#xff1a;Kali Linux 入门 Kali Linux 简介Kali Linux 安装和配置常用命令和工具介绍 第三章&#xff1a;Metasploi…...

java 继承super

在java继承中&#xff0c;如果子类继承父类&#xff0c;在子类中要给用构造器给父类的属性赋值&#xff0c;需要用到 super 举例&#xff0c;Son类继承Father 类&#xff0c;便于理解 在 new Son(String name, int age) 传入name&#xff0c;和age的值 将会调用Son这个构造器…...

Java学习笔记——多态

2.1 概述 引入 多态是继封装、继承之后&#xff0c;面向对象的第三大特征。 生活中&#xff0c;比如跑的动作&#xff0c;小猫&#xff0c;小狗和大象&#xff0c;跑起来都是不一样的。再比如飞的动作&#xff0c;昆虫、鸟类和飞机&#xff0c;飞起来是不一样的。可见&#x…...

Python处理JSON数据

Python和JSON JavaScript Object Notation (JSON) 是一种轻量级的数据交换格式&#xff0c;通常用于Web应用程序之间的数据交换。JSON的设计使得它非常易于人和机器阅读和编写。JSON数据格式与Python数据结构非常相似&#xff0c;因此Python中提供了一个json模块&#xff0c;用…...

JVM信息查询命令

1、查询jar包运行进程 jps #通过jps命令找出jar的进程IDps -ef|grep xxxx #通过包名找出进程ID2、查询JVM的堆信息 jmap -heap pid #通过jmap命令查询堆信息rootd57bff9f-c8nvn:/apps# jmap -heap 6 Picked up JAVA_TOOL_OPTIONS: -Xloggc:/data/tsf_apm/monitor/jvm…...

redis 面试题

&#x1f355; redis 面试题常规问题什么是 Redis&#xff1f;为什么要使用 Redis&#xff1f;Redis 一般有哪些使用场景&#xff1f;Redis 为什么快&#xff1f;数据类型和数据结构Redis有哪些数据类型&#xff1f;常用操作和应用Bitmaps (位图) | 二进制计数与过滤计数器记录…...

SpringCloud微服务技术栈.黑马跟学(十二)

SpringCloud微服务技术栈.黑马跟学 十二今日目标服务异步通信-高级篇1.消息可靠性1.1.生产者消息确认1.1.1.修改配置1.1.2.定义Return回调1.1.3.定义ConfirmCallback1.2.消息持久化1.2.1.交换机持久化1.2.2.队列持久化1.2.3.消息持久化1.3.消费者消息确认1.3.1.演示none模式1.3…...

HashMap集合存储学生对象并遍历

需求&#xff1a;创建一个HashMap集合&#xff0c;键是学生对象&#xff08;Student&#xff09;,值是居住地。存储多个键值对元素&#xff0c;并遍历。 要求保证键的唯一性&#xff1a;如果学生对象的成员变量值相同&#xff0c;我们就认为是同一个对象 思路&#xff1a; 定义…...

“提效”|教你用ChatGPT玩数据

ChatGPT与数据分析&#xff08;二&#xff09; 上文给简单聊了一下为什么ChatGPT不能取代数据分析师&#xff0c;本文我们来深入感受一下如何让GPT帮助数据分析师“提效”。 场景一&#xff1a;SQL取数 背景&#xff1a;多数数据分析师都要用SQL语言从数据库中提取数据&#x…...

https://app.hackthebox.com/machines/Inject

https://app.hackthebox.com/machines/Inject Ref&#xff1a; 1.https://blog.csdn.net/qq_58869808/article/details/129505388 2.https://blog.csdn.net/m0_73998094/article/details/129474782 info collecting ┌──(kwkl㉿kwkl)-[~/HODL/htb/Inject] └─$ nmap -A …...

网络编程(Modbus进阶)

思维导图 Modbus RTU&#xff08;先学一点理论&#xff09; 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议&#xff0c;由 Modicon 公司&#xff08;现施耐德电气&#xff09;于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python&#xff5c;GIF 解析与构建&#xff08;5&#xff09;&#xff1a;手搓截屏和帧率控制 一、引言 二、技术实现&#xff1a;手搓截屏模块 2.1 核心原理 2.2 代码解析&#xff1a;ScreenshotData类 2.2.1 截图函数&#xff1a;capture_screen 三、技术实现&…...

【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15

缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下&#xff1a; struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误&#xff0c;它们的含义、原因和解决方法都有显著区别。以下是详细对比&#xff1a; 1. HTTP 406 (Not Acceptable) 含义&#xff1a; 客户端请求的内容类型与服务器支持的内容类型不匹…...

DockerHub与私有镜像仓库在容器化中的应用与管理

哈喽&#xff0c;大家好&#xff0c;我是左手python&#xff01; Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库&#xff0c;用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

HTML 列表、表格、表单

1 列表标签 作用&#xff1a;布局内容排列整齐的区域 列表分类&#xff1a;无序列表、有序列表、定义列表。 例如&#xff1a; 1.1 无序列表 标签&#xff1a;ul 嵌套 li&#xff0c;ul是无序列表&#xff0c;li是列表条目。 注意事项&#xff1a; ul 标签里面只能包裹 li…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 &#xff08;忘了有没有这步了 估计有&#xff09; 刷机程序 和 镜像 就不提供了。要刷的时…...

《基于Apache Flink的流处理》笔记

思维导图 1-3 章 4-7章 8-11 章 参考资料 源码&#xff1a; https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云

目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

C# 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...