CentOS 9 Stream 完整安装与使用 Docker Hub 实战指南
Docker 作为当今最流行的容器化技术,已经彻底改变了软件的开发、交付和部署方式。而 Docker Hub 作为全球最大的容器镜像仓库,拥有数百万个官方和社区维护的镜像,是每个 Docker 用户不可或缺的资源。
本文将带你在最新的 CentOS 9 Stream 系统上,从零开始完成 Docker Engine 的安装、配置和优化,并深入讲解 Docker Hub 的所有核心功能,从基础的镜像拉取运行,到自定义镜像构建推送,再到私有仓库的使用,让你全面掌握 Docker Hub 的使用技巧。
一、环境准备与系统要求
在开始安装之前,我们需要确保系统满足以下要求:
- 操作系统:CentOS 9 Stream(x86_64 架构)
- 内核版本:4.18 或更高(CentOS 9 Stream 默认满足)
- 磁盘空间:至少 20GB 可用空间(建议 50GB 以上用于存储镜像)
- 网络连接:稳定的互联网连接
- 权限:具有 sudo 权限的普通用户或 root 用户
1.1 系统更新
首先,我们需要更新系统到最新状态,确保所有软件包都是最新版本:
sudo dnf update -y1.2 安装必要依赖
安装一些后续步骤需要用到的工具和依赖包:
sudo dnf install -y yum-utils device-mapper-persistent-data lvm2二、卸载旧版本 Docker
如果你的系统中之前安装过旧版本的 Docker(如 docker、docker-engine 等),请先卸载它们,避免与新版本产生冲突:
sudo dnf remove -y docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine \ podman \ runc预装说明CentOS 9 Stream 默认预装了 Podman 作为容器运行时,上述命令会同时卸载 Podman 和 runc,这是正常的,因为 Docker Engine 会使用自己的 containerd 运行时。
三、安装 Docker Engine
Docker Engine 的核心开源项目 Moby 托管在 ::github{repo=“moby/moby”} 仓库中。官方提供了两种安装方式:使用官方 yum 仓库安装(推荐)和手动下载 RPM 包安装。本文将介绍官方推荐的 yum 仓库安装方式,便于后续升级和维护。
3.1 添加 Docker 官方 yum 仓库
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo3.2 安装 Docker Engine 最新版本
执行以下命令安装 Docker Engine、containerd 和 Docker Compose 插件:
sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin3.3 启动并启用 Docker 服务
安装完成后,启动 Docker 服务并设置为开机自启:
sudo systemctl start dockersudo systemctl enable docker3.4 验证 Docker 安装
运行 hello-world 容器来验证 Docker 是否安装成功:
sudo docker run hello-world如果看到以下输出,说明 Docker 已经成功安装并运行:
Hello from Docker!This message shows that your installation appears to be working correctly.1 collapsed line
...3.5 配置免 sudo 运行 Docker(可选但推荐)
默认情况下,运行 Docker 命令需要 sudo 权限。为了方便使用,我们可以将当前用户添加到 docker 用户组,这样就可以免 sudo 运行 Docker 命令了:
sudo usermod -aG docker $USER权限刷新添加用户到 docker 组后,需要注销并重新登录才能生效。不要使用
su命令切换用户,因为那样不会刷新组权限。
重新登录后,再次运行 hello-world 容器验证:
docker run hello-world四、配置 Docker 国内镜像加速
由于网络原因,国内用户直接访问 Docker Hub 速度非常慢,甚至会出现连接超时的情况。因此,配置国内镜像加速器是必不可少的一步。
4.1 创建 Docker 配置目录
sudo mkdir -p /etc/docker4.2 配置镜像加速器
创建或编辑 /etc/docker/daemon.json 文件:
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" ]}EOF这里我们配置了三个国内常用的镜像加速器:
- 中国科学技术大学镜像
- 网易云镜像
- 百度云镜像
你可以根据自己的网络情况选择合适的加速器。
4.3 重启 Docker 服务使配置生效
sudo systemctl daemon-reloadsudo systemctl restart docker4.4 验证镜像加速配置
执行以下命令查看配置是否生效:
docker info五、Docker Hub 基础使用
现在 Docker 已经安装并配置完成,接下来我们开始学习 Docker Hub 的核心使用方法。
5.1 注册 Docker Hub 账号
在使用 Docker Hub 之前,你需要先注册一个免费账号:
- 访问 Docker Hub 官网
- 点击右上角的 “Sign Up” 按钮
- 填写用户名、邮箱和密码
:spoiler[建议使用强密码] - 验证邮箱地址并完成注册
5.2 登录 Docker Hub
在终端中使用以下命令登录 Docker Hub:
docker login按照提示输入你的 Docker Hub 用户名和密码。
凭据保存登录信息会保存在
~/.docker/config.json文件中,下次使用时会自动登录。
5.3 搜索 Docker 镜像
使用 docker search 命令可以在 Docker Hub 上搜索镜像:
docker search nginx你可以使用 --limit 参数限制搜索结果数量:
docker search nginx --limit 55.4 拉取 Docker 镜像
使用 docker pull 命令从 Docker Hub 拉取镜像到本地:
docker pull nginx默认会拉取最新版本(latest 标签)的镜像。如果你需要特定版本,可以指定标签:
docker pull nginx:1.25.35.5 查看本地镜像
使用 docker images 命令查看本地已下载的镜像:
docker images5.6 运行 Docker 容器
使用 docker run 命令从镜像创建并运行容器:
docker run -d -p 80:80 --name my-nginx nginx参数说明:
-d:后台运行容器-p 80:80:将主机的 80 端口映射到容器的 80 端口--name my-nginx:给容器指定一个名称nginx:使用的镜像名称
现在你可以在浏览器中访问 http://你的服务器IP,应该能看到 Nginx 的默认欢迎页面。
5.7 查看运行中的容器
使用 docker ps 命令查看运行中的容器:
docker ps如果要查看所有容器(包括已停止的),使用 -a 参数:
docker ps -a5.8 停止和删除容器
停止运行中的容器:
docker stop my-nginx删除容器:
docker rm my-nginx强制删除如果容器正在运行,需要先停止才能删除,或者使用
-f参数强制删除:Terminal window docker rm -f my-nginx
5.9 删除本地镜像
使用 docker rmi 命令删除本地镜像:
docker rmi nginx:1.25.3六、实战:构建自定义镜像并推送到 Docker Hub
接下来我们通过一个实战案例,学习如何构建自定义 Docker 镜像并推送到 Docker Hub。
6.1 创建项目目录
mkdir my-docker-appcd my-docker-app6.2 创建网页文件
创建一个简单的 index.html 文件:
<!DOCTYPE html><html lang="zh-CN"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>我的第一个 Docker 应用</title>16 collapsed lines
<style> body { font-family: Arial, sans-serif; text-align: center; padding: 50px; background-color: #f0f0f0; } h1 { color: #333; } p { color: #666; font-size: 18px; } </style></head><body> <h1>🎉 恭喜你!</h1> <p>你已经成功构建并运行了自己的第一个 Docker 镜像!</p> <p>这是一个基于 Nginx 的自定义网页。</p></body></html>6.3 创建 Dockerfile
在项目目录中创建一个名为 Dockerfile 的文件:
# 使用官方 Nginx 镜像作为基础镜像FROM nginx:latest
# 维护者信息LABEL maintainer=":spoiler[your-email@example.com]"
# 将本地的 index.html 文件复制到容器中的 Nginx 网页根目录COPY index.html /usr/share/nginx/html/
# 暴露 80 端口EXPOSE 80
# 容器启动时运行 NginxCMD ["nginx", "-g", "daemon off;"]修改提示请将
:spoiler[your-email@example.com]替换为你自己的真实邮箱地址。
6.4 构建自定义镜像
使用 docker build 命令构建镜像:
docker build -t your-docker-username/my-nginx:v1.0 .账号对应这里的
your-docker-username必须是你在 Docker Hub 上注册的用户名,否则后续无法推送到 Docker Hub。
6.5 运行自定义镜像
构建完成后,运行我们的自定义镜像:
docker run -d -p 8080:80 --name my-custom-nginx your-docker-username/my-nginx:v1.0现在访问 http://你的服务器IP:8080,你应该能看到我们刚才创建的自定义网页。
6.6 推送镜像到 Docker Hub
使用 docker push 命令将镜像推送到 Docker Hub:
docker push your-docker-username/my-nginx:v1.0推送完成后,你可以登录 Docker Hub 网站,在你的仓库中看到这个镜像。现在任何人都可以通过以下命令拉取并运行你的镜像:
docker run -d -p 8080:80 your-docker-username/my-nginx:v1.0七、Docker Hub 私有仓库使用
Docker Hub 免费账号提供一个私有仓库,如果你需要更多的私有仓库,可以升级到付费计划。
7.1 创建私有仓库
- 登录 Docker Hub 网站
- 点击右上角的 “Create Repository” 按钮
- 填写仓库名称和描述
- 在 “Visibility” 选项中选择 “Private”
- 点击 “Create” 按钮
7.2 构建并推送私有镜像
给镜像打标签时,使用你刚才创建的私有仓库名称:
docker build -t your-docker-username/my-private-repo:v1.0 .docker push your-docker-username/my-private-repo:v1.07.3 拉取私有镜像
其他人要拉取你的私有镜像,需要先使用你的账号登录 Docker Hub:
docker logindocker pull your-docker-username/my-private-repo:v1.0八、Docker Hub 高级技巧
8.1 使用标签管理镜像版本
标签是管理镜像版本的重要方式。你可以给同一个镜像打多个标签:
# 给镜像打 latest 标签docker tag your-docker-username/my-nginx:v1.0 your-docker-username/my-nginx:latest
# 推送所有标签docker push your-docker-username/my-nginx --all-tags8.2 搜索官方镜像
使用 --filter "is-official=true" 参数只搜索官方镜像:
docker search mysql --filter "is-official=true"8.3 查看镜像详细信息
使用 docker inspect 命令查看镜像的详细信息:
docker inspect nginx8.4 清理无用镜像和容器
定期清理无用的镜像和容器可以释放磁盘空间:
# 删除所有停止的容器docker container prune -f
# 删除所有未使用的镜像docker image prune -a -f
# 删除所有未使用的卷docker volume prune -f
# 删除所有未使用的网络docker network prune -f
# 一键清理所有无用资源docker system prune -a -f --volumes九、常见问题与解决方案
9.1 Docker 服务无法启动
问题:执行 sudo systemctl start docker 时失败。
解决方案:
- 检查
/etc/docker/daemon.json文件格式是否正确 - 查看 Docker 日志获取详细错误信息:
Terminal window sudo journalctl -u docker - 确保 SELinux 没有阻止 Docker 运行:
Terminal window sudo setenforce 0
9.2 拉取镜像时出现连接超时
问题:执行 docker pull 时出现 timeout 错误。
解决方案:
- 检查网络连接是否正常
- 确保已经配置了国内镜像加速器
- 尝试更换其他镜像加速器
9.3 端口映射失败
问题:运行容器时出现 port is already allocated 错误。
解决方案:
- 检查端口是否被其他进程占用:
Terminal window sudo netstat -tulpn | grep :80 - 停止占用端口的进程,或者使用其他端口映射
9.4 推送镜像到 Docker Hub 失败
问题:执行 docker push 时出现 denied: requested access to the resource is denied 错误。
解决方案:
- 确保你已经登录 Docker Hub
- 检查镜像标签是否正确,必须包含你的 Docker Hub 用户名
- 确保你有推送到该仓库的权限
十、总结
在本文中,我们详细介绍了在 CentOS 9 Stream 系统上安装和使用 Docker Hub 的完整流程:
- 我们首先完成了系统准备和旧版本 Docker 的卸载
- 然后通过官方 yum 仓库安装了最新版本的 Docker Engine
- 配置了国内镜像加速器,解决了访问 Docker Hub 速度慢的问题
- 学习了 Docker Hub 的基础使用方法,包括登录、搜索、拉取、运行和删除镜像
- 通过实战案例,掌握了自定义镜像的构建和推送方法
- 了解了 Docker Hub 私有仓库的使用
- 分享了一些 Docker Hub 的高级技巧和常见问题解决方案
Docker 和 Docker Hub 的组合为我们提供了强大的容器化解决方案,让我们可以轻松地构建、分享和运行任何应用。希望本文能够帮助你快速上手 Docker Hub,并在实际工作中发挥它的强大功能。