CentOS 7 安装Docker-CE

  许多情况下,系统中都安装好了 Docker 但是版本比较旧,为了稳定性与功能性更好,我们需要安装较新版本。
此文只是翻译了部分 Docker官方文档

卸载旧版本

旧版的 Docker 命名为 docker 或者是 docker-engine,如果已经安装了它们,那么必须先卸载它们以及它们的依赖项。

1
2
3
4
5
6
7
8
9
10
sudo 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
2
3
4
5
6
7
8
9
10
# 设置repository  
sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 安装并启动 docker
yum install -y bridge-utils docker-ce docker-ce-cli containerd.io libseccomp
systemctl enable docker
systemctl start docker

其他配置

  正常情况下,普通用户执行 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