CentOS 安装 Docker CE

Docker 划分为 CE 和 EE。CE 即社区版(免费,支持周期三个月),EE 即企业版,强调安全,付费使用。

Docker CE 支持 64 位版本 CentOS 7,并且要求内核版本不低于 3.10,CentOS 7 满足最低内核的要求,但由于内核版本比较低,部分功能(如 overlay2 存储层驱动)无法使用,并且部分功能可能不太稳定。

卸载旧版本:如果没有安装过则无需卸载

yum remove docker docker-client docker-client-latest  docker-common  docker-latest  docker-latest-logrotate docker-logrotate docker-engine                 

安装iptables: docker需要依赖iptables,如果机器没有安装会报错,可以安装:

yum -y install iptables

安装方法

一定要先关闭selinux,否则启动容器容易出错

大多数用户会 设置Docker的存储库并从中进行安装,以简化安装和升级任务。这是推荐的方法。

一些用户下载并手动安装 RPM软件包, 并完全手动管理升级。这在诸如在无法访问互联网的空白系统上安装Docker的情况下很有用。

在测试和开发环境中,一些用户选择使用自动 便利脚本来安装Docker。(不推荐)

一. 使用存储库安装:

1、安装yum-utils软件包(提供yum-config-manager 实用程序)并设置稳定的存储库.

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

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

国内源:

  • 清华大学源: yum-config-manager –add-repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo (注意add前面为双横杠)
  • 阿里云源:yum-config-manager –add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo (注意add前面为双横杠)

2、安装最新版本的Docker Engine和容器:

sudo yum install -y docker-ce docker-ce-cli containerd.io 或者安装指定版本:yum install -y docker-ce-18.09.7 docker-ce-cli-18.09.7 containerd.io

建立docker组:

sudo groupadd docker

将当前用户加入到docker组中:(linux环境中一般不直接使用root用户)

sudo usermod -aG docker 用户

修改docker启动配置文件,执行命令如下:

cat > /etc/docker/daemon.json << EOF
{
    "exec-opts": ["native.cgroupdriver=systemd"],
    "max-concurrent-downloads": 10,
    "max-concurrent-uploads": 5,
    "log-driver": "json-file",
    "storage-driver": "overlay2",
    "data-root": "/data/docker",
    "storage-opts": [
    "overlay2.override_kernel_check=true"
    ],
    "log-opts":{
        "max-size": "300m",
        "max-file": "2" 
    },
    "live-restore": true
}
EOF
  • native.cgroupdriver=systemd:修改驱动为systemd
  • max-concurrent-downloads:每个请求最大并发下载量,默认为3
  • max-concurrent-uploads:每次推送的最大同时上传数,默认为5
  • log-driver:容器日志的默认驱动程序,默认为json-file
  • storage-driver: 要使用的存储驱动程序
  • data-root: Docker运行时使用的根路径,默认/var/lib/docker
  • storage-opts: 存储驱动程序选项
  • log-opts: 容器默认日志驱动程序选项
  • live-restore: 容器运行时重启docker,对容器不影响

3、启动docker:

sudo  systemctl   enable  docker
sudo  systemctl    start    docker
sudo  systemctl    status    docker

二、使用rpm软件包安装

如果您不能使用Docker的存储库来安装Docker,则可以下载该.rpm版本的 文件并手动安装。每次要升级Docker Engine时,都需要下载一个新文件。

转到https://download.docker.com/linux/centos/ 并选择您的CentOS版本。然后浏览x86_64/stable/Packages/ 并下载.rpm要安装的Docker版本的文件。

1、安装Docker Engine,将以下路径更改为下载Docker软件包的路径:

sudo yum install /path/to/package.rpm

2、创建docker用户组:

sudo groupadd docker

将当前用户加入到docker组中:(linux环境中一般不直接使用root用户)

sudo usermod -aG docker 用户

3、 启动Docker:

sudo systemctl enable dcoker

sudo systemctl start docker

注:安装完成后需要开启ipv4转发,外面无法访问容器内部,提示 WARNING: IPv4 forwarding is disabled. 开启方法如下:

#编辑文件
vim /usr/lib/sysctl.d/00-system.conf
#添加内容:
net.ipv4.ip_forward=1
#重启网卡
systemctl restart network

或者:

也可以编辑文件vim /etc/sysctl.conf,添加如下内容
net.ipv4.ip_forward=1      #开启ipv4_forward
sysctl -p                  #让命令生效

三、通过二进制包方式来安装:

下载二进制文件包,下载地址:https://download.docker.com/linux/static/stable/x86_64/

执行下面命令,将二进制包解压,如下:

#解压二进制包
tar zxvf docker-19.03.9.tgz
#移动二进制文件到环境变量路径下,里面的docker是Client,dockerd是docker Engine
mv docker/* /usr/bin

修改docker启动配置文件 ,执行命令如下:

cat > /etc/docker/daemon.json << EOF
{
    "exec-opts": ["native.cgroupdriver=systemd"],
    "registry-mirrors" : ["https://registry.docker-cn.com"],
    "max-concurrent-downloads": 10,
    "max-concurrent-uploads": 5,
    "log-driver": "json-file",
    "storage-driver": "overlay2",
    "data-root": "/data/docker",
    "log-opts":{
        "max-size": "300m",
        "max-file": "2" 
    },
    "live-restore": true,
    "bip": "172.16.0.1/16",
    "dns": [
        "8.8.8.8",
        "8.8.4.4"
    ]
}
EOF

通过systemd 来管理 docker Engine,执行命令如下:

cat > /usr/lib/systemd/system/docker.service << EOF
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
EOF

启动并设置开机启动 :

systemctl daemon-reload
systemctl start docker
systemctl enable docker

通过二进制安装docker的脚本如下:

#!/bin/bash
# @Function: Install Docker CE
# @Author: Gong Guan
# @Date: 2021-11-01
set -e
DfileName=docker-19.03.9.tgz
if [ -f ${DfileName} ];then
   echo "<<<<<<<<<<<解压文件(Unzip File)>>>>>>>>>>>>"
   tar -zxvf ${DfileName}
   [ $? -eq 0 ] && echo "<<<<<<<<<<<File Unzip success>>>>>>>>>>>>"
   mv docker/* /usr/bin
else
   echo "Docker File Not Found"
   exit 1
fi
[ ! -d /etc/docker ] && mkdir /etc/docker
echo "<<<<<<<<<<<<<<Config daemon.json>>>>>>>>>>>>>>"
cat > /etc/docker/daemon.json << EOF
{
    "exec-opts": ["native.cgroupdriver=systemd"],
    "registry-mirrors" : ["https://registry.docker-cn.com"],
    "max-concurrent-downloads": 10,
    "max-concurrent-uploads": 5,
    "log-driver": "json-file",
    "storage-driver": "overlay2",
    "log-opts":{
        "max-size": "300m",
        "max-file": "2" 
    },
    "live-restore": true,
    "bip": "172.16.0.1/16",
    "dns": [
        "8.8.8.8",
        "8.8.4.4"
    ]
}
EOF
echo "<<<<<<<<<<<设置服务托管docker>>>>>>>>>>>>>>"
cat > /lib/systemd/system/docker.service << EOF
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
EOF
echo "<<<<<<<<<<<<<<设置开机自启动(Startup self)>>>>>>>>"
systemctl enable docker
echo "<<<<<<<<<<<<<<开启docker(startup Docker)>>>>>>>>>>"
systemctl start docker
echo "<<<<<<<<<<<<<<查看docker状态(status)>>>>>>>>>>>"
systemctl status docker

卸载Docker

卸载Docker Engine,CLI和Containerd软件包:

sudo yum remove docker-ce docker-ce-cli containerd.io

主机上的映像,容器,卷或自定义配置文件不会自动删除。要删除所有图像,容器和卷

sudo rm -rf /var/lib/docker

默认情况下, docker 命令会使用 Unix socket 与 Docker 引擎通讯。而只有 root 用户和 docker 组的用户才可以访问 Docker 引擎的 Unix socket。出于安全考虑,一般 Linux 系统 上不会直接使用 root 用户。因此,更好地做法是将需要使用 docker 的用户加入 docker 用户组。

配置镜像加速

国内从 Docker Hub 拉取镜像有时会遇到困难,此时可以配置镜像加速器。Docker 官方和国内很多云服务商都提供了国内加速器服务,例如:

  1. Docker 官方提供的中国镜像:https://registry.docker-cn.com/
  2. 阿里云加速器:登录官网->镜像工具->加速器->复制加速器地址
  3. 网易加速器: http://hub-mirror.c.163.com/
  4. 中国科技大学:https://docker.mirrors.ustc.edu.cn
  5. 百度云加速器:https://mirror.baidubce.com/

对于使用 upstart 的系统而言( Ubuntu 14.04、Debian 7 Wheezy ),编辑 /etc/default/docker 文件,在其中的 DOCKER_OPTS 中 添加获得的加速器配置:

DOCKER_OPTS="--registry-mirror=https://registry.docker-cn.com" 
sudo service   docker   restart     #配置后重启服务

对于使用 systemd 的系统( Ubuntu 16.04+、Debian 8+、CentOS 7 ),请在 /etc/docker/daemon.json 中写入如下内容(如果文件不存 在请新建该文件,可配置多个加速器)

{ "registry-mirrors": [ 
      "https://registry.docker-cn.com",
      "http://hub-mirror.c.163.com/"
   ] 
} 

重新启动服务:

systemctl daemon-reload && systemctl restart docker

检查加速器是否配置成功

执行命令docker info,如果 看到如下内容,表示配置成功,如图:

标签