Docker 官方安装详解
# 0x00 安装热身
- 针对CE版本
Docker 分为 CE 和 EE 版本, CE免费,EE收费,CE版以及能够满足我们所有需求
本文针对 CE 版本的安装进行说明
- 系统说明
本文以 CentOS 7为例进行安装, 不要使用 CentOS 7 的 Archived版 和 测试版,因为不支持
- 源说明
CentOS 的扩展源 (centos-extras) 必须启用,默认也是启用的,但是如果你之前关闭过它,需要重新启用一下
建议使用overlay2存储引擎
- 删除旧版本的Docker
默认 yum 安装的 docker 或 docker-engine 版本很久,我们先卸载掉
$ 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-ce 也就是免费版的 docker
# 0x01 开始安装
有三种安装方式:
1. 通过设置网络源,然后yum安装,方便日后维护和升级 (推荐)
2. 下载RPM包手动安装和升级,如果没有网络这种方法很实用
3. 使用自动化脚本安装,适合在开发和测试环境
- 使用yum安装
开始安装之前需要设置一下 Docker 源,后面直接通过源安装和升级
1. 安装 yum-utils , yum-config-manager, device-mapper-persistent-data lvm2 (被 devicemapper存储引擎依赖)
$ sudo yum install -y yum-utils \ device-mapper-persistent-data \ lvm2
2. 设置官方 docker-ce.repo 源
$ sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo
2.5 下面几个可选步骤
默认是 stable版,如果先试试 nighty 或者 test 可以用下面的命令开启或关闭
启用 nightly版
$ sudo yum-config-manager --enable docker-ce-nightly
启用 test版
$ sudo yum-config-manager --enable docker-ce-test
禁用 nightly
$ sudo yum-config-manager --disable docker-ce-nightly
3. 开始安装
3.1 废话了那么多,这一步才是关键,默认安装的是最新的,或者使用后面的步骤安装指定的版本
sudo yum install docker-ce docker-ce-cli containerd.io
这里可能会提示 060A 61C5 1B55 8A7F 742B 77AA C52F EB6B 621E 9F35 密钥是否匹配
如果和这里的一样,可以选择接受。注意最新的版本可能是不稳定的
Docker 这样就安装好了,但还没启用,默认创建了一个 docker 组,但没有用户在这个组上
3.2 指定具体版本的docker安装
A. 可以使用下面的命令,列出可以从源里安装的所有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
每个人看到的列表可能不一样,取决于你启用的库,和你CentOS 的具体版本
B. 选择具体的版本进行安装
选择方式就是用 - 进行衔接你要的版本号,看如下格式
$ sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
比如这里我安装的是 18.09.5 版
$ sudo yum install docker-ce-18.09.5 docker-ce-cli-18.09.5 containerd.io
一样执行完只是安装了docker 还没启用,创建了暂时无用户的 docker 组
4. 启动docker
$ sudo systemctl start docker
5.验证客户端能正常使用,测试hello-world镜像
$ sudo docker run hello-world
这步会从 docker-hub (类似github) 上面拉去 hello-world镜像,然后通过这个镜像创建容器并运行
打印一个hello world就退出,也代表docker-cli可以用
- 使用RPM安装 (不推荐)
如果你的linux电脑没有网络(什么年代了?没网?),可以用下载RPM包放到CentOS上手动安装
1. 下载RPM包
并且想升级的话也需要重新到网上下载最新的安装包
下载网址 https://download.docker.com/linux/centos/7/x86_64/stable/Packages/
如果不知道怎么选,可以参考下载下面三个包
docker-ce-cli-18.09.5-3.el7.x86_64.rpm
docker-ce-18.09.5-3.el7.x86_64.rpm
containerd.io-1.2.5-3.1.el7.x86_64.rpm
如果喜欢折腾想试试 nighty 的只要把 URL 里的 stable 改成 nighty 就行
2. 安装RPM包
$ sudo yum install /path/to/package.rpm
执行完只是安装了docker 还没启用,创建了暂时没用户的 docker 组
3. 启动docker
$ sudo systemctl start docker
4. 验证客户端能正常使用,测试hello-world镜像
$ sudo docker run hello-world
这步会从 docker-hub (类似github) 上面拉去 hello-world镜像,然后通过这个镜像创建容器并运行
打印一个hello world就退出,也代表docker-cli可以用
5.升级
记住想升级就要回到第1步网上重新下载最新安装包,跟着步骤走,然后
$ sudo yum update /path/to/package.rpm
- 使用一键部署脚本安装
官方提供了一键部署脚本 get.docker.com 和 test.docker.com
建议使用 get 开头的,这种方式避免交互很适合新手,这是docker-install 的源码 docker-install
repository.
在生产环境中,使用这些脚本是不推荐的,你需要了解其中的风险( 说白了出事别找我 ),风险如下:
- The scripts require
root
orsudo
privileges to run. Therefore, you should carefully examine and audit the scripts before running them. - The scripts attempt to detect your Linux distribution and version and configure your package management system for you. In addition, the scripts do not allow you to customize any installation parameters. This may lead to an unsupported configuration, either from Docker’s point of view or from your own organization’s guidelines and standards.
- The scripts install all dependencies and recommendations of the package manager without asking for confirmation. This may install a large number of packages, depending on the current configuration of your host machine.
- The script does not provide options to specify which version of Docker to install, and installs the latest version that is released in the “edge” channel.
- Do not use the convenience script if Docker has already been installed on the host machine using another mechanism.
1. 脚本需要用 root身份运行,你认真最好审计一下代码,不然删库跑路都不知道了
2. 脚本会尝试探测你系统的版本,并改变相关的配置,此外没法加上自定义的安装参数,可能会导致配置支持性很差,甚至语言变成日语,让你看不懂。。。。
3. 脚本会无脑的把所有推荐和依赖全安装了,不经过你的确认,导致有大量的包,取决于你的系统配置
4. 脚本不给你选择具体哪个版本,直接给你转最新的
5. 如果你已经安过docker了,你用脚本的话又安装一次的话,恭喜你,凉了,赶紧收拾一下那个啥吧
FBI Warning:
脚本运行之前检查一下代码,因为服务器上的脚本很有可能是给黑客替换的
看到这里仍然坚持要来一下的话,那就来吧
$ curl -fsSL https://get.docker.com -o get-docker.sh $ sudo sh get-docker.sh <output truncated>
如果想要用非root用户,需要执行下面的命令
sudo usermod -aG docker your-user
记得先退出,重新登陆才会生效
- 卸载 Docker
到这里你的 docker 应该通过前面三种方式中的一种安装好了,你需要手动启动一下,使用 systemctl 或者 service 命令
有言在先,默认情况下非root是运行不了docker命令的,下面是卸载的方法
1. 停止docker
$ sudo systemctl stop docker
2. 卸载包
$ sudo yum remove docker-ce
3. 删除资源(容器 镜像 网络 卷映射)
$ sudo rm -rf /var/lib/docker