# Docker 简介和安装
# 1. 关于 Docker
Docker 是依赖于 Linux 内核的 LXC、Cgroup 等技术所实现的轻量级的虚拟化方案。和 VMware、Virtual Box 等传统虚拟化方案相比,Docker 的虚拟化方式的代价更小(性能损耗更低),原因在于,Docker 是直接在宿主机( Linux )上实现虚拟化,直接复用宿主机的操作系统。
表面上看起来,在 Docker 中也存在宿主机和虚拟机的概念,但是在底层实现上这里只有一个操作系统,而不是传统虚拟化方案中的 2 个。
传统虚拟化方案:
Docker虚拟化方案:
Docker 虚拟化有三个概念需要理解:镜像、容器、仓库。
镜像:docker 的镜像其实就是模板,跟我们常见的 ISO 镜像类似,是一个样板。
容器:使用镜像所创建的应用或者系统,我们称之为一个容器。
仓库:仓库是存放镜像的地方,分为公开仓库(Public)和私有仓库(Private)两种形式。
# 2. 安装 Docker 的前期准备工作
Step 0: 开发环境中,我们通常会关闭防火墙
systemctl status firewalld # 查看防火墙状态 systemctl disable firewalld --now # 禁用,且立即生效
Step 1: 查看内核版本
Docker 官方要求 Linux 内核版本至少 3.8 以上,建议 3.10 以上。通过以下命令可查看内核版本:
uname -r
CentOS 7 的内核版本是满足其要求的。
Step 2: 卸载旧版本
较旧的 Docker 版本称为 docker 或 docker-engine 。如果已安装这些程序,请卸载它们以及相关的依赖项。
yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine
Step 3: 为配置 docker 软件源作准备
yum install -y \ yum-utils \ device-mapper-persistent-data \ lvm2
Step 4: 添加 docker 软件源
yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo
考虑到从 docker 官方的仓库下载 docker-ce 有时会比较慢,可以使用下述命令将下载网址改为华为的镜像服务器:
sudo sed -i \ 's+download.docker.com+repo.huaweicloud.com/docker-ce+' \ /etc/yum.repos.d/docker-ce.repo
截至目前为止,我们干了什么?
CentOS 的默认的 yum 软件源中实际上有 docker 的安装包,如果直接进行 yum install docker
也是可行的。
但是 docker 官方考虑到不同的用户对 docker 的不同版本有不同的需求(有人追求最新,有人追求稳定),他们专门提供了一个仓库/网址用以提供多个版本的 docker 的下载。
因此,我们必须告知 yum 有这样一个仓库的存在,并且未来要求 yum 从这个仓库中下载我们指定版本的 docker 。而非默认的仓库。
Step 5: 验证
查看所有仓库中所有 docker 版本
yum list docker-ce --showduplicates | sort -r
# 3. 安装 docker 并验证
从网络仓库中下载,安装最新版本
yum install -y docker-ce
或指定具体的某个版本。例如:
yum install -y docker-ce-18.06.3.ce-3.el7
启动 Docker,并将其加入开机启动
# systemctl start docker systemctl enable docker --now systemctl status docker
会出现类似如下结果:
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
验证安装是否成功
(有 client 和 server 两部分表示 docker 安装启动都成功了)
输入
docker version
命令,会出现类似如下内容:Client: Version: 17.12.1-ce API version: 1.35 Go version: go1.9.4 Git commit: 7390fc6 Built: Tue Feb 27 22:15:20 2018 OS/Arch: linux/amd64 Server: Engine: Version: 17.12.1-ce API version: 1.35 (minimum version 1.12) Go version: go1.9.4 Git commit: 7390fc6 Built: Tue Feb 27 22:17:54 2018 OS/Arch: linux/amd64 Experimental: false
验证连接 docker hub 中央镜像仓库
输入
docker search -f is-official=true mysql
命令,会出现类似如下结果:NAME DESCRIPTION STARS OFFICIAL ... mysql MySQL is a widely used, open-source relation… 8819 [OK] ... mariadb MariaDB is a community-developed fork of MyS… 3102 [OK] ... percona Percona Server is a fork of the MySQL relati… 459 [OK] ...
# 4. 配置国内镜像
由于 docker hub 的中央镜像仓库在国外,因此有时我们连接 docker hub 从中下载镜像速度会很感人,因此,我们需要配置国内的镜像网址,从国内现在镜像文件。
TIP
国内的镜像本质上就是 docker hub 中央仓库在国内的一份缓存/备份。
通过 vi 命令编辑相关配置文件:
vi /etc/docker/daemon.json
如果该文件存在,则将其内容清除;如果文件不存在,(打开该文件后,其内容是空白的),编辑结束后保存退出,即创建。
输入如下内容:
{
"registry-mirrors": [
"https://registry.docker-cn.com",
"https://docker.mirrors.ustc.edu.cn"
]
}
该配置文件配置了两个镜像,一个是 docker 官方在中国境内的官方镜像,一个是中科大维护的一个镜像。
重新启动 docker 服务:
systemctl restart docker
查看修改结果:
docker info
会有如下内容:
...
Registry Mirrors:
https://registry.docker-cn.com/
https://docker.mirrors.ustc.edu.cn/
...
# 5. 导入已有的镜像文件
考虑到有些场景下的联网的不方便,docker 提供了将已下载的 images 打包导出,再在别处导入的功能。
导出已有 image 使用命令:
docker save <repository>:<tag> -o <repository>.tar
例如:
docker save mysql:8.0.16 -o mysql-8.0.16.tar
导入 image 使用命令:
docker load -i <repository>.tar
例如:
docker load -i mysql-8.0.16.tar
镜像 →