Docker云容器的部署与使用

举报
MJ_C 发表于 2023/11/10 20:27:50 2023/11/10
【摘要】 本项目使用了华为云服务提供的基于鲲鹏计算架构的远程ECS主机和Docker容器,完成了Docker主机的安装和配置、镜像的搜索和下载、容器生命周期的基本管理、容器网络的管理等实验任务,并通过Dockerfile来构建nginx镜像,了解Dockerfile镜像构建过程。实验结束后,成功在ECS服务器上部署运行了nginx服务,且可以通过HTTP协议正常访问。

Proj-1 Docker云容器的部署与使用

本实验使用了华为云服务提供的基于鲲鹏计算架构的远程ECS主机和Docker容器,完成了Docker主机的安装和配置、镜像的搜索和下载、容器生命周期的基本管理、容器网络的管理等实验任务,并通过Dockerfile来构建nginx镜像,了解Dockerfile镜像构建过程。实验结束后,成功在ECS服务器上部署运行了nginx服务,且可以通过HTTP协议正常访问。

一、实验内容

使用华为云提供的云服务,完成Docker主机的安装和配置、镜像的搜索和下载、容器生命周期的基本管理、容器网络的管理。具体包括以下几个方面的实践内容:

(1)完成Docker的安装和配置;

(2)完成Docker镜像的基本操作;

(3)完成Docker Hub的基本操作;

(4)完成Docker容器的基本操作。

二、实验原理与参数

2.1 组网环境

2.1.1 实验组网示意图

image.png

图2-1 Docker部署组网环境

2.1.2 理解与分析

云计算的一个重要环节就是网络连接,否则本地将无法操作远程的计算资源。如图2-1所示,在华为云的组网中,用户通过公网IP搭配特定的端口号访问相应实例,从公共镜像仓库获取镜像,在将镜像实例化部署到容器中之后,再打包上传至远程服务器。通过华为云弹性云服务器ECS实例构建Docker主机,完成Docker镜像、容器等基本操作。

2.2 远程连接手段

image.png

图2-2 云主机的远程操控

本次实验使用远程连接工具对ECS主机进行访问与操作。使用的工具包括PuTTY、Xshell等,均用到了SSH协议:如图2-2所示。SSH是一种加密的网络传输协议,可在不安全的网络中网络服务提供安全的传输环境,通过在网络中创建安全隧道来实现 SSH 客户端和服务器之间的连接。

2.3 ECS实验环境参数

2.3.1 CPU/GPU型号与参数

表2-1 CPU参数

属性 型号 核心数 架构 规格名称 BogoMIPS
参数 Huawei Kunpeng 920 2.6GHz 2 鲲鹏计算 kc1.large2 200.00

表2-2 GPU参数

属性 设备编码 规格
参数 02:03.0 Virtio GPU(rev 01)

2.3.2 内存容量与带宽

表2-3 主存参数

属性 内存容量 基准/最大带宽 可用空间
参数 4 GiB 0.8/3 Gb/s 2450368 kB

2.3.3 互联网络参数

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
​    inet 192.168.0.14 netmask 255.255.255.0 broadcast 192.168.0.255
​    inet6 fe80::f816:3eff:fe12:6a78 prefixlen 64 scopeid 0x20<link>
​    ether fa:16:3e:12:6a:78 txqueuelen 1000 (Ethernet)RX packets 24481 bytes 36216491 (34.5 MiB)RX errors 0 dropped 0 overruns 0 frame 0TX packets 2588 bytes 207445 (202.5 KiB)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
​    inet 127.0.0.1 netmask 255.0.0.0
​    inet6 ::1 prefixlen 128 scopeid 0x10<host>
​    loop txqueuelen 1000 (Local Loopback)RX packets 0 bytes 0 (0.0 B)RX errors 0 dropped 0 overruns 0 frame 0TX packets 0 bytes 0 (0.0 B)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

三、Docker容器的基本操作

3.1 购买实验资源

3.1.1 配置VPC和ECS主机

首先根据要求,从华为云官网上配置虚拟私有云vpc-docker和ECS弹性云服务器资源。配置成功界面分别如下图3-1(a)和3-1(b)所示:
image.png

(a) 虚拟私有云

image.png

(b) 弹性云服务器

图3-1 实验资源的云上配置

3.1.2 配置远程连接

使用Xshell 7,根据ECS主机的IP地址创立和本机的SSH远程连接。连接成功界面如图3-2所示。在初始化界面中,还可读出当前进程数145,内存使用率9.5%,IP和登陆用户数等信息。

image.png

图3-2 ECS远程登录

3.1.3 更新系统内核

使用uname -r指令查看当前内核版本,之后yum指令下载最新版本安装,成功界面如下图所示。

image.png

图3-3 内核版本更新

3.1.4 Docker依赖工具的安装

使用yum install安装依赖包,如图3-4所示,共安装了4个工具,即lvm、thin-provisioning-tools等。

image.png

图3-4 Docker依赖包的安装

3.2 Docker的安装和配置

3.2.1 安装Docker

使用yun install安装docker镜像,如图3-5所示:

image.png

图3-5 Docker安装

3.2.2 配置Docker

启动Docker后台服务,测试运行hello-world,如图3-6(a)可见测试成功。之后使用docker images,即有全部的docker镜像文件,如图3-6(b)所示。
image.png

(a)

image.png

(b)

图3-6 Docker相关配置

3.3 镜像的基本操作

3.3.1 获取与查询镜像

使用docker pull指令来获取nginx镜像,如图3-7所示,可见已经下载了最新版本的镜像。

image.png

图3-7 获取镜像文件

完成后,使用docker images查询已有的镜像文件,如下图所示。可见系统中已经存在两个刚刚下载的镜像文件。

image.png

图3-8 查询镜像

使用docker system df指令可以查看镜像文件的大小。如图所示,一共有134.6MB的文件。

image.png

图3-9 查询镜像存储空间

3.3.2 镜像的删除

使用部分镜像id即可删除镜像,如图3-10所示。可见已经删除了前缀为114的镜像文件nginx。

image.png

图3-10 删除镜像nginx

之后通过仓库名+标签删除镜像,如果删除的镜像已经产生了容器实例即会报错,因为镜像被占用。这时需要先删除容器实例或添加删除参数-f,即强制删除,一般用于被占用的删除,如图3-11所示。

image.png

图3-11 删除镜像hello-world

3.4 容器的基本操作

3.4.1 容器的创建与启停

1.首先创建一个基于httpd镜像的新容器。如图3-12,由于主机中没有对应镜像,将会从docker Hub中拉取最新镜像。

image.png

图3-12 创建容器httpd

2.使用docker ps -a容器信息,根据图3-13的输出可知:刚刚添加的容器为httpd,状态为Created。

image.png

图3-13 查看容器httpd信息

3.根据显示的容器ID或容器名称启动容器,如图3-14所示。可见httpd的状态改为Up 10 seconds。

image.png

图3-14 启动容器httpd

4.容器的停止,如图3-15所示,httpd的状态改为Exited。

image.png

图3-15 关闭容器httpd

5.容器的重启与暂停。如图3-16所示,可以从输出信息中读到状态的修改。

image.png

图3-16 重启、暂停容器httpd

6.暂停的恢复、容器进程的关闭、重新启动与容器重命名,如图3-17所示。前三部操作过后均会输出容器id,表明任务完成。连续两次docker ps输出的NAMES属性改变,说明重命名成功。

image.png

图3-17 暂停的恢复、容器进程的关闭、重新启动与重命名httpd

3.4.2 容器的运行

1.运行一个基于Ubuntu的新容器,如图3-18所示。返回Hello world字符串,说明容器启动成功。

image.png

图3-18 启动新容器

2.启动终端,对目录进行查找操作,之后退出Ubuntu。如图3-19所示:

image.png

图3-19 终端操作

3.比较是否使用-d参数运行容器的区别,可以看出输出的行数有明显不同:

image.png

图3-20 容器的运行

4.通过docker logs查看容器Ubuntu运行的日志,可以看到之前产生的hello world输出信息如图3-21所示。

image.png

图3-20 容器的运行日志

3.4.3 容器的进入和删除

1.再次启动容器,然后使用docker attach进入终端,如图3-21所示,使用ps可以看到目前运行的终端程序;之后exit退出。

image.png

图3-21 进入容器

2.启动一个容器,使用-dit参数,此后执行docker运行和退出测试能否正常运行,如图3-22所示:

image.png

图3-22 容器操作流程

3.现在开始测试容器的删除,对应实验指导书1.5.4。使用docker rm删除容器,但需要先停止这个容器,否则会报错,如下图所示。

image.png

图3-23 容器删除

4.删除所有已经终止的容器。如图3-24所示,列出了6个符合要求且已删除的容器。

image.png

图3-24 容器的进一步删除

3.5 私有镜像仓库搭建

本节主要展示的是docker-registry的安装和运行测试步骤和操作输出。

1.获取官方registry镜像,然后安装下载。使用ps查看运行状态,可见已成功安装运行。

image.png

图3-25 运行registry

2.使用docker images可见镜像列表里增加了我们刚才安装的registry镜像:

image.png

图3-26 镜像列表

3.使用docker tag标记镜像,然后使用docker images可见标记信息,如下图所示:

image.png

图3-27 标记registry镜像

4.使用docker push上传myubuntu镜像。之后使用curl查看远程仓库的镜像,可见已经成功同步,如下图所示:

image.png

(a) 上传镜像

image.png

(b) 仓库镜像

图3-28 镜像的上传

5.删除已有镜像,然后再从镜像仓库中下载,如图3-29所示。可见myubuntu删除后可以从在下面的镜像仓库找到:本地仓库(127.0.0.1:5000)。

image.png

图3-29 镜像的重新下载

四、Dockerfile的基本操作

本实验通过 Dockerfile 来构建 nginx 镜像,实践Dockerfile镜像构建过程,以此来理解 Dockerfile 命令含义和Dockerfile 镜像构建过程,从而掌握如何通过 Dockerfile 构建镜像。

4.1 安装实验资源

本实验所使用的ECS弹性服务器规格与之前的相同,且TCP 端口81已经打开。因此不需要重新构建,可以直接进行后续的步骤。

4.2 Dockerfile文件构建

1.下载基础镜像centos 7,创建nginx_demo目录,进入文件夹向其中下载nginx源代码的安装包。如图3-30所示:

image.png

图3-30 源代码的安装

2.使用vim创建和编辑Dockerfile文件,然后通过该文件构建nginx镜像,成功界面如图3-31所示:

image.png

图3-31 使用Dockerfile创建镜像

3.使用docker images可以看到构建的nginx镜像,说明操作成功,如下图3-32所示。其标签为v1,大小为710MB,id为e8cb95e6a4d5。

image.png

图3-32 新创建的nginx镜像信息

4.3 Nginx镜像验证

1.使用如下命令,首先运行容器,然后成功将端口从容器的80映射到主机的80。之后使用docker ps指令,可以看到0.0.0.0:80->80,说明端口映射完成。如图3-33所示:

image.png

图3-33 容器端口映射

2.打开Edge浏览器输入ECS主机的IP+port,可以看到网页的输出,说明容器运行成功。如下图3-34所示:

image.png

图3-34 nginx镜像的远程网页

4.4 Dockerfile指令添加

1.使用vim Dockerfile,在原有文件的基础上添加CMD命令,设置nginx 非daemon守护进程,这样容器启动时不会自动退出。完成后使用该文件构建新镜像,如图3-35所示可见构建成功,镜像列表也已添加了Nginx V2。

image.png

图3-35(a) Nginx v2镜像的构建

image.png

图3-35(b) 更新镜像列表

2.再次进行端口映射,原理与4.3相同,这次映射到主机的81端口。如图3-36所示:

image.png

图3-36 nginx v2容器端口映射

3.打开浏览器进行验证,输入IP和port 81,输出正确信息,说明容器部署成功。

image.png

图3-37 nginx v2镜像的远程网页

4.5 资源的释放

本次实验的两个子实验完成后,释放华为云上的弹性云服务器ECS和外网IP等相关资源。

五、实验拓展与展望

5.1 对ECS云服务器的理解

5.1.1 ECS云服务器概述

弹性云服务器Elastic Compute Service(ECS)是华为云等云计算厂商提供的一种基础云计算服务。可以通过远程在高性能主机上控制部署自己的项目。云服务器相对传统的服务器而言,在部署项目时无需提前采购硬件设备,而是根据业务需要,可以随时扩容磁盘、增加带宽。

5.1.2 ECS云服务器的相关知识

表5-1列出了笔者自行归纳的有关ECS的知识点:

表5-1 ECS云服务器相关知识点

项目 ECS的属性值 说明
服务模型 IaaS 基础设施即服务。指把IT基础设施作为一种服务通过网络对外提供,并根据用户对资源的实际使用量或占用量进行计费的一种服务模式。ECS提供的主要就是可以自行扩展的服务器,软硬件都需要自行设置。
产品形态 VM、裸金属、DDH等 华为云的裸金属业务单独为BMS,安全性更高
产品组件 实例、镜像、块存储、快照等 本实验使用的ecs-docker即为云主机实例,创建的docker image即为镜像。
计算架构 x86、ARM等 华为云在此基础上扩展了鲲鹏等业务
实例类型 通用计算、异构计算、高性能计算 本实验使用的为鲲鹏通用计算增强型实例
部署模型 私有云等 本实验的vpc-docker属于私有云部署模型,当然ECS也支持其他部署方式

5.2 对Docker容器的理解

5.2.1 Docker的概念和运行原理

Docker是一个用于应用程序级虚拟化的系统。虽然不同的Docker容器可以共享一个kernel,但它们通常很少共享其他内容:文件、进程等都可以单独使用。它通常用于测试软件系统和在生产中运行它们。

Docker有这样几个概念:dockerfile,image,container,可以把image镜像理解为可执行程序,container是运行起来的进程。如果说写程序需要源代码,那么创建image就需要dockerfile,创建程序通过执行dockerfile里的指令创建对应容器。因此我们只需要在dockerfile中指定配置和依赖,之后将其交给docker进行docker build编译,生成的image就可以通过docker run运行了,image运行起来后就是docker container,如图5-1所示。

image.png

图5-1 Docker工作流程

5.2.2 Docker与云计算

随着云计算的广泛应用以及开发和运营团队高效协作的需要,Dcoker的使用越来越突出,其中Docker作为容器技术的一个广受欢迎的例子,已经成为了软件开发中的标准,并在改变完全堆栈虚拟化的范式方面发挥了重要作用。Docker对于云计算而言十分重要,原因在于Docker 容器允许开发人员将他们的应用程序与所需的依赖项(例如配置、框架、库和运行时)打包到其中,由此提供了一个把应用程序拆分为分布式组件的方法,并且用户还可以管理、升级这些容器成为集群。

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。