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

最新文章
聚焦“AI+文旅” 9家企业与两江新区签订意向合作协议
  上海寺页科技有限公司打造的“FuntasyVR超感剧场”以 FuntasyVR 超感剧场为空间载体,不断研发以文化与科技为题材的全新体验,设计了探秘金字塔、寻梦三星堆、探秘巴黎圣母院等内容,消费者可通过VR头显参与单场25分钟的沉浸式体验,体
智能作家助手:一键,助力创作家高效创作
随着科技的飞速发展,人工智能逐渐成为我国经济社会发展的要紧推动力量。在众多人工智能应用中,创作家以其特别的功能和强大的创作能力,受到了广大创作者的喜爱。本文将为您介绍一款全新的智能作家助手——创作家,一键,助您高效创作。传
【游戏相关】《真实MiG
以下正文一架飞机的操控品质是表现在飞行员能够多轻松且精确地完成飞机在任务中所需的机动上的。这在本质上由两个因素组成:- 飞机在没有飞行员交互介入(开环)的情况下显示出的固有稳定性- 闭环操控特性;例如,协调控制,动力控制如MiG-
母亲节专题:动漫中那些难忘的母爱
  很多动漫中的母亲在故事开始之前就已经逝去,但是她们的爱始终鼓舞着孩子们奋勇前行。那么她们临终前是如何将心意表达出来的呢?  “鸣人,你今后可能会遇到很多困难……会背负很多痛苦,但一定要相信自己,明确自己的目标和梦想,勇
比漫熊正版下载最新版
比漫熊正版一款备受漫迷们喜爱的软件,比漫熊正版为读者提供了一个没有广告打扰的舒适漫画阅读环境,让读者能够更好地享受阅读的乐趣;而且漫画作品种类丰富,涵盖了各种题材,每个用户都能够找到自己喜欢的漫画作品,软件内部还按照漫画题
如何协商还款
小编导语在现代社会中,借款已经成为人们生活中不可或缺的一部分。无论是为了购房、购车,还是应对突发的经济困难,贷款都能为我们提供必要的资金支持。当我们面临还款压力时,如何有效地协商还款成为了一个重要的问。本站将从多个角度探讨
“过个屁年!”30岁河南女子冲上热搜:2024,最想哭的一幕来了
2014年春晚的第一个节目是《想你的365天》。演唱者:李玟、、、林志炫。镜头第一个切到的人就是。10年前她还在春晚上献唱,10年后她已在另一个世界了。物是人非。那一年春晚,主持人大家都不陌生:朱军、董卿、张国立、李思思、毕福剑。彼
分享5个自动生成PPT的网站
1、Mindshow 之前公众号里分享过这款做PPT的AI工具,这次再拿出来分享一次。 没别的原因,确实好用。 而且也是目前能够和ChatGPT结合使用最好的PPT工具之一。 直接在ChatGPT生成PPT内容,转成Markdown格式复制进来一键排
华为智慧PC助力年终总结,提升职场效率的最佳选择
随着2024年的结束,职场人士和学生们都在进行着年度总结,回顾过去一年的经验与挑战。在这个过程中,一款真正的智慧PC能够显著提升工作效率,帮助用户更好地完成总结与呈现,而华为的MateBook系列无疑是其中的佼佼者。在快速发展的混合办公
事实还是虚构?揭穿 7 个流行的 SEO 神话
  SEO 充满了建议、最佳实践,是的,甚至是神话!  关于 SEO 的误解经常存在;例如,相信更多的链接会提高排名,或者 SEO 只是一项一劳永逸的任务,可能会产生错误的期望。  在本文中,我们将事实与虚构分开,揭穿七个常见的 SEO 神话
相关文章
推荐文章
发表评论
0评