跳转到内容
搜索 RunEntLinux 文档

仅搜索 RunEntLinux 通用文档,各发行版文档使用各自的搜索入口。

    浏览当前文档目录

    Docker 安装与使用

    Docker 官方提供了适用于企业级 Linux 的软件仓库。以下步骤适用于 RHEL、CentOS Stream、AlmaLinux、Rocky Linux 等 EL 系发行版。

    Terminal window
    # 安装 DNF 插件(提供 config-manager)
    sudo dnf install -y dnf-plugins-core
    # 添加 Docker 官方仓库
    sudo dnf config-manager --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
    1. 安装 Docker Engine、CLI 和容器运行时:

      Terminal window
      sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
    2. 启动 Docker 并设置开机自启:

      Terminal window
      sudo systemctl enable --now docker
    3. 验证安装:

      Terminal window
      sudo docker version
      sudo docker run hello-world
    4. (可选)将当前用户加入 docker 组,避免每次使用 sudo:

      Terminal window
      sudo usermod -aG docker $(whoami)

      退出并重新登录后生效。

    Terminal window
    # 从 Docker Hub 拉取镜像
    docker pull nginx:latest
    docker pull almalinux:9
    # 搜索镜像
    docker search mariadb
    # 查看本地镜像
    docker images
    Terminal window
    # 前台运行,退出后自动删除
    docker run --rm -it almalinux:9 /bin/bash
    # 后台运行 Nginx
    docker run -d --name my-nginx -p 80:80 nginx:latest
    # 带环境变量和卷挂载运行 MariaDB
    docker run -d --name my-db \
    -p 3306:3306 \
    -e MYSQL_ROOT_PASSWORD=your_password \
    -v /data/mysql:/var/lib/mysql \
    mariadb:10.11
    Terminal window
    # 查看正在运行的容器
    docker ps
    # 查看所有容器
    docker ps -a
    # 查看容器日志
    docker logs my-nginx
    docker logs -f --tail 100 my-nginx
    # 查看容器详细信息
    docker inspect my-nginx
    # 查看容器资源使用
    docker stats
    Terminal window
    # 停止容器
    docker stop my-nginx
    # 启动已停止的容器
    docker start my-nginx
    # 重启容器
    docker restart my-nginx
    # 删除已停止的容器
    docker rm my-nginx
    # 强制删除运行中的容器
    docker rm -f my-nginx
    # 删除所有已停止的容器
    docker container prune
    # 删除未使用的镜像
    docker image prune -a
    Terminal window
    # 以交互终端进入容器
    docker exec -it my-nginx /bin/bash
    # 在容器中执行命令
    docker exec my-nginx nginx -t

    Docker Compose 用于定义和管理多容器应用。Docker CE 安装时自带 docker compose 子命令(V2 版本)。

    创建 docker-compose.yml:

    services:
    web:
    image: nginx:latest
    ports:
    - "80:80"
    - "443:443"
    volumes:
    - ./nginx.conf:/etc/nginx/nginx.conf:ro
    - ./html:/usr/share/nginx/html:ro
    - certbot_data:/etc/letsencrypt:ro
    depends_on:
    - app
    restart: unless-stopped
    app:
    build: ./app
    expose:
    - "8000"
    environment:
    - DATABASE_URL=mysql://root:changeme@db:3306/myapp
    depends_on:
    - db
    restart: unless-stopped
    db:
    image: mariadb:10.11
    environment:
    MYSQL_ROOT_PASSWORD: changeme
    MYSQL_DATABASE: myapp
    volumes:
    - db_data:/var/lib/mysql
    restart: unless-stopped
    redis:
    image: redis:7-alpine
    restart: unless-stopped
    volumes:
    db_data:
    certbot_data:
    Terminal window
    # 启动所有服务(后台)
    docker compose up -d
    # 查看服务状态
    docker compose ps
    # 查看日志
    docker compose logs -f
    # 仅查看某个服务的日志
    docker compose logs -f app
    # 重新构建并启动
    docker compose up -d --build
    # 停止所有服务
    docker compose down
    # 停止并删除数据卷
    docker compose down -v
    # 扩展服务实例数
    docker compose up -d --scale app=3
    FROM almalinux:9-minimal
    RUN microdnf install -y python3 python3-pip && \
    microdnf clean all
    WORKDIR /app
    COPY requirements.txt .
    RUN pip3 install --no-cache-dir -r requirements.txt
    COPY . .
    EXPOSE 8000
    USER 1001
    CMD ["python3", "-m", "uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
    Terminal window
    # 构建镜像
    docker build -t my-app:v1 .
    # 给镜像打标签
    docker tag my-app:v1 registry.example.com/my-app:v1
    # 推送到私有仓库
    docker push registry.example.com/my-app:v1

    Docker 在 EL 系统上默认使用 overlay2 存储驱动,这是推荐的选项。

    Terminal window
    docker info | grep "Storage Driver"

    编辑或创建 /etc/docker/daemon.json:

    {
    "storage-driver": "overlay2",
    "data-root": "/data/docker",
    "log-driver": "json-file",
    "log-opts": {
    "max-size": "100m",
    "max-file": "3"
    },
    "registry-mirrors": [
    "https://mirror.example.com"
    ]
    }

    重启 Docker 使配置生效:

    Terminal window
    sudo systemctl restart docker

    如需将 Docker 数据从默认的 /var/lib/docker 迁移到新位置:

    1. 停止 Docker:

      Terminal window
      sudo systemctl stop docker
    2. 复制现有数据:

      Terminal window
      sudo rsync -aP /var/lib/docker/ /data/docker/
    3. 在 /etc/docker/daemon.json 中设置 data-root:

      {
      "data-root": "/data/docker"
      }
    4. 启动 Docker 并验证:

      Terminal window
      sudo systemctl start docker
      docker info | grep "Docker Root Dir"
    5. 确认一切正常后,删除旧目录:

      Terminal window
      sudo rm -rf /var/lib/docker

    Docker 会自行管理 iptables 规则。如果使用 firewalld,需要注意以下事项:

    Terminal window
    # 允许容器间通信
    sudo firewall-cmd --permanent --zone=trusted --add-interface=docker0
    sudo firewall-cmd --reload
    Terminal window
    # 查看 Docker 磁盘使用
    docker system df
    # 全面清理未使用资源
    docker system prune -a --volumes
    # 导出容器为镜像
    docker commit my-nginx my-nginx-backup:latest
    # 导出/导入镜像文件
    docker save -o nginx-backup.tar nginx:latest
    docker load -i nginx-backup.tar