Docker云容器的部署与使用
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 实验组网示意图
图2-1 Docker部署组网环境
2.1.2 理解与分析
云计算的一个重要环节就是网络连接,否则本地将无法操作远程的计算资源。如图2-1所示,在华为云的组网中,用户通过公网IP搭配特定的端口号访问相应实例,从公共镜像仓库获取镜像,在将镜像实例化部署到容器中之后,再打包上传至远程服务器。通过华为云弹性云服务器ECS实例构建Docker主机,完成Docker镜像、容器等基本操作。
2.2 远程连接手段
图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 0
TX 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 0
TX 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)所示:
(a) 虚拟私有云
(b) 弹性云服务器
图3-1 实验资源的云上配置
3.1.2 配置远程连接
使用Xshell 7,根据ECS主机的IP地址创立和本机的SSH远程连接。连接成功界面如图3-2所示。在初始化界面中,还可读出当前进程数145,内存使用率9.5%,IP和登陆用户数等信息。
图3-2 ECS远程登录
3.1.3 更新系统内核
使用uname -r
指令查看当前内核版本,之后yum
指令下载最新版本安装,成功界面如下图所示。
图3-3 内核版本更新
3.1.4 Docker依赖工具的安装
使用yum install
安装依赖包,如图3-4所示,共安装了4个工具,即lvm、thin-provisioning-tools等。
图3-4 Docker依赖包的安装
3.2 Docker的安装和配置
3.2.1 安装Docker
使用yun install
安装docker镜像,如图3-5所示:
图3-5 Docker安装
3.2.2 配置Docker
启动Docker后台服务,测试运行hello-world,如图3-6(a)可见测试成功。之后使用docker images,即有全部的docker镜像文件,如图3-6(b)所示。
(a)
(b)
图3-6 Docker相关配置
3.3 镜像的基本操作
3.3.1 获取与查询镜像
使用docker pull指令来获取nginx镜像,如图3-7所示,可见已经下载了最新版本的镜像。
图3-7 获取镜像文件
完成后,使用docker images查询已有的镜像文件,如下图所示。可见系统中已经存在两个刚刚下载的镜像文件。
图3-8 查询镜像
使用docker system df指令可以查看镜像文件的大小。如图所示,一共有134.6MB的文件。
图3-9 查询镜像存储空间
3.3.2 镜像的删除
使用部分镜像id即可删除镜像,如图3-10所示。可见已经删除了前缀为114的镜像文件nginx。
图3-10 删除镜像nginx
之后通过仓库名+标签删除镜像,如果删除的镜像已经产生了容器实例即会报错,因为镜像被占用。这时需要先删除容器实例或添加删除参数-f,即强制删除,一般用于被占用的删除,如图3-11所示。
图3-11 删除镜像hello-world
3.4 容器的基本操作
3.4.1 容器的创建与启停
1.首先创建一个基于httpd镜像的新容器。如图3-12,由于主机中没有对应镜像,将会从docker Hub中拉取最新镜像。
图3-12 创建容器httpd
2.使用docker ps -a容器信息,根据图3-13的输出可知:刚刚添加的容器为httpd,状态为Created。
图3-13 查看容器httpd信息
3.根据显示的容器ID或容器名称启动容器,如图3-14所示。可见httpd的状态改为Up 10 seconds。
图3-14 启动容器httpd
4.容器的停止,如图3-15所示,httpd的状态改为Exited。
图3-15 关闭容器httpd
5.容器的重启与暂停。如图3-16所示,可以从输出信息中读到状态的修改。
图3-16 重启、暂停容器httpd
6.暂停的恢复、容器进程的关闭、重新启动与容器重命名,如图3-17所示。前三部操作过后均会输出容器id,表明任务完成。连续两次docker ps输出的NAMES属性改变,说明重命名成功。
图3-17 暂停的恢复、容器进程的关闭、重新启动与重命名httpd
3.4.2 容器的运行
1.运行一个基于Ubuntu的新容器,如图3-18所示。返回Hello world
字符串,说明容器启动成功。
图3-18 启动新容器
2.启动终端,对目录进行查找操作,之后退出Ubuntu。如图3-19所示:
图3-19 终端操作
3.比较是否使用-d参数运行容器的区别,可以看出输出的行数有明显不同:
图3-20 容器的运行
4.通过docker logs查看容器Ubuntu运行的日志,可以看到之前产生的hello world
输出信息如图3-21所示。
图3-20 容器的运行日志
3.4.3 容器的进入和删除
1.再次启动容器,然后使用docker attach进入终端,如图3-21所示,使用ps可以看到目前运行的终端程序;之后exit退出。
图3-21 进入容器
2.启动一个容器,使用-dit参数,此后执行docker运行和退出测试能否正常运行,如图3-22所示:
图3-22 容器操作流程
3.现在开始测试容器的删除,对应实验指导书1.5.4。使用docker rm删除容器,但需要先停止这个容器,否则会报错,如下图所示。
图3-23 容器删除
4.删除所有已经终止的容器。如图3-24所示,列出了6个符合要求且已删除的容器。
图3-24 容器的进一步删除
3.5 私有镜像仓库搭建
本节主要展示的是docker-registry的安装和运行测试步骤和操作输出。
1.获取官方registry镜像,然后安装下载。使用ps查看运行状态,可见已成功安装运行。
图3-25 运行registry
2.使用docker images可见镜像列表里增加了我们刚才安装的registry镜像:
图3-26 镜像列表
3.使用docker tag标记镜像,然后使用docker images可见标记信息,如下图所示:
图3-27 标记registry镜像
4.使用docker push上传myubuntu镜像。之后使用curl查看远程仓库的镜像,可见已经成功同步,如下图所示:
(a) 上传镜像
(b) 仓库镜像
图3-28 镜像的上传
5.删除已有镜像,然后再从镜像仓库中下载,如图3-29所示。可见myubuntu删除后可以从在下面的镜像仓库找到:本地仓库(127.0.0.1:5000)。
图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所示:
图3-30 源代码的安装
2.使用vim创建和编辑Dockerfile文件,然后通过该文件构建nginx镜像,成功界面如图3-31所示:
图3-31 使用Dockerfile创建镜像
3.使用docker images可以看到构建的nginx镜像,说明操作成功,如下图3-32所示。其标签为v1,大小为710MB,id为e8cb95e6a4d5。
图3-32 新创建的nginx镜像信息
4.3 Nginx镜像验证
1.使用如下命令,首先运行容器,然后成功将端口从容器的80映射到主机的80。之后使用docker ps指令,可以看到0.0.0.0:80->80,说明端口映射完成。如图3-33所示:
图3-33 容器端口映射
2.打开Edge浏览器输入ECS主机的IP+port,可以看到网页的输出,说明容器运行成功。如下图3-34所示:
图3-34 nginx镜像的远程网页
4.4 Dockerfile指令添加
1.使用vim Dockerfile,在原有文件的基础上添加CMD命令,设置nginx 非daemon守护进程,这样容器启动时不会自动退出。完成后使用该文件构建新镜像,如图3-35所示可见构建成功,镜像列表也已添加了Nginx V2。
图3-35(a) Nginx v2镜像的构建
图3-35(b) 更新镜像列表
2.再次进行端口映射,原理与4.3相同,这次映射到主机的81端口。如图3-36所示:
图3-36 nginx v2容器端口映射
3.打开浏览器进行验证,输入IP和port 81,输出正确信息,说明容器部署成功。
图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所示。
图5-1 Docker工作流程
5.2.2 Docker与云计算
随着云计算的广泛应用以及开发和运营团队高效协作的需要,Dcoker的使用越来越突出,其中Docker作为容器技术的一个广受欢迎的例子,已经成为了软件开发中的标准,并在改变完全堆栈虚拟化的范式方面发挥了重要作用。Docker对于云计算而言十分重要,原因在于Docker 容器允许开发人员将他们的应用程序与所需的依赖项(例如配置、框架、库和运行时)打包到其中,由此提供了一个把应用程序拆分为分布式组件的方法,并且用户还可以管理、升级这些容器成为集群。
- 点赞
- 收藏
- 关注作者
评论(0)