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 。但是 镜像加速器一定要紧跟时代,不能使用过期的。

相关推荐
2401_894915536 分钟前
新手落地 Geo 优化:源码下载、依赖安装、数据库初始化完整步骤
运维·服务器·数据库·人工智能·缓存·开源
runafterhit12 分钟前
【学习地图】Linux学习类 · 文章索引
linux·运维·学习
宋辰轩17 分钟前
Docker导致的wsl2崩溃问题
docker·wsl2
码农阿豪22 分钟前
Ubuntu部署GodoOS:Docker搭建Web办公桌面并实现远程访问
前端·ubuntu·docker
暖核31 分钟前
项目实战:LAMP 博客平台 WordPress 部署全攻略
运维
九硕智慧建筑一体化厂家37 分钟前
打破系统孤岛!IBMS 一体化平台,构建智慧楼宇全域管控体系
运维·网络·人工智能·笔记·智慧城市
杨云龙UP40 分钟前
Oracle ASH 报告详解:与 AWR 的区别、使用场景及生成方法
linux·运维·服务器·数据库·oracle
琥珀色糖1 小时前
Linux makefile
linux·运维·服务器·makefile·make
Elastic 中国社区官方博客1 小时前
用两行 JSON 替换你的 ILM 策略:数据流生命周期新增冻结层支持
大数据·运维·elasticsearch·搜索引擎·架构·全文检索
小趴菜一只1 小时前
linux权限维持
linux·运维·服务器