本文为 Linux 系统安装 Docker 容器环境的简要说明,主要包括:
- 安装稳定最新发行版(Stable Release)的命令及含义。
- 针对国内网络环境的必要镜像加速或者代理设置工作。
若需了解 Docker 安装其他方面的内容,如安装 Nightly/Test 版本、Backporting、软件版权和支持等信息,可参考官方的部署指南:https://docs.docker.com/install/
文中涉及到的 Debian 系和 RedHat 系的包管理工具,主要包括:
- Debian 系:Debian、Ubuntu、Deepin、Mint
- RedHat 系:RHEL、Fedora、CentOS
如用的其他 Linux 发行版,如 Gentoo、Archlinux、OpenSUSE 等,建议自行安装二进制包。
移除旧版本 Docker
如果以前已经安装过旧版本的 Docker(可能会被称为 docker,docker.io 或 docker-engine),需先行卸载。
Debian 系:
$ sudo apt-get remove docker docker-engine docker.io containerd runc docker-ce docker-ce-cli containerd.io
RedHat 系:
$ sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine
安装 Docker 依赖工具链及软件源
在 Debian 上主要是为了 apt 能够正确使用 HTTPS 协议,并将 Docker 官方的 GPG Key(GNU Privacy Guard,包的签名机制)和软件源地址注册到软件源中。
在 RHEL 上是为了 devicemapper 获得 yum-config-manager、device-mapper-persistent-data、lvm2 的支持。
Debian 系:
$ sudo apt-get install apt-transport-https \ ca-certificates \ curl \ software-properties-common # 注册Docker官方GPG公钥 $ sudo curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add - # 检查Docker官方GPG公钥指纹是否正确 $ sudo apt-key fingerprint 0EBFCD88 pub 4096R/0EBFCD88 2017-02-22 Key fingerprint = 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88 uid Docker Release (CE deb) <docker@docker.com> sub 4096R/F273FCD8 2017-02-22 # 将Docker地址注册到软件源中 # 注意$(lsb_release -cs)是返回当前发行版的版本代号,例如Ubuntu 18.04是bionic,19.10是eoan # 但在Ubuntu 19.10发布一段时间后,Docker官方并未在源地址中增加eoan目录,导致此命令安装失败,日后在最新的系统上安装Docker,需要注意排查此问题,手动更改版本代号完成安装 $ sudo add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable"
RedHat 系:
$ sudo yum install -y yum-utils \ device-mapper-persistent-data \ lvm2 # 将Docker地址注册到软件源中 $ sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo
更新系统软件仓库
Debian 系:
$ sudo apt-get update
RedHat 系:
$ sudo yum update
安装 Docker-Engine Community
Debian 系:
$ sudo apt-get install docker-ce docker-ce-cli containerd.io
RedHat 系:
$ sudo yum install docker-ce docker-ce-cli containerd.io
确认 Docker 安装是否成功
直接运行官方的 hello-world 镜像测试安装是否成功
$ sudo docker run hello-world
配置国内镜像库 可选
由于 Docker 官方镜像在国内访问缓慢,官方提供了在国内的镜像库:https://registry.docker-cn.com,以加快访问速度(但其实体验也并不快)。
# 该配置文件及目录,在Docker安装后并不会自动创建
$ sudo mkdir -p /etc/docker
# 配置加速地址
$ sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
EOF
# 重启服务
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
注意
以上操作有两点提醒读者重点关注:
- 必须保证 daemon.json 文件中完全符合 JSON 格式,如果错了,Docker 不会给提示,直接起不来。
- 如果 Docker 是作为 systemd 管理的服务的,daemon.json 文件会处于锁定状态,应先关闭后再修改配置;
这两点出了问题都会导致 Docker 服务直接无法启动,如果出现该情况,可以通过 systemd status 命令检查,看是否有类似如下的错误提示:
Drop-In: /etc/systemd/system/docker.service.d
└─mirror.conf
Active: inactive (dead) (Result: exit-code) since 五 2017-09-15 13:25:28 CST; 7min ago
Docs: https://docs.docker.com
Main PID: 21151 (code=exited, status=1/FAILURE)
如果是,修改 daemon.json 后重新启动即可。另,关闭 systemd 服务的方法是:
$ sudo systemctl stop docker
$ sudo rm -rf /etc/systemd/system/docker.service.d
最后,Docker 的官方国内镜像库的速度只能说比起访问国外好了一丢丢,聊胜于无。国内还有一些公开的镜像库,如微软的、网易的等,但要么是不稳定,要么也是慢。比较靠谱的是阿里云的镜像库,但这个服务并不是公开的,需要使用者先到阿里云去申请开发者账户,再使用加速服务,申请后会得一个类似于“https://yourname.mirror.aliyuncs.com”的私有地址,把它设置到daemon.json中即可使用。
为 Docker 设置代理
另外一种解决 Docker 镜像下载速度慢的方案就是使用代理,Docker 的代理可以直接读取系统的全局代理,即系统中的 HTTP_PROXY、HTTPS_PROXY 两个环境变量。不过,如果设置这两个变量,其他大量 Linux 下的其他工具也会受到影响,所以建议的方式是给 Docker 服务设置专有的环境变量,我们使用 Systemd 来管理 Docker 服务,那直接给这个服务设置一个额外配置即可,操作如下:
sudo mkdir -p /etc/systemd/system/docker.service.d
# 配置代理地址,支持http、https、socks、socks5等协议
$ sudo tee /etc/systemd/system/docker.service.d/http-proxy.conf <<-'EOF'
[Service]
Environment="HTTP_PROXY=socks5://192.168.31.125:2012"
EOF
#重启docker
$ sudo systemctl restart docker
设置后可以通过 systemctl 检查一下环境变量,看看是否有设置成功:
$ systemctl show --property=Environment docker
输出:
Environment=HTTP_PROXY=socks5://192.168.31.125:2012
开放 Docker 远程服务
如果需要在其他机器上管理 Docker——譬如典型的如在 IntelliJ IDEA 这类 IDE 环境中给远程 Docker 部署镜像,那可以开启 Docker 的远程管理端口,这步没有设置任何安全访问措施,请不要在生产环境中进行。
具体做法是修改 Docker 的服务配置:
Debian 系:
$ sudo vim /lib/systemd/system/docker.service
RedHat 系:
$ sudo vim /usr/lib/systemd/system/docker.service
在 ExexStart 后面增加以下参数(2375 端口可以自定义):
-H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
譬如,默认安装完 Docker,修改之后完整的 ExexStart 应当如下所示:
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
最后重启 Docker 服务即可:
#重启docker
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
启用 Docker 命令行自动补全功能
在控制台输入 docker 命令时可以获得自动补全能力,提高效率。
Docker 自带了 bash 的命令行补全,用其他 shell,如 zsh,则需采用 zsh 的插件或者自行获取补全信息
bash:
$ echo 'source /usr/share/bash-completion/completions/docker' >> ~/.bashrc
zsh:
$ mkdir -p ~/.zsh/completion $ curl -L https://raw.githubusercontent.com/docker/cli/master/contrib/completion/zsh/_docker > ~/.zsh/completion/_docker $ echo 'fpath=(~/.zsh/completion $fpath)' >> ~/.zshrc $ echo 'autoload -Uz compinit && compinit -u' >> ~/.zshrc
将 Docker 设置为开机启动
一般使用 systemd 来管理启动状态
# 设置为开机启动
$ sudo systemctl enable docker
# 立刻启动Docker服务
$ sudo systemctl start docker
安装 Docker-Compose
在开发和部署微服务应用时,经常要使用 Docker-Compose 来组织多个镜像,对于 Windows 系统它是默认安装的,在 Linux 下需要另外下载一下,下载后直接扔到 bin 目录,加上执行权限即可使用
# 从GitHub下载
sudo curl -L "https://github.com/docker/compose/releases/download/1.25.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 从国内镜像下载
sudo curl -L "https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
卸载 Docker
Debian 系:
$ sudo apt-get purge docker-ce # 清理Docker容器缓存和自定义配置 $ sudo rm -rf /var/lib/docker
RedHat 系:
$ sudo yum remove docker-ce # 清理Docker容器缓存和自定义配置 $ sudo rm -rf /var/lib/docker