前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker系列(2):容器给部署带来的快乐

Docker系列(2):容器给部署带来的快乐

作者头像
Homqyy
发布2023-03-06 13:25:06
4470
发布2023-03-06 13:25:06
举报
文章被收录于专栏:知行合一知行合一

前言

本章目标是展示使用容器带来的快乐。最近正好因为自己买的云服务器的公司因为自身原因决定停止云服务器的服务,因此被迫的要求进行服务器迁移。

而正因为我部分使用了容器,外加平时对服务器配置进行了备份,因此在整个迁移过程中并没有太高的成本,大概花了1天时间。其中95%时间用在将未docker化的服务进行docker化,只有5%的时间将备份重用及安装docker。

可以说真实的感受到了docker迁移带来的快乐,你可以想象到,我只需要在一台全新的服务器上安装docker,接着用写好的docker-compose.yml文件及备份过的“配置”,就可以瞬间恢复所有服务:

站点服务目录结构图

如上所示,就是我站点提供的所有服务:

  • backup:备份服务
  • blog:博客服务
  • HSEVPN:VPN服务
  • jenkins:CI/CD服务
  • port_map:端口映射服务
  • proxy:代理服务

而这些服务仅用一个文件docker-compose.yml进行集中管理即可,整个备份也很方便,仅需要备份配置即可,好,那么接下来就开始跟着示例开启快乐之旅。

查看帮助信息

如同我在《Perl语言入门》所说:“无论你此时此刻学的是何种语言,但都要记住一点,学会看文档,无论官网的document,还是系统下的manpage,还是语言或工具独有的help,比如Linux/Unix的man,python中的help和dir,命令行工具中的–help和-h,你都必须学会看,因为那里有最权威最准确最详细的解释。”,工具也是一样的,学会看文档是基础。

  • 查看帮助信息:docker help [command],比如查看pull指令如何使用

帮助说明示例图

为了更好的讲述如何使用docker,接下来我们在安装完docker后,会以搭建一个WEB服务器示例为入口,进行讲解。

后续所有的篇幅都以CentOS为主进行讲解,为了满足桌面用户的需求,也会展示MAC的操作界面(Windows基本与MAC一样)。


安装docker

以下仅提供部分环境的安装,更详细的信息请参考:“官网安装手册”,上面有各个系统的安装教程。

Linux-CentOS系统

1. 安装docker

按序执行以下命令:

代码语言:javascript
复制
sudo yum install -y yum-utils

sudo yum-config-manager \
    --add-repo          \
    https://download.docker.com/linux/centos/docker-ce.repo

sudo yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
2. 启动docker
代码语言:javascript
复制
sudo systemctl start docker
3. 开机自动运行docker
代码语言:javascript
复制
sudo systemctl enable docker

Windows系统

点击下载:安装器

Mac(OS X)系统

Intel芯片,点击下载:Intel芯片安装器

苹果芯片,点击下载:苹果芯片安装器


搭建一个WEB服务器

注意:以下搭建的服务都只为了演示docker的操作,仅作为学习使用,不可应用于实际场景。

WEB服务示例图

如上所示,为了更好的运维WEB服务,我们计划同时部署三个服务:

  • HTTP服务:提供HTTP站点能力。
  • 邮件服务(邮件客户端):提供发送邮件的能力。
  • 监控服务:提供监控系统的能力,在发现“HTTP服务”停止运行时会通过“邮件服务”来发送告警邮件给管理员。

实现上述示例只需要执行以下三个命令即可,往后阅读将进行介绍:

  • 启动HTTP服务:docker run -d --name local.http --rm homqyy/example_http
  • 启动邮件服务:docker run -d --name local.mailer --rm homqyy/example_mailer
  • 启动监控服务:docker run -it --name local.monitor --rm --link local.http:insidehttp --link local.mailer:insidemailer homqyy/example_monitor

启动HTTP服务

docker源码路径 如果想了解本服务的实现,可参阅仓库:homqyy/docker-example-http

在终端下执行命令:docker run -d --name local.http --rm homqyy/example_http

  • docker run:是用于启动一个容器。
  • -d:是detach的意思,即分离。也就是在后台运行。
  • --name:是给容器指定一个名字,这意味着我们将启动一个名叫local.http的容器。
  • --rm:是在容器停止后,自动将容器删除
    • 容器存在时有“运行”和“停止”两种状态,而这里是直接将容器删除。
    • 因为这只是个用例,因此退出后直接自动删除容器会比较方便。而真实环境下如果只是想临时的将服务停止,则不要追加此参数。
  • homqyy/example_http:这个是镜像名称。如果本地没有此镜像则会去默认的仓库上拉去镜像。显然第一次运行的时候一定是去仓库上拉去的。

经过上面的命令,你就运行了一个http服务器了,且服务端口为默认的8080。是不是很简单,我们可以用命令docker ps查看一下当前运行的容器:

命令行查看运行的容器示例图

  • CONTAINER ID:是容器的唯一标识,我们除了通过“NAMES”来操作容器外,还可以通过“CONTAINER ID”。
  • IMAGE:表示此容器是由哪个镜像产生的。
  • COMMAND:运行容器时执行的命令。
  • CREATED:容器的创建时间。
  • STATUS:容器的运行状态,UP表示还在运行中,10 Minutes结合UP表示的是已经运行了10分钟。
  • PORTS:对外暴露的端口
  • NAMES:容器的名称

docker客户端查看运行的容器示例图

同时也用命令docker images查看下当前本地有哪些镜像:

命令行查看运行的镜像示例图

  • REPOSITORY:是仓库的意思,表示的是仓库名称。
  • TAG:仓库的版本,latest是最新版的意思。
  • IMAGE ID:是镜像的唯一标识,我们除了通过“仓库:版本”来操作镜像外,还可以通过“IMAGE ID”。
  • CREATED:镜像的获取时间。
  • SIZE:镜像大小。

docker客户端查看本地镜像示例图

注意:上述运行的容器并不支持与本机通信,因此你没法访问此HTTP服务器,如果期望本机可以访问的话,可以使用命令:docker run -d --name local.http.hostmode --rm -p 80:8080 homqyy/example_http(这里会发现,我们用相同的镜像启动了第二个容器,而且它们之间不会产生冲突!这是绝对是值得高兴的事情。)

  • 这里比上面的命令多了个-p 80:8080,意思是本机80端口映射到容器的8080端口,这说明,我们可以访问“http://localhost”来访问容器,就好像这个容器的HTTP服务就安装在你本地一样。
  • 执行命令wget -O – http://localhost进行测试(如果有浏览器也可以直接用浏览器),得到如下结果:

wget测试结果示例图

浏览器测试结果示例图

由于开放本机访问权限不是我们的主题,因此可以把local.http.hostmode容器先给删除了,执行命令:docker stop local.http.hostmode(由于之前我们加了--rm参数,因此停止容器后将自动删除)

启动邮件服务

docker源码路径 如果想了解本服务的实现,可参阅仓库:homqyy/docker-example-mailer

在终端下执行命令:docker run -d --name local.mailer --rm homqyy/example_mailer

通上所述,可以自行查看docker的运行情况。之前没有讲怎么查看容器的启动日志,可通过以下命令查看:docker logs local.mailer,结果如下所示:

命令行查看邮件容器的日志信息示例

桌面的话,点击容器即可查看日志:

docker可会淡查看邮件容器的日志信息示例

启动监控服务

docker源码路径 如果想了解本服务的实现,可参阅仓库:homqyy/docker-example-monitor

在终端下执行命令:

代码语言:javascript
复制
docker run -it --name local.monitor --rm \
    --link local.http:insidehttp         \
    --link local.mailer:insidemailer     \
    homqyy/example_monitor
  • 观察“监控服务器”的运行命令可以发现,这里有个细微的变化,就是用-it取代了-d参数:
    • -i:interactive,交互的意思,会把标准输入映射到容器中,即我们在键盘的输入会映射到容器中。
    • -t:tty,终端的意思,会申请一个伪终端,即讲容器的标准输出打印到主机的终端上。
    • 用了这个参数之后,我们就像进入到容器内部一样,可以进行操作和直接查看(不必通过docker日志查看了)。
  • --link:链接,将容器链接到一起的意思,这样彼此之间就可以相互通信了(之前我们讲过,容器之间时相互隔离的,其中包括网络隔离。而通过“链接”我们可以让原本网络隔离的容器间不再隔离了,可以通过网络进行通信。比如,这里的意思就是将“监控服务器(local.monitor)”与“http服务器(local.http)”和“邮件客户端(local.mailer)”链接到一起,使之可以进行通信。

成功启动后终端会一直打印监控信息,结果如下所示:

启动监控器示例图

这里之所以每秒输出一条日志是因为我给“监控服务器”设置的监控间隔为1秒钟。

从交互模式切到后台模式 如果在使用-it与容器进行交互了一段时间后,想在不中断容器运行的情况下退出交互模式,可以使用组合键“ctrl+p+q”来实现。

这时候我们可以用一个全新的终端或则从“交互模式”切换到“后台模式”后,执行命令docker stop local.http来停止HTTP服务器,并观察“监控服务器”的日志信息:

退出HTTP服务器后监控服务器的日志示例图

停止后我们发现,“监控服务器”输出了“系统异常,发送告警邮件”。此时我们再一次通过docker logs -f local.mail查看`邮件客户端“的日志信息:

退出HTTP服务器后邮件客户端的日志示例图

我们发现,“邮件客户端”发送了邮件,邮件内容为:

代码语言:javascript
复制
To: admin@work
Message: 服务器停止运行,请检修!

总结

回顾一下部署HTTP服务器的示例步骤,会发现部署过程很简单,也就三条指令:

  • 启动HTTP服务:docker run -d --name local.http --rm homqyy/example_http
  • 启动邮件服务:docker run -d --name local.mailer --rm homqyy/example_mailer
  • 启动监控服务:docker run -it --name local.monitor --rm --link local.http:insidehttp --link local.mailer:insidemailer homqyy/example_monitor

本文所述的命令涉及的参数都只是一部分,请发挥“阅读文档”的能力,去升华对docker命令行的理解和使用:

代码语言:javascript
复制
docker help run
docker help stop
docker help logs

docker仓库:

代码语言:javascript
复制
- HTTP服务器样例
- 邮件客户端样例
- 监控服务器样例

代码仓库:

代码语言:javascript
复制
- HTTP服务器样例代码
- 邮件客户端样例代码
- 监控服务器样例代码

继续阅读

待续

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022年4月27日2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 查看帮助信息
  • 安装docker
    • Linux-CentOS系统
      • 1. 安装docker
      • 2. 启动docker
      • 3. 开机自动运行docker
    • Windows系统
      • Mac(OS X)系统
      • 搭建一个WEB服务器
        • 启动HTTP服务
          • 启动邮件服务
          • 启动监控服务
          • 总结
          • 继续阅读
          相关产品与服务
          容器镜像服务
          容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档