分享好友 最新动态首页 最新动态分类 切换频道
Docker快速部署(go的web项目为例)
2024-12-27 00:35
  • 此文章将以go语言后端代码搭配docker容器在服务器(Linux)进行部署,只说需要用到的一些docker命令,同时会给出命令相关参数的讲解。windows相关docker操作相同。下文出现与nil相关的内容,是因为我的项目是以nil为名,可以替换成其他的。
  • 下面关于docker的使用都是以容器名为例,如果出现错误,可以尝试将容器名改为对应的id(创建时候的初始化命名除外

参考文献:go项目部署:docker部署go项目&直接运行二进制文件部署(两种方式进行部署)-CSDN博客

Docker快速部署(go的web项目为例)

如何使用Docker部署Go Web应用 | 李文周的博客 (liwenzhou.com)

Docker 容器使用 | 菜鸟教程 (runoob.com)

1.docker的相关介绍

有关docker相关概念性理论可参考:Docker 教程 | 菜鸟教程 (runoob.com)

下面将以一个形象的例子向你解释docker。

​ Docker是一种开源的容器化平台,允许开发者将应用程序及其依赖打包成一个独立的、可移植的容器。它提供了一种简单而高效的方式来构建、部署和运行应用程序,使应用程序能够在不同的环境中以相同的方式运行。

​ 现在让我们通过一个形象的例子来解释Docker的概念。

​ 想象一下你是一名蛋糕师傅,你有一份精心制作的蛋糕食谱。你希望将这个食谱分享给其他人,让他们也能制作出同样美味的蛋糕。传统的方式是将食谱打印出来并分发给其他人,但这样做可能存在一些问题。

​ 首先,每个人可能会有自己的厨房和材料,这意味着他们可能需要根据自己的环境和材料做一些调整才能成功制作蛋糕。其次,如果你更新了食谱,你需要重新分发更新后的版本给每个人。

​ 现在,假设你使用Docker来容器化你的蛋糕食谱。你将食谱中所需的每个成分和步骤都清楚地列出来,并将其放入一个标记为"蛋糕容器"的容器中。这个容器包含了制作蛋糕所需的一切:配方、材料和步骤。

​ 现在,你可以将这个蛋糕容器分享给其他人,他们只需要在自己的厨房中运行这个容器,就可以按照你的精确配方制作出同样美味的蛋糕。无论他们使用的是Windows、Mac还是Linux,无论他们的厨房设置如何,这个蛋糕容器都能够在不同的环境中以一致的方式运行。

​ 如果你更新了蛋糕的配方,你只需要更新蛋糕容器中的食谱,然后通知其他人更新他们本地的容器即可。每个人都可以轻松地获取最新的食谱,并以相同的方式制作蛋糕。

这个例子中的"蛋糕容器"就好比是Docker容器,而食谱和制作蛋糕的过程就好比是应用程序和其依赖。通过使用Docker,开发者可以将应用程序及其依赖打包成一个独立的容器,使其能够在不同的环境中以一致的方式运行,从而简化了应用程序的开发、部署和管理过程。

2.docker的下载与安装

Ubuntu Docker:Ubuntu Docker 安装 | 菜鸟教程 (runoob.com)

Windows Docker:Windows Docker 安装 | 菜鸟教程 (runoob.com)

Linux云服务器:云服务器 | 菜鸟教程 (runoob.com)

ps:在windows下的docker desktop可能刚下载会有一个报错,是提醒你需要下载WSL,点击按钮进行相关下载即可。

3.利用docker进行go项目的部署

3.1在服务器上进行前期准备

​ ①提前编写好Docerfile文件(文件没有后缀名/拓展名),Dockerfile内容如下

 

在上面的内容里,涉及到一个名为wait-for.sh的文件,文件内容如下

 

​ ②修改配置文件,将host进行修改,后续会在 3.3其他 中解释为什么需要修改。

3.2相关docker部署操作

3.2.1 确保docker可以正常使用(windows下打开docker desktop,显示正常页面即可

​ 经典hello world!!!

 

显示下图表示docker创建一个容器并成功运行

参数解析

  • docker: Docker 的二进制执行文件。
  • run: 与前面的 docker 组合来运行一个容器。
  • ubuntu:15.10 指定要运行的镜像,Docker 首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像。
  • /bin/echo “Hello world”: 在启动的容器里执行的命令

3.2.2 进行go的web项目部署

(1)拉取/构建 镜像(这点的镜像就相当于上面做蛋糕例子里面的材料,准备材料

​ 我们的项目用到了mysql,redis,以及go相关内容

拉取mysql,redis的镜像(参考文献:Docker 安装 MySQL | 菜鸟教程 (runoob.com))

 
 
 
 

参数解析

  • docker pull:组合到一起表示拉去镜像
  • **mysql:latest中的mysql:**表示需要拉取的镜像是mysql数据库的镜像
  • mysql:latest中的latest: 表示版本,此处latest代表最新版本,后续有新版本需要重新拉取

​ 有关镜像版本问题可以取参考文献中查找

例如利用: docker search mysql 就可以查看mysql各个版本

对go项目进行构建镜像

 
 

参数解析

  • docker build:表示构建镜像,需要一个Dockerfile文件进行指引(上文我们已经创建好的)
  • -t :指定要创建的目标镜像名
  • nil_image: 表示镜像名

(2)查看镜像是否正常 拉取/构建 成功

 
 

(3)创建容器(蛋糕材料已准备好,放进盒子里打包起来

mysql容器创建

 

参数解析

  • -p 13306:3306 :映射容器服务的 3306 端口到宿主机(服务器本机)的 13306 端口,外部主机可以直接 通过 宿主机ip:13306 访问到 MySQL 的服务。
  • MYSQL_ROOT_PASSWORD=123456:设置 MySQL 服务 root 用户的密码。
  • **-itd:**在后台运行,不显示到前台
  • **–name:**指定要创建的目标容器名
  • nil_mysql:指定的容器名
  • **mysql:**需要使用到的镜像名

ps:此处映射到13306可以防止端口冲突,如果13306发生冲突的话,可以使用其他的本机空闲端口。

进入msyql容器中,进行相关数据库和表的创建

 
 
 
 

redis容器创建

 

可以使用下面命令进入redis容器里进行相关操作

 

go项目的容器启动

 
 

参数解析

  • **–link=nil_mysql:nil_mysql:**link表示与其他容器进行连接。在go项目中,我们将host改为nil_mysql,
    前面一个nil_mysql表示的是go里面conf文件下mysql的host配置,后面一个是nil_mysql容器,将二者进行连接。
  • **–link=nil_redis:nil_redis:**与mysql相同
  • **-p 8888:8888:**前一个8888表示映射到本机(服务器本机)的8888端口,外部就可以访问该服务器的8888端口进行web服务。后一个是容器中的8888端口,后一个的8888端口要与web框架连接的端口号一致。

经过上述步骤:就已经完成了goweb项目的服务器部署,外部就可以访问我们的api接口了

3.3 其他

:每一个容器都可以看成一个小电脑,里面也有众多端口号。上文的-p简单的可以看成一个远程连接。如

​ -p 8080:8888 就可以理解为,本机的8080端口对接容器中的8888端口,当外部访问本机的8080端口时,就跳转到容器中的8888端口进行相关服务。

如何查看容器(项目)是否正常运行

 
 
  • **-a: **此处-a表示显示全部(all)的容器,包括已停用的。如果没有这个参数,只显示运行中的。

容器的运行情况(ctrl+c可以强行终止查看)

 
 

**-a: **此处-a表示显示全部(all)的容器运行情况,包括已停用的。如果没有这个参数,只显示运行中的。

容器的暂停,启动与删除

 
 
 
 

:如何像控制台一样查看他们的运行情况

windows下,打开docker desktop,找到view detail即可

linux下

 
 

参数解析

  • **docker logs: **显示日志(detail)
  • **–tail 10: **显示最新(tail-末尾)的十条,不使用这个参数,就展示所有的记录
  • **nil:**要查看的容器名

:go项目conf配置文件的相关解释

图中host表示要连接的容器的名字,端口表示的是容器里面对应服务的端口号。

如上文中的nil_mysql容器(看作一个小电脑),他里面的mysql服务是在容器的3306端口下。

所以配置文件里任然是3306,而不是nil_mysql容器映射到本机的13306端口。

如果填写的是13306,那么访问的是容器里面的13306端口,是没有服务的。

后续可能会出如何利用docker-compose去解决容器连接的问题。

谢谢大家了!ヾ(≧▽≦)o*

最新文章
盖世小鸡GameHub:手机变身PC游戏神器!
在数字娱乐飞速发展的今天,游戏行业逐渐突破了传统的设备限制,玩家的选择也愈加多样化。最近,国内知名模拟器品牌盖世小鸡宣布推出一款名为GameHub的PC模拟器应用,标志着手机游戏体验的一个重大突破。据悉,该应用预计将在2024年春节前
网络推广的方法有哪些?这几个方法效果好!
网络推广的方法有哪些?这几个方法效果好!网络推广的方法有哪些?这几个方法效果好!网络推广是当今企业竞争中的重要手段之一,它能帮助企业快速扩大知名度,提升品牌影响力。本文将介绍几种常见的网络推广方法,并分析这几个方法的效果。
微信小程序用户破9亿,月活超8亿领域曝光!
微信小程序用户规模持续扩大,活跃度显著提升。最新统计数据显示,直至今年十月,微信小程序的累计用户数已突破9.49亿大关。这一数字不仅彰显了微信小程序在用户群体中的广泛影响力,也反映出其日益增长的受欢迎程度。在用户行为方面,微信
绝了,2024 最新百度网盘/阿里云盘/夸克网盘/迅雷云盘网盘资源搜索神器,全网资源任你搜...
今天分享几个2024最新阿里云盘/百度网盘/夸克网盘/迅雷云盘资源搜索神器网站和app,全网资源任你搜,无需注册使用,关键还免费,网站和app地址在公众号后台对话框回复 网盘第1个混合盘,一个搜索网站规则引
正在阅读:翻新机旧芯换新壳 360优化大师一键验真翻新机旧芯换新壳 360优化大师一键验真
  随着双十一电商热潮的临近,各大电商渠道、3C卖场均掀起了一番智能机购机潮,面对此般热潮,一些占据价格优势的水货及翻新机产品也就此浑水摸鱼,对于一些不懂行的消费者而言,就很容易陷入商家的陷阱之中。  往往购机后被曝出各种质
高测股份
高测股份(688556)业绩预告公告日期2024-02-27报告期2023-12-31类型预增业绩预告摘要预计2023年1-12月归属于上市公司股东的净利润为:1461450211.57元,与上年同期相比变动幅度:85.32%。业绩预告内容预计2023年1-12月归属于上市公司股东的
word一键生成ppt 分页_如何将word快速生成PPT
许多人的制作方法或许都是这样的: 第一步:新建一个空白的PPT文件 第二步:把word文档中的内容一点一点的复制在PPT文件中 第三步:对PPT文件排版如果是你,你也会是这样操作的吗? 实际上,完
谷歌搜索引擎优化(SEO)入门指南
随着互联网的快速发展,搜索引擎优化(SEO)已成为众多企业和个人网站不可或缺的一部分。SEO能够帮助您的网站在搜索引擎结果页(SERP)中获得更高的排名,从而增加曝光率和流量,提高销售和品牌知名度。在本文中,我们将向您介绍SEO的基本
关键词排名优化哪家?选择合适的SEO公司助你赢得流量与市场
不同的行业、不同的企业在关键词优化方面的需求各不相同,因此,选择SEO公司时,是否能够提供定制化服务是一个重要的考量标准。优秀的SEO公司会根据企业的实际情况,分析其市场定位、目标客户群体、竞争对手以及产品特点,从而提出量身定制
美职篮巅峰对决:球员强度全面排行,揭秘最强球星TOP榜单推荐
本文目录导读:T0强度排行T1强度排行T2强度排行在美职篮(NBA)的巅峰对决中,球员的强度是决定比赛胜负的关键因素之一,以下是一份基于球员实力、表现以及影响力的全面排行,揭秘最强球星TOP榜单推荐:1、迈克尔·乔丹:作为篮球历史上的
相关文章
推荐文章
发表评论
0评