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

Java Web 实战 15 - 计算机网络之网络编程套接字

文章目录一 . 网络编程中的基本概念1.1 网络编程1.2 客户端(client) / 服务器(server)1.3 请求(request) / 响应(response)1.4 客户端和服务器之间的交互数据1.4.1 一问一答1.4.2 多问一答1.4.3 一问多答1.4.4 多问多答二 . socket 套接字2.1 UDP 的 Socket API2.1.1 引子2.1.2…...

基于pdf2docx模块Python实现批量将PDF转Word文档(安装+完整代码教程)

PDF文件是一种常见的文档格式&#xff0c;但是在编辑和修改时不太方便&#xff0c;因为PDF本质上是一种静态的文档格式。因此&#xff0c;有时候我们需要将PDF文件转换成Word格式&#xff0c;以便更好地编辑和修改文档。在本篇文章中&#xff0c;我们将介绍如何使用Python实现P…...

3.21~3.22

识编程语言中的&#xff0c;局部变量&#xff0c;全局变量&#xff0c;以及变量生存周期&#xff0c;整形&#xff0c;浮点型数据的内存表示&#xff0c;od的内存窗口的使用 先看一个代码样例 #include<windows.h> #include<stdio.h>#pragma warning(disable:499…...

Chromium 改造实录:增加 MPEG TS 格式支持

在《选择最新 Chromium&#xff0c;支持 H264 / H265》一文中&#xff0c;记录了我通过升级 Chromium 版本解决了 H264 / H265 视频支持难题。然而难题接踵而至&#xff0c;这次的难题是 MPEG TS 流的支持。MPEG2-TS 传输流广泛应用于数字电视广播系统&#xff0c;所以是一个不…...

性能优化之-事件代理

js中的事件委托或是事件代理简单理解 事件委托也叫事件代理&#xff0c;“事件代理”即是把原本需要绑定在子元素的响应事件&#xff08;click、keydown…&#xff09;委托给父元素&#xff0c;让父元素担当事件监听的职务。事件代理的原理是DOM元素的事件冒泡。 概述&#x…...

MSDS 即化学品安全说明书

MSDS 即化学品安全说明书&#xff0c;亦可译为化学品安全技术说明书或化学品安全数据说明书&#xff0c;是化学品生产商和进口商用来阐明化学品的理化特性&#xff08;如PH值&#xff0c;闪点&#xff0c;易燃度&#xff0c;反应活性等&#xff09;以及对使用者的健康&#xff…...

真人手办没法实现网购?我有一个好办法!

记得以前在网上看到过一个冷笑话式的问答&#xff0c;问的是中国最早的手办是什么&#xff0c;有网友回答是秦始皇兵马俑&#xff0c;这个抖机灵式的回答简直妙得让人会心一笑。 你接触过手办吗&#xff1f; 提到手办&#xff0c;大家第一时间想到的&#xff0c;肯定都会是各…...

2019湖南省大学生程序设计竞赛题解(D)

D-Modulo Nine 很妙的类似区间dp&#xff0c; 我自己是想不到&#xff0c;本题解题思路来自学长的博客&#xff1a; 长沙橘子猫 题意 有一个长度为 nnn 的序列&#xff0c;你可以给每个位置填 0∼90\sim90∼9 的一个数&#xff0c;有 mmm 个限制&#xff0c;每个限制 [li,ri…...

【开发】中间件——RocketMQ

分布式消息系统 RocketMQ概念&#xff0c;用途&#xff0c;特性安装RocketMQ掌握RocketMQ的api使用对producer、consumer进行详解了解RocketMQ的存储特点 简介及相关概念JavaAPISpringBoot整合RocketMQ消息的顺序收发消息系统的事务、存储、重试策略消息系统的集群 RocketMQ R…...

36 UnitTest框架 - 参数化

目录 一、参数化环境准备 1、方式一&#xff1a;在终端&#xff08;cmd&#xff09;安装parameterized 2、方式二&#xff1a;在Pycharm中安装parameterized 二、参数化 1、什么事参数化&#xff1f; 2、参数化引入案例 &#xff08;1&#xff09;需求 &#xff08;2&a…...