分享好友 最新动态首页 最新动态分类 切换频道
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*

最新文章
闲置8年后更名,沈阳一大型商场将重新开业!
来自中国房地产报消息,闲置8年之久,沈阳市北于洪地区最大的社区商业综合体——恒大都市广场B馆终于有了新动作。业内人士透露,该商业项目已经全权委托柏利城商业管理(苏州)有限公司展开全面升级改造与招商工作,与此同时,该商业体也已
直播软件搭建要求有哪些-从技术到硬件配置全方位解析!
直播软件搭建的要求是一个多方面的问题,涵盖了技术、硬件、软件以及网络等多个领域。搭建直播平台不仅需要考虑到用户体验的流畅性,还要确保平台的安全性和可扩展性。为了确保直播软件的成功搭建,开发者需要满足一定的技术要求,合理配置
科技早报|谷歌深夜发布最新大模型;马斯克成身家超4000亿美元“第一人”
12月11日,据媒体援引知情人士消息报道,苹果正在研发专门为人工智能设计的服务器芯片,并正与博通合作开发该芯片的网络技术。新芯片的内部代号为Baltra,预计到2026年可量产。这也标志着苹果芯片团队一个新的里程碑,该团队最初为iPhone设
日常TikToK达人邀约,第三方工具靠不靠谱?
目前做的卖家在经历过1-3个月以后都会面临瓶颈期,手动达人逐个邀约每天大约也就50个左右已经无法满足经营需求,所以卖家朋友会选择第三方达人建联工具实现突破,相比于手动建联,确实极大的提高了建联效率,但是是不是使用了第三方建联工
笔记本电脑功率详解:影响因素、计算方式与应用场景
一、笔记本电脑功率概述笔记本电脑功率是指笔记本在运行过程中所需的能量,通常以瓦(W)为单位表示。功率是影响笔记本电脑性能的重要因素之一,了解笔记本功率可以帮助我们更好地选择适合自己需求的电脑。二、影响笔记本电脑功率的因素1.
运营干货|| 亚马逊广告关键词匹配方式及使用场景,让你的流量更精准 Keyboards 2
一谈到广告,关键词就是一个绕不开的话题,也是我们在广告运营中的重中之重。所以,我打算将亚马逊上关键词的内容,分成8篇的更新,从0-1带你全方位的了解亚马逊关键词的基础概念到高阶运营中的用法。在之前的文章中已经更新了亚马逊关键词
郑州企业专属网络名片定制专家,助力品牌飞跃
郑州专业网站搭建团队,专注于为企业量身定制专属网络名片,助力品牌形象提升与市场拓展,推动企业腾飞。郑州专业网站搭建团队的核心优势挑选郑州专业网站搭建团队的策略塑造企业独特的网络形象在互联网迅猛发展的今天,网络营销日益成为企
教你如何获取root权限认识ROOT怎么使用教程(图)
手机越用越智能,而系统定制又包含较多无用的应用,对于玩机爱好者来说,这是多么多么郁闷的一件事;更为重要的是,高玩们更喜欢DIY,喜欢那种控制的快感!所以今天就给大家说说Android手机ROOT权限的获取(iOS的越狱、塞班的xx、Meego的RO
郑州电子中专学校专业介绍 学费多少 2024招生简章
在当今信息技术日新月异的时代,职业教育成为连接梦想与现实的桥梁。郑州电子中专学校,作为一所集专业技能培训与理论知识传授于一体的优秀中等专业学校,致力于培养适应市场需求的高素质技能型人才。本文将详细介绍郑州电子中专学校的专业
股票行情快报:华测导航(300627)12月12日主力资金净卖出2432.67万元
证券之星消息,截至2024年12月12日收盘,华测导航(300627)报收于42.01元,下跌0.4%,换手率2.29%,成交量10.38万手,成交额4.35亿元。12月12日的资金流向数据方面,主力资金净流出2432.67万元,占总成交额5.59%,游资资金净流入2430.27万元
相关文章
推荐文章
发表评论
0评