【服务计算】十一 Docker技术
概述
Docker是一种使用Linux内核功能的容器工具,如cgroups和命名空间,它能提供网络、文件和内存资源的隔离,而无需依靠一个完整的虚拟机。最近,Docker一直保持巨大的发展势头,并且应用在越来越多的行业中。
Docker能够帮助我们创建一个固定的软件版本,它可以在任何地方运行,无论目的环境中有没有安装该软件(但是必须安装Docker)。例如,如果向Docker Hub(http://hub.docker.com)部署一个包含服务的Docker镜像,那么在机器上安装了Docker的任何人都可以运行该服务,不必担心依赖项的安装,不必考虑编译器或任何其他需要支持的基础设施,开发机器也不会因为安装了这个服务的配置和依赖项而受影响。所有内容都包含在Docker镜像中。
Docker可以说是服务的最佳载体。使用Docker实现容器化具有如下的优点:
- 灵活:即使是最复杂的应用也可以容器化。
- 轻量:容器是进程,能利用并共享主机操作系统内核。
- 替换:可以即时部署更新和升级容器。
- 便携:可以在本地构建,部署到云并在任何地方运行。
- 扩展:您可以增加并自动分发容器副本。
- 组合:您可以自由地组合(stack)服务。
实验内容
主要包括安装docker,运行第一个容器,配置国内镜像地址,MySQL与容器化,Docker网络,Docker仓库,Docker图形化管理工具等几个部分。
操作系统
按照实验要求,结合自己的电脑设备与系统等条件,使用VirtualBox下Ubuntu 20.04系统完成实验。虚拟机相关设置与上一次实验相同。
环境准备
虚拟机下的实验环境与上一次实验的相同,不需要额外的配置。
实验过程
安装docker
更新与安装相关包
执行如下更新命令:

之后安装如下包,允许 apt 命令 HTTPS 访问 Docker 源:

之后添加 Docker 官方的 GPG:

之后核对fingerprint是否一致:

之后将 Docker 的源添加到 /etc/apt/sources.list:

安装docker
之后安装Docker:



检查是否成功安装
然后查看docker版本,检查是否成功安装:

发现上面提示说权限不足,这是因为docker进程使用Unix Socket访问而不是 TCP 端口访问。而默认情况下,Unix socket 属于 root 用户,因此需要 root权限才能访问。
因此执行下面的命令:

再次查看docker版本,检查是否成功安装:

以上结果说明成功安装了docker。
运行第一个容器

可以看到如上的第一个容器hello-world运行成功。
配置国内镜像地址
拉取容器时如果发现速度很慢:

那么可以添加国内镜像地址。首先编辑daemon.json文件(没有该文件则新建):
sudo gedit /etc/docker/daemon.json
然后插入以下镜像地址:
{
"registry-mirrors": [
"https://9cpn8tt6.mirror.aliyuncs.com",
"https://8bhew391.mirror.aliyuncs.com",
"https://almtd3fa.mirror.aliyuncs.com",
"https://hccwwfjl.mirror.aliyuncs.com",
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com"
]
}
之后重启Docker服务:

之后重新pull时可以发现速度明显变快了。

MySQL 与容器化
拉取mysql
首先拉取mysql容器:

创建mysql docker
之后创建并打开Dockerfile,


写入以下内容:
FROM ubuntu
ENTRYPOINT [“top”, “-b”]
CMD ["-c"]
再创建镜像:

运行镜像
之后运行镜像:

使用mysql容器
之后使用mysql容器:

可以查看到对应的mysql docker正在运行:

连接mysql容器服务器
然后启动mysql客户端:

可以看到成功连接上了服务器。
可以用如下命令查看到数据库文件的存放位置:




可以看到,每一次启动 mysql 容器,docker 创建一个文件卷挂载在容器内/var/lib/mysql位置,这个卷在主机(host)的 /var/lib/docker/volumes/ 目录下。
Docker网络
用如下命令获得当前容器网络:

备制支持 ifconfig 和 ping 命令的 ubuntu 容器:


启动另一个命令窗口,由容器制作镜像:

创建自定义网络:

在两个窗口创建 u1,u2 容器网络,并使用以下命令


之后输入以下命令与u1网络交互:


创建不同类型的网络
创建none网络:

创建host网络:



创建网段为172.22.16.0/24,网关为172.22.16.1的bridge网络:


可以看到分配的地址是172.22.16.255。




主机ip为10.0.2.15,发现可以ping通主机:

Docker仓库
创建本地仓库并复制镜像到仓库:



之后可以发现,如果将本地的ubuntu:16.04删除后,还可以从仓库pull下来:


检查docker的状态:

查看容器内进程:

Engine API与开发:


根据上面返回的Id发出下列请求:



docker图形化管理工具

之后在浏览器打开对应地址127.0.0.1:9000,就会发现成功运行了docker。

第一次运行的时候需要设置账号,然后可以进入管理Docker 主机的界面:

本文围绕Docker展开实验,介绍其是利用Linux内核功能的容器工具,能提供资源隔离。实验在VirtualBox下Ubuntu 20.04系统进行,包含安装Docker、运行容器、配置国内镜像、MySQL容器化、创建不同类型网络、搭建仓库、使用图形化管理工具等内容。
221

被折叠的 条评论
为什么被折叠?



