Install Docker Engine on Linux( CentOS )

环境准备

[root@centos7 ~]# uname -r
5.11.12-300.el7.aarch64    // 系统内核需要 3.1.0 以上

[root@centos7 ~]# cat /etc/os-release    // 系统版本,Centos7 以上
NAME="CentOS Linux"
VERSION="7 (AltArch)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (AltArch)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7:server"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"

安装 Docker Engine

0. 卸载旧的版本

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

1. 安装必要的系统工具

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

2. 设置镜像地址

// 默认是国外的,可能比较慢
# yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

// 也可以使用阿里云镜像地址,不过,如果阿里云更新了,可能会报错 ...
# yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

3. 更新 yum 软件包索引

# yum makecache fast

4. 安装 docker( 默认:最新版本 )        // docker-ce  社区版(推荐)        ee  企业版

# yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin

5. 启动 docker

systemctl start docker

6. 检测 docker 是否安装成功                               // docker run 的运行流程和工作原理

docker version    // docker --version 只查看版本

或

docker run hello-world    // 运行 hello-world 进行测试

# 设置开机启动及 docker 生命周期管理

// 设置 docker 随开机启动
   systemctl enable docker

// 查看 docker 运行状态
   systemctl status docker

   systemctl start docker  // docker 启动命令
   systemctl restart docker  // docker 重新启动
   systemctl stop docker  // docker 关闭

// 了解:卸载 docker
   yum remove docker-ce docker-ce-cli containerd.io docker-compose-plugin  // 卸载依赖
   // 删除资源
   rm -rf /var/lib/docker    // docker 的默认工作路径
   rm -rf /var/lib/containerd

阿里云镜像加速

在国内使用 Docker 默认的官方镜像源,下载速度较慢或超时,所以,通常需要指定国内的镜像仓库地址来提速。

  • 获取:登录个人阿里云账号 - 控制台 - 镜像容器服务 - 镜像工具 - 镜像加速器
  • 配置:可以通过修改 daemon 配置文件 /etc/docker/daemon.json 来使用加速器
# sudo mkdir -p /etc/docker    // 创建目录
// 编译配置文件
# sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://0oox1u60.mirror.aliyuncs.com"]
}
EOF
// 重新加载配置文件
# sudo systemctl daemon-reload
// 重启 docker
# sudo systemctl restart docker

常见 bug

// 添加一个普通用户 webpiece,并设置密码
[root@centos7 ~]# useradd webpiece
[root@centos7 run]# passwd webpiece
更改用户 webpiece 的密码 。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新

// 切换为普通用户身份
[root@centos7 run]# su webpiece

因为是使用 root 身份,安装的 docker,所以,会导致一个问题:

在普通用户登录的情况下,使用 docker images 时,会出现以下错误

[webpiece@centos7 run]$ docker images
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/images/json": dial unix /var/run/docker.sock: connect: permission denied

// 通过报错文件的展示,可以看出是权限不足
[webpiece@centos7 run]$ cd /var/run
[webpiece@centos7 run]$ ll | grep docker.sock
srw-rw----.  1 root   docker            0 9月  22 21:11 docker.sock

// 其属主为root,权限为rw,可读可写;其属组为docker,权限为rw,可读 可写
// 如果要当前用户可直接读取该文件,就需要为 docker.sock 添加一个其他用户可读写权限或添加1个用户组就可以了

方法 1( 推荐 ):一劳永逸

// 如果还没有 docker group,就添加一个
[root@centos7 /]# sudo groupadd docker

// 将用户添加到该 group 中,然后,退出并重新登录就生效了
[root@centos7 /]# sudo gpasswd -a ${USER} docker
正在将用户“webpiece”加入到“docker”组中

// 重启 docker 服务
[root@centos7 /]# systemctl restart docker

// 切换当前会话到新 group 或者重启 X 会话
[root@centos7 /]# newgrp - docker
// 最后一步是必须的,否则,因为 groups 命令获取到的是缓存的组信息,刚添加的组信息未能生效

// 切换到普通用户账号,进行测试
[root@centos7 ~]# su webpiece
[webpiece@centos7 root]$ docker images
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE

方法 2:每次启动 docker 或重启 docker 之后

$cd /var/run
$sudo chmod 666 docker.sock

方法 3:每条命令前面加上 sudo