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 以逐行的方式,比较文本文件的异同处。如果指定要比较目录,则 diff 会比较目录中相同文件名的文件,但不会比较其中子目录。 语法 diff [-abBcdefHilnNpPqrstTuvwy][-<行数>][-C <行数&g…...
unity动画状态机
介绍: 动画状态机(Animation State Machine)是Unity中用于控制动画状态转换的工具,它由多个状态(State)和转换(Transition)组成,可以通过状态转换来控制动画的播放行为。…...

溯源(五)之攻击源的获取
溯源(一)之溯源的概念与意义 溯源(二)之 windows-还原攻击路径 溯源(三)之Linux-入侵排查 溯源(四)之流量分析-Wireshark使用 溯源整体流程的思维导图 攻击源的获取 1、获取哪些数…...
【redis】redis淘汰策略
一、说明 1.redis key没有设置过期时间被redis主动删除了 2.当redis已用内存超过maxmemory限定时,触发主动清理策略 3.主动清理策略在redis4.0之前一共实现了6种内存淘汰策略,在4.0之后,增加了2种,总共8种 二、淘汰策略 2.1 针对…...
指针和数组(二)
目录 指针和数组 数组名和指针的区别 多维数组 数组指针 语法 作用 内存大小 自增运算 【】运算 指针和数组 结论:数组的本质就是指针。数组的【】运算同样可以用指针来运算 证明 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写: 使用行规程来写数据最终存入uart_state->xmit的buffer里 硬件发送: 使用硬件驱动中uart_ops->start_tx开始发送具体的发送方式有两种:通过DMA、通过中断 中断方式: 方法1:直接使能tx …...
Metasploit入门到高级【第四章】
来自公粽号:Kali与编程预计更新第一章:Metasploit 简介 Metasploit 是什么Metasploit 的历史和发展Metasploit 的组成部分 第二章:Kali Linux 入门 Kali Linux 简介Kali Linux 安装和配置常用命令和工具介绍 第三章:Metasploi…...

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

Java学习笔记——多态
2.1 概述 引入 多态是继封装、继承之后,面向对象的第三大特征。 生活中,比如跑的动作,小猫,小狗和大象,跑起来都是不一样的。再比如飞的动作,昆虫、鸟类和飞机,飞起来是不一样的。可见&#x…...
Python处理JSON数据
Python和JSON JavaScript Object Notation (JSON) 是一种轻量级的数据交换格式,通常用于Web应用程序之间的数据交换。JSON的设计使得它非常易于人和机器阅读和编写。JSON数据格式与Python数据结构非常相似,因此Python中提供了一个json模块,用…...

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 面试题
🍕 redis 面试题常规问题什么是 Redis?为什么要使用 Redis?Redis 一般有哪些使用场景?Redis 为什么快?数据类型和数据结构Redis有哪些数据类型?常用操作和应用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集合存储学生对象并遍历
需求:创建一个HashMap集合,键是学生对象(Student),值是居住地。存储多个键值对元素,并遍历。 要求保证键的唯一性:如果学生对象的成员变量值相同,我们就认为是同一个对象 思路: 定义…...

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

https://app.hackthebox.com/machines/Inject
https://app.hackthebox.com/machines/Inject Ref: 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 …...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...
FFmpeg 低延迟同屏方案
引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...

centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...

html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...

MFC 抛体运动模拟:常见问题解决与界面美化
在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...