前前后后安装了多次 Docker,每次都会折腾很久,也会遇到很多问题,在这里简单记录下安装过程以及遇到的问题(在虚拟机中基于 CentOS 7,均在 root 账户下操作)。

要求

Docker 要求 CentOS 系统的内核版本高于 3.10,可使用如下指令查看系统内核版本

1
uname -r

安装所需工具

1
yum install -y yum-utils device-mapper-persistent-data lvm2

添加 yum 国内镜像仓库

1
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

更新缓存

1
yum makecache fast

安装 Docker

1
yum -y install docker-ce

启用服务

1
systemctl start docker

开机自动启动(可选)

1
systemctl enable docker

添加 Docker 国内镜像

由于国内网络原因,需要添加国内的镜像仓库,首先使用如下指令编辑该文件

1
vi /etc/docker/daemon.json

添加如下内容:

1
2
3
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}

刷新变化

1
systemctl daemon-reload

重启Docker

1
systemctl restart docker

配置代理(可选)

如果你的网络需要配置代理,请执行如下指令

配置 http 代理

1
vi /etc/systemd/system/docker.service.d/http-proxy.conf

添加下面的内容

1
2
[Service] 
Environment="HTTP_PROXY=http://172.17.17.17:7777" "NO_PROXY=localhost,127.0.0.1,192.168.23.4"

NO_PROXY 用来配置不需要使用代理的地址

配置 https 代理

1
vi /etc/systemd/system/docker.service.d/https-proxy.conf

添加下面的内容

1
2
[Service]
Environment="HTTPS_PROXY=https://172.17.17.17:7777/" "NO_PROXY=localhost,127.0.0.1,192.168.23.4"

PS:其中的 172.17.17.17:7777 根据实际情况进行修改,如果代理不支持 HTTPS 的话,需要把 https://172.17.17.17:7777/ 中的 https 改成 http,否则回报 tls 的错误

配置 bip

1
vi /etc/docker/daemon.json

添加以下内容:

1
"bip": "192.168.2.23/24"

PS:修改的网段不要和虚拟机 IP,代理在同一网段,否则可能导致 SSH 无法连接虚拟机或者 Docker 无法上网等问题

其他问题

VBox 无界面启动 CentOS

将以下指令保存为 bat 格式文件,双击即可

1
2
3
@D:
@cd D:\Program Files\Oracle\VirtualBox
VBoxManage.exe startvm "Centos7" --type headless

如果要关闭虚拟机,则采用如下的脚本即可

1
2
3
@D:
@cd D:\Program Files\Oracle\VirtualBox
VBoxManage.exe controlvm "Centos7" poweroff

PS:其中 D:\Program Files\Oracle\VirtualBox 为 VBox 的安装目录,Centos7 为你需要启动的虚拟机名称

关闭 CentOS 7 的防火墙

1
2
3
4
5
# 停止 firewall
systemctl stop firewalld.service

# 禁止 firewall 开机启动
systemctl disable firewalld.service

PS:由于是折腾用的虚拟机,无需使用防火墙,索性关闭了,避免其他问题

SSH 无法连接虚拟机

首先使用如下指令查看虚拟机的 IP

1
ip addr

我们会得到以下信息,其中第二项(enp0s3,每个虚拟机网卡可能不太一样,这个值也不同)没有 inet 属性,导致无法连接

1
2
3
4
5
6
7
8
9
10
11
12
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 08:00:27:08:9a:58 brd ff:ff:ff:ff:ff:ff
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN
link/ether 02:42:02:3d:70:d4 brd ff:ff:ff:ff:ff:ff
inet 192.168.2.23/24 brd 192.168.2.255 scope global docker0
valid_lft forever preferred_lft forever

接下来我们使用如下指令修改该网卡的配置(CentOS 7 默认不启动网卡)

1
vi /etc/sysconfig/network-scripts/ifcfg-enp0s3

将其中的 ONBOOT=no 修改为 ONBOOT=yes,重启网络服务

1
service network restart

再次使用 ip addr 查看 IP 地址信息,发现已经分配了 IP 地址信息了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 08:00:27:08:9a:58 brd ff:ff:ff:ff:ff:ff
inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic enp0s3
valid_lft 86372sec preferred_lft 86372sec
inet6 fe80::9607:7c22:4201:a0dc/64 scope link
valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN
link/ether 02:42:02:3d:70:d4 brd ff:ff:ff:ff:ff:ff
inet 192.168.2.23/24 brd 192.168.2.255 scope global docker0
valid_lft forever preferred_lft forever

然后,再次使用 SSH 进行连接,发现可以连接使用了,就是连接有点慢

SSH 连接慢

使用如下指令修改 SSHD 配置

1
vi /etc/ssh/sshd_config

关闭DNS反向解析,修改 UseDNS=no,配置是注释掉的,但是其默认值是 yes
关闭 SERVER上 的 GSS 认证,修改 GSSAPIAuthentication no

参考文档