这篇文章对 Docker 进行了简单地说明,以此让读者能快速入门 Docker 的使用,解决平时对 Docker 的使用需求。希望继续深入学习可以查看 Docker 官方文档:https://docs.docker.com/

1. Docker 的基本概念

Docker 是一个让开发人员和运维人员利用容器来构建、运行和共享应用程序的平台。可以将 Docker 看作一台速度飞快地虚拟机,使用容器运行应用程序并将与其他运行的容器隔离起来。

将应用程序部署在容器中被称为容器化。容器的概念越来越流行,而 Docker 容器的优点是:

  1. 灵活性:即使最复杂的应用程序也可以被封装在容器。
  2. 轻量化:容器利用和共享主机内核,使得在系统资源方面比虚拟机更加有效。
  3. 可移植性:你可以在本地构建,部署到云端并在任何地方运行。
  4. 低耦合:容器具有高度的自给自足性和封装性,可以在不破坏其他容器的情况下进行替换或更新。
  5. 可扩展性:你可以在数据中心增加和自动分发容器副本。
  6. 安全性:容器会对进程应用进行约束和隔离,不需要用户进行任何配置。

容器和镜像

从本质上讲,容器只是一个运行的进程,并且应用了一些封装的特性使与主机中其他的容器进行隔离。容器的隔离性最重要的地方之一是每个容器都与自己专属的文件系统进行交互,而该文件系统是由 Docker 镜像提供的。镜像包含了运行应用程序所需的所有内容。

容器和虚拟机

容器在 Lunix 本地运行,并且与其他容器共享主机的内核。每个容器都运行着一个独立的进程,不会占用其他可执行文件的内存,所以它非常的轻巧和快速。

与虚拟机相比,在虚拟机中会运行一个完整的操作系统,通过管理程序来虚拟访问主机资源。所以虚拟机会消耗更多的开销。

2. 安装 Docker 环境

Docker 可以运行在多种 Linux 平台、MacOS 和 Windows 中。下面将以阿里云的 CentOS7 为例,进行 Docker 环境的安装。

更多信息参考 Docker 官方文档:https://docs.docker.com/engine/install/

前提条件

操作系统要求:Docker 必须安装在 CentOS7 版本以上,不支持或测试已归档的版本。必须启动 centos-extras 存储库。在默认情况在存储库是启用的,但如果你禁用了它,则必须重新启用它。建议使用 overlay2 存储驱动程序。

卸载旧版本:如果你安装 Docker 的旧版本,请卸载它以及相关的依赖项。

卸载 Docker
$ sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine

/var/lib/Docker/ 的内容会被保留下来(包含了镜像、容器等数据)。

Docker 安装方法

Docker 有多种安装方式,根据需要选择所需的安装方式:

  1. 大多数用户会设置 Docker 的存储库并从它们进行安装,以方便安装和升级。(推荐)
  2. 有些用户会下载 RPM 包并手动安装,并且完全手动管理升级。这种方法在没有网络的被隔离的系统上会非常有用。
  3. 在测试和开发环境中,有些用户会使用一些自动化脚本来安装。

第一步:设置存储库

在新主机上首次安装 Docker 需要设置 Docker 存储库。然后,你可以从存储库中安装和更新 Docker。

安装 yum-utils 包并设置稳定存储库。

设置 Docker 存储库
$ sudo yum install -y yum-utils

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

官方提供的 Docker 存储库为:https://download.docker.com/linux/centos/docker-ce.repo

由于官方提供的存储库的服务器在外国,可能会影响访问速度。所以推荐使用国内的存储库地址:

阿里云:http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

清华大学源:https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo

第二步:安装 Docker 引擎

安装最新的 Docker 引擎

安装最新的 Docker 引擎:

安装 Docker 引擎和容器
$ sudo yum install docker-ce docker-ce-cli containerd.io

如果提示接受 GPG 密钥,请检检查 key 是否与 060A 61C5 1B55 8A7F 742B 77AA C52F EB6B 621E 9F35 一致,如果一致则可以接受。

安装指定版本的 Docker 引擎

首先查询出可用的 Docker 版本,并从高到低进行排列:

查看 Docker 可用版本
$ yum list docker-ce --showduplicates | sort -r

docker-ce.x86_64 3:18.09.1-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.0-3.el7 docker-ce-stable
docker-ce.x86_64 18.06.1.ce-3.el7 docker-ce-stable
docker-ce.x86_64 18.06.0.ce-3.el7 docker-ce-stable

然后通过完全限定包名来指定安装的版本。完全限定包名由 Docker-ce 加上版本字符串(第二列),从冒号 : 开始到横杠 - 结束。例如:Docker-ce-18.09.1

安装指定版本 Docker
$ sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io

如果你不想使用 Docker 存储库来安装 Docker,可以下载 .rpm 文件进行手动安装。每次需要更新 Docker 时需要下载新的文件。

第一步:下载 RPM 包

https://download.docker.com/linux/centos/ 选择你的 CentOS 版本,然后到 x86_64/stable/Packages/ 目录下载你希望安装 Docker 版本的 .rpm 文件。

第二步:安装 Docker 引擎

安装 Docker,将下面路径改为你下载 .rpm 文件的路径:

安装 Docker
$ sudo yum install /path/to/package.rpm

第三步:启动 Docker 服务

启动 Docker 服务
$ sudo systemctl start docker

第四步:测试 Docker

通过运行 hello-world 镜像来验证 Docker 是否安装成功:

运行测试镜像
$ sudo docker run hello-world

这条命令会下载一个测试镜像并在容器中运行它。当容器运行时,会打印一条语句并退出。

3. 使用 Docker 容器

为了更加清楚地使用 Docker,首先需要了解以下概念以及它们之间的联系:

Docker 基本概念 说明
镜像(Image) 镜像相当于一个很小的文件系统,它包含了应用程序所需的所有内容。
容器(Container) 镜像和容器的关系相当于类和实例一样。通过镜像是定义,而容器是镜像运行时的实体。
仓库(Repository) 仓库也就是我们前面所说的存储库,可以看作是一个代码控制中心,用来保存镜像。

用一句话来概括它们之间的关系就是 “在仓库中寻找需要的镜像,用来运行成为容器”。当我们知道它之间的联系之后,使用 Docker 就非常简单了。

使用 Docker 安装 MySQL

通过安装 MySQL 为例子来说明 Docker 的使用方式。

第一步:搜索 MySQL 镜像

首先在仓库中搜索出所有于 “mysql” 相关的镜像:

搜索 MySQL 镜像
$ docker search mysql

第二步:拉取 MySQL 镜像

当我们选择好所需要的镜像时,就可以将它下载到本地:

拉取 MySQL 镜像
$ docker pull mysql:latest

将需要的镜像下载到本地后,我们可以查看一下本地所拥有的镜像:

查看镜像
$ docker images

第三步:运行 MySQL 镜像

使用 mysql 镜像启动容器:

运行容器
$ docker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
  • -p 3306:3306 :将容器服务的 3306 端口映射到宿主机的 3306 端口中,外部主机可以通过宿主机端口访问 MySQL 服务。
  • -e MYSQL_ROOT_PASSWORD :设置 MySQL 服务 root 用户的密码。

运行容器后,我们可以查看 Docker 中容器的运行情况:

查看容器
$ docker ps

使用 Docker 安装 Redis

在安装 MySQL 的例子中,我们先搜索了与 MySQL 相关的镜像并选择了需要的镜像进行下载,然后使用本地的镜像启动 MySQL 的容器。这是一个比较完整的安装过程。

但是在测试 Docker 时,我们启动了 hello-world 镜像,而我们并没有下载该镜像。这是因为 Docker 会自动寻找和下载所需要的镜像来启动容器。以安装 Redis 为例子再次对 Docker 使用进行说明。

第一步:运行 Redis 镜像

Docker 会根据命令中所提供的镜像名(redis)寻找对应的镜像来运行容器:

运行容器
$ docker run -itd --name redis-test -p 6379:6379 redis

使用 Docker 说明

当容器启动起来相当于应用程序(MySQL、Redis)启动起来,我们可以在本地访问该应用程序,也可以利用映射端口在外部进行访问了。

4. 总结

  1. Docker 的作用以及优点。
  2. 容器、镜像、虚拟机以及仓库的关系。
  3. 使用 Docker 仓库安装 Docker。
  4. 使用 RPM 包安装 Docker。
  5. 使用 Docker 安装 MySQL 和 Redis。

评论