Docker 简介和安装
#1. 关于 Docker
#基本概念
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app)。几乎没有性能开销,可以很容易地在机器和数据中心中运行。最重要的是,他们不依赖于任何语言、框架或包括系统。
#实现方式
Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案。 Docker 的基础是 Linux 容器(LXC)、Cgroup 等技术。
在 LXC 的基础上,Docker 进行了进一步的封装,让用户不需要去关心容器的管理,使得操作更为简便。用户操作 Docker 的容器就像操作一个快速轻量级的虚拟机一样简单。
#Docker 和传统虚拟化方式的不同
容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统方式则是在硬件的基础上,虚拟出自己的系统,再在系统上部署相关的 APP 应用。
-
传统虚拟化方案:
-
Docker虚拟化方案:
Docker 虚拟化有三个概念需要理解:镜像、容器、仓库。
-
镜像:docker 的镜像其实就是模板,跟我们常见的 ISO 镜像类似,是一个样板。
-
容器:使用镜像所创建的应用或者系统,我们称之为一个容器。
-
仓库:仓库是存放镜像的地方,分为公开仓库(Public)和私有仓库(Private)两种形式。
#Docker 虚拟化特点
-
操作启动快
-
轻量级虚拟化
你会拥有足够的『操作系统』,仅需添加或减小镜像即可。在一台服务器上可以布署几百个 Containers 容器。但是传统虚拟化,你虚拟 20 个虚拟机就不错了。
-
开源免费
开源的,免费的,低成本的。由现代 Linux 内核支持并驱动。轻量的 Container 必定可以在一个物理机上开启更多“容器”,注定比 VMs 要便宜。
#2. 安装 Docker 的前期准备工作
-
Step 0: 开发环境中,我们通常会关闭防火墙
copied!systemctl status firewalld # 查看防火墙状态 systemctl stop firewalld # 关闭,仅对当前生效 systemctl disable firewalld # 开机禁用
-
Step 1: 查看内核版本
Docker 官方要求 Linux 内核版本至少 3.8 以上,建议 3.10 以上。通过以下命令可查看内核版本:
copied!uname -r
CentOS 7 的内核版本是满足其要求的。
-
Step 2: 卸载旧版本
较旧的 Docker 版本称为 docker 或 docker-engine 。如果已安装这些程序,请卸载它们以及相关的依赖项。
copied!yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine
-
Step 3: 为配置 docker 软件源作准备
copied!yum install -y \ yum-utils \ device-mapper-persistent-data \ lvm2
-
Step 4: 添加 docker 软件源
copied!yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo
考虑到从 docker 官方的仓库下载 docker-ce 有时会比较慢,可以使用下述命令将下载网址改为华为的镜像服务器:
copied!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 版本
copied!yum list docker-ce --showduplicates | sort -r
#3. 安装 docker 并验证
-
从网络仓库中下载,安装最新版本
copied!yum install -y docker-ce
或指定具体的某个版本。例如:
copied!yum install -y docker-ce-18.06.3.ce-3.el7
安装过程中会出现类似如下询问:
copied!从 https://download.docker.com/linux/centos/gpg 检索密钥 导入 GPG key 0x621E9F35: 用户ID : "Docker Release (CE rpm) <docker@docker.com>" 指纹 : 060a 61c5 1b55 8a7f 742b 77aa c52f eb6b 621e 9f35 来自 : https://download.docker.com/linux/centos/gpg 是否继续?[y/N]:
输入
y
按回车继续安装。最终会出现:
copied!完毕!
-
启动 Docker,并将其加入开机启动
copied!# systemctl start docker systemctl enable docker --Now systemctl status docker
会出现类似如下结果:
copied!Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
-
验证安装是否成功
(有 client 和 service 两部分表示 docker 安装启动都成功了)
输入
docker version
命令,会出现类似如下内容:
copied!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
命令,会出现类似如下结果:
copied!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
copied!
如果该文件存在,则将其内容清除;如果文件不存在,(打开该文件后,其内容是空白的),编辑结束后保存退出,即创建。
输入如下内容:
{
"registry-mirrors": [
"https://registry.docker-cn.com",
"https://docker.mirrors.ustc.edu.cn"
]
}
copied!
该配置文件配置了两个镜像,一个是 docker 官方在中国境内的官方镜像,一个是中科大维护的一个镜像。
重新启动 docker 服务:
systemctl restart docker
copied!
查看修改结果:
docker info
copied!
会有如下内容:
...
Registry Mirrors:
https://registry.docker-cn.com/
https://docker.mirrors.ustc.edu.cn/
...
copied!
#5. 导入已有的镜像文件
考虑到有些场景下的联网的不方便,docker 提供了将已下载的 images 打包导出,再在别处导入的功能。
导出已有 image 使用命令:
docker save <repository>:<tag> -o <repository>.tar
copied!
例如:
docker save MysqL:8.0.16 -o mysql-8.0.16.tar
copied!
导入 image 使用命令:
docker load -i <repository>.tar
copied!
例如:
docker load -i mysql-8.0.16.tar