0%

在CentOS 8中安装配置Docker

最近要配一个Kubernetes集群,Node OS选的是CentOS 8,但是发现安装Docker出现了一些问题,这里记录一下解决方法

1. 清理系统环境,去除曾经安装的Docker组件及程序

1
2
3
4
5
6
7
8
$ yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine

2. 安装相应环境及工具

1
2
3
$ yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
1
2
3
$ yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo

3. 执行安装

1
$ yum install docker-ce docker-ce-cli containerd.io

在这一步会遇到以下问题:

1
2
3
4
5
6
7
8
9
10
11
12
Docker CE Stable - x86_64                                                                                                       4.7 kB/s |  21 kB     00:04
Last metadata expiration check: 0:00:01 ago on Wed 25 Dec 2019 10:13:24 PM EST.
Error:
Problem: package docker-ce-3:19.03.5-3.el7.x86_64 requires containerd.io >= 1.2.2-3, but none of the providers can be installed
- cannot install the best candidate for the job
- package containerd.io-1.2.10-3.2.el7.x86_64 is excluded
- package containerd.io-1.2.2-3.3.el7.x86_64 is excluded
- package containerd.io-1.2.2-3.el7.x86_64 is excluded
- package containerd.io-1.2.4-3.1.el7.x86_64 is excluded
- package containerd.io-1.2.5-3.1.el7.x86_64 is excluded
- package containerd.io-1.2.6-3.3.el7.x86_64 is excluded
(try to add '--skip-broken' to skip uninstallable packages or '--nobest' to use not only best candidate packages)

这里提示的是containerd.io的版本问题,提示说用--nobet来跳过错误,但是这样做的话就会使得安装Kubernetes不成功,因为containerd.io的版本不匹配。

解决方法如下,安装符合版本要求的containerd.io:

1
$ dnf install https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm

再次执行安装:

1
yum install docker-ce docker-ce-cli containerd.io

4. 安装后配置

为什么要配置?

因为Docker默认安装有一些问题:

  1. 数据目录没有指定,导致都放在/中,这样磁盘很快耗尽,特别是开发迭代过程,大量的版本更新,image一下子就撑爆/分区。
  2. 没有暴露 HTTP API,有需求时可以加上这个,以便于远程操作docker。
  3. 指定insecure-repository ,以方便我们访问非安全协议的image repository。

systemd的配置目录在/usr/lib/systemd/system,所以进到这个目录里,修改docker.service即可修改Dockerd的启动配置。

我们只配好一行就行:

1
ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2375 -g /deploy/docker --containerd=/run/containerd/containerd.sock

这里指定了暴露2375端口允许远端访问docker,同时指定数据目录为/deploy/docker

刷新服务配置

1
$ systemctl daemon-reload

启动服务

1
$ systemctl start docker.service

搞定。