许多情况下,系统中都安装好了 Docker
但是版本比较旧,为了稳定性与功能性更好,我们需要安装较新版本。
此文只是翻译了部分 Docker官方文档
卸载旧版本
旧版的 Docker
命名为 docker
或者是 docker-engine
,如果已经安装了它们,那么必须先卸载它们以及它们的依赖项。1
2
3
4
5
6
7
8
9
10sudo yum remove -y docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
安装Docker CE
1 | 设置repository |
其他配置
正常情况下,普通用户执行 docker run
等命令都必须要加 sudo
,否则会提示 get …… dial unix /var/run/docker.sock
权限不足,这里我们将当前用户加入到 docker
用户组则可解决:1
sudo groupadd docker #添加docker用户组,如果已有该用户组则跳过
1 | sudo usermod -aG docker ${USER} #将当前用户加入到docker用户组 |
1 | sudo systemctl restart docker #重启docker服务 |
重启当前用户会话即可生效。
以下部分按需配置:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 安装 nfs-utils
yum install -y nfs-utils
关闭 防火墙
systemctl stop firewalld
systemctl disable firewalld
关闭 SeLinux
setenforce 0
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
关闭 swap
swapoff -a
yes | cp /etc/fstab /etc/fstab_bak
cat /etc/fstab_bak |grep -v swap > /etc/fstab
修改 /etc/sysctl.conf
如果有配置,则修改
sed -i "s#^net.ipv4.ip_forward.*#net.ipv4.ip_forward=1#g" /etc/sysctl.conf
sed -i "s#^net.bridge.bridge-nf-call-ip6tables.*#net.bridge.bridge-nf-call-ip6tables=1#g" /etc/sysctl.conf
sed -i "s#^net.bridge.bridge-nf-call-iptables.*#net.bridge.bridge-nf-call-iptables=1#g" /etc/sysctl.conf
可能没有,追加
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
echo "net.bridge.bridge-nf-call-ip6tables = 1" >> /etc/sysctl.conf
echo "net.bridge.bridge-nf-call-iptables = 1" >> /etc/sysctl.conf
执行命令以应用
sysctl -p
如果有作为 k8s worker 的需求,需要修改 docker Cgroup Driver 为 systemd
# 将/usr/lib/systemd/system/docker.service文件中的这一行 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
# 修改为 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --exec-opt native.cgroupdriver=systemd
如果不修改,在添加 worker 节点时可能会碰到如下错误
[WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd".
增加docker网桥
systemctl stop docker
sudo ip link set dev docker0 down
sudo brctl delbr docker0
sudo brctl addbr docker0
sudo ip addr add 10.233.0.0/16 dev docker0
sudo ip link set dev docker0 up
重启 docker,并启动 kubelet
systemctl daemon-reload
systemctl restart docker