docker在线、离线安装、报错解决
1、Linux上注意事项Docker CE 支持 64 位版本 CentOS 7,并且要求内核版本不低于 3.10。 CentOS 7 满足最低 内核的要求,但由于内核版本比较低,部分功能(如 overlay2 存储层驱动)无法使用,并且部分功能可能不太稳定。镜像方面:在 Ubuntu/Debian 上有 UnionFS 可以使用,如 aufs 或者 overlay2 ,而 CentOS 和 RH
目录
##### 下面是在线安装步骤 #####
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 软件源
- 这是官方源:yum-config-manager --add-repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo
- 这是阿里源:yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
- 使用最新版本的 Docker CE
yum-config-manager --enable docker-ce-edge
5、安装 Docker(在线安装)
- 安装 Docker CE 更新 yum 软件源缓存,并安装 docker-ce
- yum makecache fast
- 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]#
- 问题解决完成
更多推荐
所有评论(0)