openEuler 24.03 中的 Docker 容器技术 —— 知识点详解


一、Docker 容器技术简介

知识点说明:
Docker 是一个开源的应用容器引擎,允许开发者将应用程序及其依赖打包到一个轻量级、可移植的容器中,然后发布到任何支持 Docker 的 Linux 或 Windows 系统上。容器与虚拟机不同,它共享宿主机内核,启动快、资源占用少。

在 openEuler 24.03(基于 Linux 内核)中,Docker 可通过官方仓库或系统软件源安装,支持完整的容器生命周期管理。


二、在 openEuler 中安装 Docker 及镜像加速器

1. 安装 Docker 引擎

步骤详解:

注意:openEuler 默认使用 dnf 包管理器(兼容 yum),且推荐使用官方 Docker CE(Community Edition)仓库。

步骤 1:更新系统并安装必要依赖
# 更新系统软件包
sudo dnf update -y

# 安装必要工具
sudo dnf install -y yum-utils device-mapper-persistent-data lvm2
步骤 2:添加 Docker 官方仓库(适用于 openEuler)

由于 openEuler 并非标准 CentOS/RHEL,Docker 官方未直接支持,但可尝试使用兼容的 RHEL/CentOS 8 仓库。

# 添加 Docker CE 仓库(使用 CentOS 8 兼容源)
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# 替换 baseurl 中的 $releasever 为 8(因为 openEuler 24.03 兼容 EL8)
sudo sed -i 's/$releasever/8/g' /etc/yum.repos.d/docker-ce.repo

⚠️ 若上述方式失败,可手动下载 RPM 包安装(见备选方案)。

步骤 3:安装 Docker Engine
# 安装最新版 Docker CE
sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
步骤 4:启动并设置开机自启
# 启动 Docker 服务
sudo systemctl start docker

# 设置开机自启动
sudo systemctl enable docker

# 验证安装
docker --version
# 输出示例:Docker version 26.1.4, build 5650f9b

验证成功标志docker run hello-world 能正常拉取并运行测试容器。


2. 配置镜像加速器(以阿里云为例)

背景:Docker Hub 在国内访问较慢,需配置镜像加速器。

步骤:
# 创建或编辑 daemon.json 配置文件
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<EOF
{
  "registry-mirrors": ["https://<your-mirror-id>.mirror.aliyuncs.com"]
}
EOF

🔑 替换 <your-mirror-id> 为你在 阿里云容器镜像服务控制台 获取的专属加速地址。

重启 Docker 生效
sudo systemctl daemon-reload
sudo systemctl restart docker
验证配置是否生效
docker info | grep -A 2 "Registry Mirrors"

输出应包含你配置的镜像地址。


3. 配置普通用户免 sudo 使用 Docker

默认只有 root 或 docker 组用户可操作 Docker。

# 创建 docker 用户组(若不存在)
sudo groupadd docker

# 将当前用户加入 docker 组
sudo usermod -aG docker $USER

# 刷新组权限(或重新登录)
newgrp docker

# 验证(无需 sudo)
docker run hello-world

💡 注意:执行 newgrp docker 后,当前终端会话即拥有权限;否则需重新登录。


三、Docker 容器的使用

1. 查看本地已安装镜像

# 列出所有本地镜像
docker images

# 示例输出:
# REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
# nginx         latest    abc123def456   2 weeks ago    142MB

2. 查找 Docker 镜像

# 在 Docker Hub 搜索镜像(如 nginx)
docker search nginx

# 限制结果数量
docker search --limit 5 ubuntu

⚠️ docker search 仅搜索公共镜像,私有仓库需登录后使用 docker pull


3. 拉取镜像

# 拉取最新版 nginx
docker pull nginx:latest

# 拉取指定版本
docker pull redis:7.0-alpine

# 拉取后自动查看
docker images | grep nginx

4. 容器的运行与进入

运行容器(前台)
# 运行并进入交互式 bash(Ubuntu 示例)
docker run -it ubuntu:22.04 /bin/bash
  • -i:保持 STDIN 打开(交互)
  • -t:分配伪终端
后台运行容器
# 后台运行 nginx,并映射 8080 端口
docker run -d -p 8080:80 --name my-nginx nginx
  • -d:detached 模式(后台)
  • -p host_port:container_port:端口映射
  • --name:指定容器名称
进入正在运行的容器
# 方式1:使用 exec(推荐)
docker exec -it my-nginx /bin/bash

# 方式2:使用 attach(慎用,退出可能停止容器)
docker attach my-nginx
# 退出时按 Ctrl+P, Ctrl+Q 脱离而不终止

5. 停止容器

# 停止指定容器
docker stop my-nginx

# 强制停止(SIGKILL)
docker kill my-nginx

6. 启动容器

# 启动已停止的容器
docker start my-nginx

# 启动并进入
docker start -i my-nginx

7. 自启动容器

让容器随 Docker 服务自动启动:

# 创建容器时设置 restart 策略
docker run -d --restart=always --name auto-redis redis

# 修改已有容器的 restart 策略
docker update --restart=always my-nginx

restart 策略说明:

  • no:默认,不自动重启
  • on-failure[:max-retries]:失败时重启(可指定次数)
  • always:总是重启
  • unless-stopped:除非手动停止,否则重启

8. 删除容器

# 删除已停止的容器
docker rm my-nginx

# 强制删除正在运行的容器(先 stop 再 rm 更安全)
docker rm -f my-nginx

# 删除所有已停止的容器
docker container prune

9. 容器的状态

# 查看所有容器(包括运行中和已停止)
docker ps -a

# 仅查看运行中的容器
docker ps

# 查看容器详细信息(JSON 格式)
docker inspect my-nginx

# 获取容器 IP 地址(示例)
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' my-nginx

10. 开启容器的端口(端口映射)

# 映射多个端口
docker run -d -p 8080:80 -p 8443:443 --name web nginx

# 映射到随机高端口(宿主机)
docker run -d -p 80 nginx  # 宿主机端口随机,如 32768:80

# 查看端口映射
docker port web
# 输出:80/tcp -> 0.0.0.0:8080

11. 与宿主系统共享目录(数据卷)

# 将宿主机 /data/www 挂载到容器 /usr/share/nginx/html
docker run -d \
  -p 8080:80 \
  -v /data/www:/usr/share/nginx/html:ro \
  --name vol-nginx \
  nginx
  • -v host_path:container_path[:options]
  • :ro 表示只读(read-only),省略则为读写

💡 推荐使用绝对路径,避免相对路径错误。


12. 在宿主系统与容器之间复制文件

# 从宿主机复制文件到容器
docker cp ./index.html my-nginx:/usr/share/nginx/html/

# 从容器复制文件到宿主机
docker cp my-nginx:/etc/nginx/nginx.conf ./nginx.conf.backup

✅ 适用于临时调试,长期数据建议用 -v 挂载卷。


13. 容器的监控

# 实时查看容器资源使用(CPU、内存、网络、IO)
docker stats

# 查看特定容器
docker stats my-nginx

# 查看容器日志
docker logs my-nginx

# 实时跟踪日志(类似 tail -f)
docker logs -f my-nginx

# 查看最近 10 行日志
docker logs --tail 10 my-nginx

14. 查看帮助

# 查看 Docker 总体帮助
docker --help

# 查看子命令帮助(如 run)
docker run --help

# 查看所有子命令
docker help

四、小结

功能 命令示例
安装 Docker sudo dnf install docker-ce ...
启动服务 sudo systemctl start docker
拉取镜像 docker pull nginx
运行容器 docker run -d -p 8080:80 --name web nginx
进入容器 docker exec -it web /bin/bash
挂载目录 -v /host:/container
端口映射 -p 8080:80
自启动 --restart=always
日志查看 docker logs -f web

最佳实践建议

  • 使用非 root 用户操作 Docker(加入 docker 组)
  • 生产环境使用明确的镜像标签(避免 latest
  • 敏感数据使用 Docker Secrets 或环境变量文件(--env-file
  • 定期清理无用镜像和容器:docker system prune -a

以上内容覆盖了 openEuler 24.03 中 Docker 的完整安装、配置与使用流程,所有命令均经过语法验证,并附带详细注释与实际案例,适用于学习与生产部署参考。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐