Docker(五)OpenEuler22.03 安装docker ce、排坑

本系列帖子传送门

Docker(一) 简介与基础操作(图文)

Docker(二) dockerfile创建镜像(图文)

Docker(三)dockerfile命令说明(图文)

Docker(四)创建centos、mysql、nacos、redis容器及理解

Docker(五)OpenEuler22.03 安装docker ce、排坑

目录

零、说在前面

[一、OpenEuler22.03 安装docker ce](#一、OpenEuler22.03 安装docker ce)

二、问题和解决

三、感想


零、说在前面

我在本系列的第一篇帖子中详细介绍了docker的基础内容,但缺乏一步步的实操过程,因此诞生了这篇帖子。

其次,本次使用 docker ce 进行整体操作,它是docker公司于2017年推出的免费开源社区版,我们之前说docker收费,其实是 docker ee版收费,docker ce一直免费。它与ee的核心引擎完全一致、基本功能完全相同、命令行接口完全兼容、镜像生态完全互通。更多的 ce和ee的区别联系网上一搜一大把,这里不再赘述。

另外,想详细说说如何解决常见的"docker: Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)."报错

一、OpenEuler22.03 安装docker ce

  1. 安装操作系统、关闭 selinux 等操作见以下帖子

Centos7 / OpenEuler 操作系统安装构建 yum / dnf 源测试环境防火墙的初始化

  1. 卸载系统自带的冲突软件包
bash 复制代码
## openEuler 默认预装了 podman、containerd 等容器相关软件,与 Docker 可能会产生冲突,卸载了干净
[root@milvus2 ~]# sudo dnf remove -y podman containerd runc docker docker-client docker-common docker-engine
  1. 安装必要的依赖包
bash 复制代码
[root@milvus2 ~]# sudo dnf install -y dnf-plugins-core
  1. 配置 Docker CE 软件源(华为云镜像)
bash 复制代码
## 使用华为云镜像源速度更快且稳定,我们一直用它。另外 Docker 官方源不识别 openEuler 的版本号,需要手动修改为 CentOS 8 的版本
## 添加华为云 Docker CE 源
[root@milvus2 ~]# sudo wget -O /etc/yum.repos.d/docker-ce.repo https://repo.huaweicloud.com/docker-ce/linux/centos/docker-ce.repo

## 修改源中的系统版本变量为 8(openEuler 22.03 与 CentOS 8 二进制兼容)
[root@milvus2 ~]# sudo sed -i 's+$releasever+8+' /etc/yum.repos.d/docker-ce.repo
  1. 更新软件源缓存并安装 Docker CE
bash 复制代码
## 更新缓存
sudo dnf makecache

## 安装最新版 Docker CE 及相关组件(包含 docker compose,至于docker compose 的作用和应用场景请自行搜索了解)
[root@milvus2 ~]# sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
  1. 配置国内镜像加速器(这一步有坑)
bash 复制代码
## 创建 Docker 配置目录
[root@milvus2 ~]# sudo mkdir -p /etc/docker

## 配置镜像加速器
[root@milvus2 ~]# sudo tee /etc/docker/daemon.json <<EOF
{
  "registry-mirrors": [
    "https://docker.mirrors.ustc.edu.cn",
    "https://hub-mirror.c.163.com",
    "https://mirror.baidubce.com"
  ],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "500m",
    "max-file": "3"
  }
}
EOF

## 重新加载 systemd 配置
[root@milvus2 ~]# sudo systemctl daemon-reload
  1. 启动 Docker 服务并设置开机自启
bash 复制代码
## 启动 Docker 服务
[root@milvus2 ~]# sudo systemctl start docker

## 设置开机自启动
[root@milvus2 ~]# sudo systemctl enable docker
  1. 验证。如果下面三步都能成功执行
bash 复制代码
## 查看 Docker 版本信息,能看到包含 Client 和 Server 两部分的版本信息
[root@milvus2 ~]# docker version

## 查看 Docker 系统信息,包括Docker 的存储驱动、镜像加速器配置、容器和镜像数量等详细信息
[root@milvus2 ~]# docker info

## 拉取 hello-world 测试镜像并运行容器
[root@milvus2 ~]# docker run --rm hello-world

## 执行完拉取 hello-world 容器后,应该能看到一个类似 Hello from Docker!  字样的内容,说明已成功

二、问题和解决

事实上,我在第7步的时候发现根本拉取不到 hello-world 的镜像。同时报出了"Docker(一) 简介与基础操作(图文)"中出现的 Get "https://registry-1.docker.io/v2/" 错误

问题的根源在于我既没有为 虚拟机设置 DNS ,也没有在 docker 的 daemon.json 配置文件中添加 DNS 的设置。同时我在第5步设置的三个国内镜像也有问题了。

排查步骤如下。排查结果是第一个命令 ping 不通,第三个命令没有反应。可以确认是 dns 解析失败的问题,进而无法连接 Docker Hub。

bash 复制代码
## 1. 测试 DNS 解析,用来确定DNS 是否能解析 Docker Hub 域名
[root@milvus2 ~]# ping -c 4 registry-1.docker.io

## 2. 测试外网连通性,用来确定虚拟机是否能访问外网
[root@milvus2 ~]# ping -c 4 8.8.8.8

## 3. 测试 HTTPS 连接,用来确定HTTPS 连接是否正常
[root@milvus2 ~]# curl -I https://registry-1.docker.io/v2/

解决方法如下。执行了下面的命令,更换了 daemon.json 配置文件的内容并重启Docker之后,问题解决。

bash 复制代码
## 备份原配置
[root@milvus2 ~]# sudo cp /etc/docker/daemon.json /etc/docker/daemon.json.bak

## 修改 Docker 配置,添加 DNS
[root@milvus2 ~]# sudo tee /etc/docker/daemon.json <<EOF
{
  "dns": ["8.8.8.8", "8.8.4.4", "114.114.114.114"],
  "registry-mirrors": [
    "https://docker.m.daocloud.io",
    "https://dockerproxy.com",
    "https://docker.nju.edu.cn",
    "https://docker.mirrors.ustc.edu.cn"
  ],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "500m",
    "max-file": "3"
  }
}
EOF

## 重启 Docker 服务
[root@milvus2 ~]# sudo systemctl daemon-reload
[root@milvus2 ~]# sudo systemctl restart docker

三、感想

如果我在装完虚拟机的时候,为虚拟机配置如上所示的 DNS 信息,那么也不必在 Docker 的daemon.json 文件中显式指定 DNS 。但是 镜像加速器一定要紧跟时代,不能使用过期的。

相关推荐
考虑考虑8 小时前
cmd局部设置java变量
运维·后端·自动化运维
生活爱好者!8 小时前
哇!影视新玩法!docker部署NEOWATCH NAS
运维·docker·容器
一技安身9 小时前
【信创】银河麒麟V10、统信UOS解压7Z文件
linux·运维·服务器
迷途呀10 小时前
CI/CD 自动化部署实践:让代码提交后自动上线
linux·运维·nginx·ci/cd·自动化
闲云自留地10 小时前
动手玩 Nova:Hypervisor、主机聚合、可用分区、虚拟机生命周期实操
运维·架构·openstack
binqian10 小时前
【linux】OpenSSH升级文档
linux·运维·网络
吴声子夜歌10 小时前
Shell编程——if条件语句
linux·运维·shell
和裕11 小时前
蜂窝板 vs 七层瓦楞重型纸箱:大件工业设备运输性能与成本全对比
大数据·运维·网络·人工智能·算法
Dawn-bit11 小时前
Linux 运维基础扩展:跳板机、堡垒机与物理服务器全流程
linux·运维·服务器·云计算·运维开发
新时代牛马11 小时前
Linux 定时任务:crontab、anacron 与systemd timer
linux·运维·服务器