# Docker 容器环境

URL: https://caijiao.org/rockylinux/docker-setup
Source: docs/rockylinux/docker-setup.md
Description: 在 Rocky Linux 中安装、配置并使用 Docker 容器环境，包括安装步骤、镜像管理、容器运行和常见问题排查。

Docker 是现代开发与部署环境的核心组件，能够快速构建、打包与运行应用。  
在 Rocky Linux 上安装和配置 Docker 十分简单，以下步骤将帮助你从零开始。

## 一、安装 Docker

Rocky Linux 默认仓库中不直接提供最新版 Docker，需要从 Docker 官方仓库安装。

### 1. 移除旧版本

```bash
sudo dnf remove docker \
                docker-client \
                docker-client-latest \
                docker-common \
                docker-latest \
                docker-latest-logrotate \
                docker-logrotate \
                docker-engine
```

### 2. 安装依赖包

```bash
sudo dnf install -y dnf-plugins-core
```

### 3. 添加 Docker 官方仓库

```bash
sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
```

> 💡 Rocky Linux 与 CentOS/RHEL 使用相同的软件仓库格式，因此可直接使用该仓库。

### 4. 安装 Docker 引擎

```bash
sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
```

## 二、启动 Docker 服务

```bash
sudo systemctl enable --now docker
```

验证是否成功启动：

```bash
sudo systemctl status docker
```

输出中出现 `Active: active (running)` 即表示正常运行。

## 三、非 root 用户使用 Docker

默认情况下，只有 root 用户可以运行 Docker。
为了更方便操作，可以将当前用户加入 `docker` 用户组：

```bash
sudo usermod -aG docker $USER
```

修改后需重新登录才能生效：

```bash
newgrp docker
```

测试是否成功：

```bash
docker ps
```

## 四、Docker 基本命令

| 操作             | 命令                           | 说明                     |
| ---------------- | ------------------------------ | ------------------------ |
| 查看 Docker 版本 | `docker --version`             | 显示已安装的 Docker 版本 |
| 启动容器         | `docker run -d -p 80:80 nginx` | 后台运行 Nginx 容器      |
| 查看容器         | `docker ps -a`                 | 显示所有容器             |
| 停止容器         | `docker stop <容器ID>`         | 停止指定容器             |
| 删除容器         | `docker rm <容器ID>`           | 删除容器                 |
| 删除镜像         | `docker rmi <镜像名>`          | 删除镜像                 |
| 构建镜像         | `docker build -t myapp .`      | 从当前目录构建镜像       |
| 查看日志         | `docker logs -f <容器ID>`      | 实时查看容器日志         |

## 五、Docker Compose 安装与使用

Docker Compose 允许使用 YAML 文件管理多个容器服务。

### 1. 检查版本

```bash
docker compose version
```

如果未安装，可手动安装插件：

```bash
sudo dnf install -y docker-compose-plugin
```

### 2. 创建示例项目

新建一个 `docker-compose.yml`：

```yaml
version: "3.9"
services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"
  db:
    image: mysql:8
    environment:
      MYSQL_ROOT_PASSWORD: example
```

运行：

```bash
docker compose up -d
```

查看状态：

```bash
docker compose ps
```

## 六、防火墙与服务端口

如果服务器启用了防火墙，确保开放容器端口（例如 Nginx 的 80 端口）：

```bash
sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --reload
```

## 七、常见问题排查

| 问题                                                                    | 解决方法                                                         |
| ----------------------------------------------------------------------- | ---------------------------------------------------------------- |
| `Cannot connect to the Docker daemon`                                   | 确认 Docker 服务正在运行；若非 root 用户，请添加至 `docker` 组。 |
| `permission denied while trying to connect to the Docker daemon socket` | 重新登录或执行 `newgrp docker`。                                 |
| 网络异常或拉取镜像慢                                                    | 可配置国内镜像源（如阿里云镜像加速）。                           |

配置加速示例：

```bash
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://mirror.aliyun.com"]
}
EOF
sudo systemctl restart docker
```

## 八、总结

- Docker 提供轻量级虚拟化环境，适合快速部署与测试。
- 推荐结合 **Docker Compose** 管理多服务项目。
- 生产环境可进一步使用 **Podman** 或 **Kubernetes** 进行容器编排。

> 🚀 提示：Rocky Linux 作为 RHEL 兼容系统，与企业级容器平台完全兼容，可无缝运行 Docker 或 Podman 容器环境。
