目录

##### 下面是在线安装步骤 #####

1、Linux上注意事项

2、环境介绍(在线安装)

3、卸载旧版本 (在线安装)

4、配置相关环境(在线安装)

5、安装 Docker(在线安装)

 6、启动 Docker 服务(在线安装)

##### 下面是离线安装步骤 #####

1、安装(离线,直接上硬货)

##### 下面是安装报错解决 #####

1.1 重启报错

1.2 ​​​​​​ ​daemon.json文件导致


##### 下面是在线安装步骤 #####

1、Linux上注意事项

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

镜像方面:在 Ubuntu/Debian 上有 UnionFS 可以使用,如 aufs 或者 overlay2 ,而 CentOS 和 RHEL 的内核中没有相关驱动。因此对于这类系统,一般使用 devicemapper 驱动利用 LVM 的一些 机制来模拟分层存储。这样的做法除了性能比较差外,稳定性一般也不好,而且配置相对复 杂。Docker 安装在 CentOS/RHEL 上后,会默认选择 devicemapper ,但是为了简化配置, 其 devicemapper 是跑在一个稀疏文件模拟的块设备上,也被称为 loop-lvm 。这样的选择是 因为不需要额外配置就可以运行 Docker,这是自动配置唯一能做到的事情。但是 loop-lvm 的做法非常不好,其稳定性、性能更差,无论是日志还是 docker info 中都会看到警告信 息。

官方文档有明确的文章讲解了如何配置块设备给 devicemapper 驱动做存储层的做法,这 类做法也被称为配置 direct-lvm 除了前面说到的问题外, devicemapper + loop-lvm 还有一个缺陷,因为它是稀疏文件,所 以它会不断增长。用户在使用过程中会注意到 /var/lib/docker/devicemapper/devicemapper/data 不断增长,而且无法控制。很多人会希望删 除镜像或者可以解决这个问题,结果发现效果并不明显。原因就是这个稀疏文件的空间释放 后基本不进行垃圾回收的问题。因此往往会出现即使删除了文件内容,空间却无法回收,

随着使用这个稀疏文件一直在不断增长所以对于 CentOS/RHEL 的用户来说,在没有办法使用 UnionFS 的情况下,一定要配置 direct-lvm 给 devicemapper ,无论是为了性能、稳定性还是空间利用率。 或许有人注意到了 CentOS 7 中存在被 backports 回来的 overlay 驱动,不过 CentOS 里的 这个驱动达不到生产环境使用的稳定程度,所以不推荐使用。

2、环境介绍(在线安装)

物理主机

内核

172.16.201.181

3.10.0-957.27.2.el7.x86_64

内核版本不得低于3.10,版本过低会导致部分功能无法使用

3、卸载旧版本 (在线安装)

yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-selinux \ docker-engine-selinux \ docker-engine -y

4、配置相关环境(在线安装)

  • 安装依赖包

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

yum-config-manager --enable docker-ce-edge

5、安装 Docker(在线安装)

 

  •  安装 Docker CE 更新 yum 软件源缓存,并安装 docker-ce
  1. yum makecache fast
  2. yum -y install docker-ce

 6、启动 Docker 服务(在线安装)

  • 启动docker

systemctl enable docker

systemctl start docker

  • 建立 docker 用户组

[root@node1 ~]# adduser docker

  • 测试 Docker 是否安装正确

[root@node1 ~]# docker run hello-world

【若能正常输出以上信息,则说明安装成功。】

##### 下面是离线安装步骤 #####

1、安装(离线,直接上硬货)

docker一般安装在linux7以上,内核3.1以上。

  • 查看内核

[root@k8s-node02 ~]# uname -r

3.10.0-1062.el7.x86_64

[root@k8s-node02 ~]#

  • 下载docker最新版
    • 下载地址:https://download.docker.com/linux/static/stable/x86_64/
    • 【觉得下载麻烦请加博主微信,私发给你】
    • 【这里下载的是docker-19.03.8.tgz】

  • 解压

将最新版的docker放到/usr/local/下面

cd /usr/local/

tar -zxvf docker-19.03.8.tgz

 

  • 将解压出来的docker目录下文件内容移动到 /usr/bin/ 目录下

cd /usr/local/

chmod +x docker/*

cp docker/* /usr/bin/

  • 将docker设置为系统服务

【系统服务的目录:/etc/systemd/system/】

【其他服务的目录:/usr/lib/systemd/system/】

【这里使用/usr/lib/systemd/system/】

[root@k8s-node01 ~]# cat /usr/lib/systemd/system/docker.service

[Unit]

Description=Docker Application Container Engine

Documentation=https://docs.docker.com

After=network-online.target firewalld.service

Wants=network-online.target

[Service]

Type=notify

# the default is not to use systemd for cgroups because the delegate issues still

# exists and systemd currently does not support the cgroup feature set required

# for containers run by docker

ExecStart=/usr/bin/dockerd

ExecReload=/bin/kill -s HUP $MAINPID

# Having non-zero Limit*s causes performance problems due to accounting overhead

# in the kernel. We recommend using cgroups to do container-local accounting.

LimitNOFILE=infinity

LimitNPROC=infinity

LimitCORE=infinity

# Uncomment TasksMax if your systemd version supports it.

# Only systemd 226 and above support this version.

#TasksMax=infinity

TimeoutStartSec=0

# set delegate yes so that systemd does not reset the cgroups of docker containers

Delegate=yes

# kill only the docker process, not all processes in the cgroup

KillMode=process

# restart the docker process if it exits prematurely

Restart=on-failure

StartLimitBurst=3

StartLimitInterval=60s

[Install]

WantedBy=multi-user.target

[root@k8s-node01 ~]#

  • 启动测试

[root@k8s-node01 ~]# ps -ef|grep docker

root      2740  2653  0 08:31 pts/0    00:00:00 grep --color=auto docker

[root@k8s-node02 ~]# systemctl daemon-reload

[root@k8s-node01 ~]# systemctl restart docker

[root@k8s-node01 ~]# ps -ef|grep docker

root      2767     1  3 08:32 ?        00:00:00 /usr/bin/dockerd

root      2775  2767  1 08:32 ?        00:00:00 containerd --config /var/run/docker/containerd/containerd.toml --log-level info

root      2912  2653  0 08:32 pts/0    00:00:00 grep --color=auto docker

[root@k8s-node01 ~]#

 

  • 完成

##### 下面是安装报错解决 #####

1.1 重启报错

  • 现场还原

[root@localhost docker]# systemctl restart docker

Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.

[root@localhost docker]#

  • 查看docker报错

Failed to start containerd: exec: "containerd": executable file not found in $PATH

【由图可知,是因为少了“containerd”的包导致启动失败,经查询是containerd.io-1.2.2-3.3.el7.x86_64.rpm,Linux内核版本越高越好,版本过低可能会不兼容】

  • 解决方式:安装相应的包

【下面包请加博主微信:c_x_y_000下载,谢谢】

rpm -ivh libseccomp-2.3.1-3.el7.x86_64.rpm --nodeps

rpm -ivh libtool-ltdl-2.4.2-22.el7_3.x86_64.rpm --nodeps

rpm -ivh lz4-1.7.5-2.el7.x86_64.rpm --nodeps

rpm -ivh containerd.io-1.2.2-3.3.el7.x86_64.rpm --nodeps

【系统默认会把前3个包给装了,我们只需要装后面的containerd.io包即可,查看所有相关包是否安装,方式如下:

[root@localhost docker]# rpm -qa|grep libseccomp

libseccomp-2.3.1-3.el7.x86_64

[root@localhost docker]# rpm -qa|grep libtool

libtool-ltdl-2.4.2-22.el7_3.x86_64

[root@localhost docker]# rpm -qa|grep lz4

lz4-1.7.5-2.el7.x86_64

[root@localhost docker]# rpm -qa|grep containerd

containerd.io-1.2.2-3.3.el7.x86_64

[root@localhost docker]#

  • 验证

systemctl daemon-reload

systemctl restart docker

systemctl enable docker

  • 解决完成

1.2 ​​​​​​ ​daemon.json文件导致

  • 问题现场还原

[root@localhost docker]# systemctl restart docker

Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.

[root@localhost docker]#  

  • 查看报错

systemctl status docker.service -l 和 systemctl status docker.service

看不出来什么,使用journalctl命令查找日志

        journalctl -u docker【使用GG直接到达最后一行查看】

【Error starting daemon: error initializing graphdriver: Storage option overlay2.size not supported. Filesystem doe】

       journalctl -xe|grep docker|tail -100

【由报错可知Storage option overlay2.size not supported不支持,这应该是daemon.json文件的问题】

  • 查看daemon.json

[root@localhost docker]# cat /etc/docker/daemon.json

{

   "insecure-registries": ["192.168.122.50:1121"],

   "storage-driver": "overlay2",

   "storage-opts": [

     "overlay2.size=10G", 【去掉此行】

     "overlay2.override_kernel_check=true"

   ],

   "log-opts": {

     "max-size": "50m",

     "max-file": "5"

   },

   "log-level": "debug",

   "data-root": "/apps/docker"

}

[root@localhost docker]#

  • 修改后如下所示:

[root@localhost docker]# cat /etc/docker/daemon.json

{

   "insecure-registries": ["192.168.122.50:1121"],

   "storage-driver": "overlay2",

   "storage-opts": [

     "overlay2.override_kernel_check=true"

   ],

   "log-opts": {

     "max-size": "50m",

     "max-file": "5"

   },

   "log-level": "debug",

   "data-root": "/apps/docker"

}

[root@localhost docker]#

  • 重启docker

[root@localhost docker]# systemctl daemon-reload

[root@localhost docker]# systemctl restart docker

[root@localhost docker]#

  • 问题解决完成
Logo

更多推荐