docker 安装

135 阅读2分钟

此篇文档为生产系统K8S环境迁移服务,在全部文档中编号为2,基础环境docker安装。可以配合init.sh使用

环境准备与优化

systemctl stop firewalld
systemctl disable firewalld

sed -i '/SELINUX/{s/permissive/disabled/g}' /etc/selinux/config

sed -i 's/^MAILTO=root/MAILTO=""/g' /etc/crontab

echo "* soft nofile 65535"  >> /etc/security/limits.conf
echo "* hard nofile 65535"  >> /etc/security/limits.conf

ulimit -a

echo "0" > /proc/sys/vm/swappiness

echo "ulimit -HSn 999999" >> /etc/sysconfig/docker
echo "net.ipv4.ip_local_port_range = 1024 65535" >> /etc/sysctl.conf
echo "net.ipv4.tcp_tw_recycle = 1" >> /etc/sysctl.conf
echo "net.ipv4.tcp_tw_reuse = 1" >> /etc/sysctl.conf
echo "net.core.rmem_max = 16777216" >> /etc/sysctl.conf
echo "net.core.wmem_max = 16777216" >> /etc/sysctl.conf
echo "net.ipv4.tcp_max_syn_backlog = 4096" >> /etc/sysctl.conf
echo "net.ipv4.tcp_syncookies = 1" >> /etc/sysctl.conf
echo "net.core.somaxconn = 1024" >> /etc/sysctl.conf
echo "net.ipv4.tcp_window_scaling = 1" >> /etc/sysctl.conf
echo "net.ipv4.tcp_rmem = 4096 87380 16777216" >> /etc/sysctl.conf
echo "net.ipv4.tcp_wmem = 4096 16384 16777216" >> /etc/sysctl.conf

sysctl -p

目录与配置文件准备


mkdir /server/docker

mkdir /etc/docker

touch /etc/docker/daemon.json

cat /etc/docker/daemon.json <<EOF
{
  "registry-mirrors": ["https://*****.mirror.aliyuncs.com"],
  "data-root": "/server/docker",
  "bip": "172.27.0.1/24",
  "exec-opts": ["native.cgroupdriver=systemd"],
  "live-restore": true
}
EOF

特别说明,为什么要修改docker的cgroup driver?

1,什么是cgroups? cgroups(Control Groups) 是 linux 内核提供的一种机制 它可以限制、记录任务组所使用的物理资源 它是内核附加在程序上的hook, 使程序运行时对资源的调度触发相应的钩子, 达到资源追踪和限制资源使用的目的

2,cgroupfs是什么? docker默认的Cgroup Driver是cgroupfs cgroupfs是cgroup为给用户提供的操作接口而开发的虚拟文件系统类型, 它和sysfs,proc类似,可以向用户展示cgroup的hierarchy,通知kernel用户对cgroup改动 对cgroup的查询和修改只能通过cgroupfs文件系统来进行

3,为什么要修改为使用systemd? Kubernetes 推荐使用 systemd 来代替 cgroupfs 因为systemd是Kubernetes自带的cgroup管理器, 负责为每个进程分配cgroups, 但docker的cgroup driver默认是cgroupfs,这样就同时运行有两个cgroup控制管理器, 当资源有压力的情况时,有可能出现不稳定的情况 如果不修改配置,会在kubeadm init时有提示:

[WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver. 
The recommended driver is "systemd". 
Please follow the guide at https://kubernetes.io/docs/setup/cri/

安装


yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

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

yum makecache fast


yum remove docker  docker-common docker-selinux docker-engine

yum install -y docker-ce-19.03.9-3.el7 docker-ce-cli-19.03.9-3.el7 docker-compose containerd.io


启动

systemctl start docker
systemctl enable docker

测试


docker info

docker-compose -v