如何在 CentOS 上快速安装 Docker


在 CentOS 上疾速部署 Docker:全面指南与最佳实践

Docker 已经成为现代软件开发和部署中不可或缺的工具。它的容器化技术带来了前所未有的便捷性、一致性和可移植性。对于 CentOS 用户来说,掌握 Docker 的安装和使用至关重要。本文将深入探讨在 CentOS 系统上快速安装 Docker 的各种方法,并提供详尽的步骤、最佳实践和故障排除技巧。

一、Docker 简介:容器化技术的优势

在深入安装细节之前,让我们简要回顾一下 Docker 的核心概念及其优势:

  • 容器化: Docker 的核心是容器。容器是一个轻量级、独立的可执行软件包,它包含了运行应用程序所需的一切:代码、运行时、系统工具、系统库和设置。
  • 镜像: Docker 镜像是一个只读模板,用于创建容器。它包含了应用程序及其所有依赖项。
  • 仓库: Docker 仓库用于存储和共享 Docker 镜像。Docker Hub 是一个公共的中央仓库,包含大量预构建的镜像。
  • 隔离性: 容器彼此隔离,也与宿主机隔离。这意味着一个容器中的问题不会影响其他容器或宿主机。
  • 可移植性: 容器可以在任何支持 Docker 的平台上运行,无需修改。这使得应用程序的部署和迁移变得非常容易。
  • 效率: 容器比虚拟机更轻量级,启动速度更快,资源消耗更少。
  • 一致性: 容器确保应用程序在不同环境(开发、测试、生产)中以相同的方式运行。

二、CentOS 系统准备:确保安装顺利进行

在开始安装 Docker 之前,我们需要确保 CentOS 系统满足以下要求:

  1. CentOS 版本: Docker 支持 CentOS 7 及更高版本。建议使用较新的 CentOS 版本,以获得更好的性能和安全性。

  2. 内核版本: Docker 需要 64 位操作系统,内核版本至少为 3.10。您可以通过以下命令检查内核版本:

    bash
    uname -r

  3. yum 包管理器: CentOS 使用 yum 包管理器来安装和管理软件包。确保 yum 正常工作并且可以访问互联网。

  4. root 权限: 安装 Docker 需要 root 用户权限或具有 sudo 权限的用户。

  5. 关闭 SELinux 或进行配置(可选): SELinux(Security-Enhanced Linux)是 CentOS 的一个安全模块。在某些情况下,SELinux 可能会阻止 Docker 的正常运行。您可以选择临时禁用 SELinux 或对其进行配置以允许 Docker 运行。

    • 临时禁用 SELinux:

      bash
      sudo setenforce 0

      此命令将 SELinux 设置为 permissive 模式,这意味着它将记录违规行为,但不会阻止它们。此更改在重启后失效。

    • 永久禁用 SELinux(不推荐):

      编辑 /etc/selinux/config 文件,将 SELINUX=enforcing 更改为 SELINUX=disabled

      ```
      sudo vi /etc/selinux/config

      将 SELinux 设置为 disabled

      ```

      保存并关闭文件,然后重启系统。

    • 配置 SELinux(推荐):
      更加推荐的方式不是禁用SELinux,而是对其进行详细的配置,允许Docker在其中运行。这通常涉及到安装container-selinux软件包并设置一些布尔值,但是这是一个更复杂的操作,不在此详细赘述,请查阅CentOS和Docker官方文档。

  6. 防火墙配置(可选): 如果您启用了防火墙(如 firewalld),您可能需要打开 Docker 使用的端口(例如 2375、2376)。

    bash
    sudo firewall-cmd --add-port=2375/tcp --permanent
    sudo firewall-cmd --add-port=2376/tcp --permanent
    sudo firewall-cmd --reload

三、Docker 安装方法:多种选择,灵活应对

在 CentOS 上安装 Docker 有多种方法。您可以根据自己的需求和偏好选择最适合的方法。

1. 使用 Docker 官方仓库安装(推荐)

这是安装 Docker 的最推荐方法。它确保您获得最新版本的 Docker,并且可以轻松地进行更新。

  1. 卸载旧版本(如果存在):

    bash
    sudo yum remove docker \
    docker-client \
    docker-client-latest \
    docker-common \
    docker-latest \
    docker-latest-logrotate \
    docker-logrotate \
    docker-engine

  2. 安装所需的软件包:

    bash
    sudo yum install -y yum-utils

    yum-utils 提供了一些有用的工具,包括 yum-config-manager,用于管理 yum 仓库。

  3. 添加 Docker 官方仓库:

    bash
    sudo yum-config-manager --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

  4. 安装 Docker Engine:

    bash
    sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

    * docker-ce: Docker 社区版引擎。
    * docker-ce-cli: Docker 命令行界面。
    * containerd.io: 一个行业标准的容器运行时。
    * docker-buildx-plugin: Docker Buildx 插件,提供更高级的构建功能。
    * docker-compose-plugin: Docker Compose 插件, 用于定义和运行多容器 Docker 应用程序。

  5. 启动 Docker 服务:

    bash
    sudo systemctl start docker

  6. 设置 Docker 开机自启:

    bash
    sudo systemctl enable docker

  7. 验证安装:

    bash
    sudo docker run hello-world

    此命令将下载一个测试镜像并在容器中运行它。如果一切正常,您将看到一条欢迎消息。

2. 使用便捷脚本安装

Docker 官方提供了一个便捷脚本,可以自动执行安装过程。这种方法非常快速,但可能不适用于生产环境。

  1. 下载安装脚本:

    bash
    curl -fsSL https://get.docker.com -o get-docker.sh

  2. 运行安装脚本:

    bash
    sudo sh get-docker.sh

  3. 验证安装:

    bash
    sudo docker run hello-world

3. 使用 RPM 包手动安装(不推荐)

这种方法需要手动下载 Docker 的 RPM 包并进行安装。它通常不推荐,除非您无法访问互联网或有其他特殊需求。

  1. 下载 RPM 包:

    从 Docker 官方网站或镜像站点下载适用于您的 CentOS 版本的 Docker RPM 包。

  2. 安装 RPM 包:

    bash
    sudo yum localinstall /path/to/docker-ce-<version>.rpm

    /path/to/docker-ce-<version>.rpm 替换为实际的 RPM 包路径。

  3. 启动 Docker 服务:

    bash
    sudo systemctl start docker

  4. 设置 Docker 开机自启:

    bash
    sudo systemctl enable docker

  5. 验证安装:
    bash
    sudo docker run hello-world

四、Docker 常用命令与操作:快速上手,玩转容器

安装 Docker 后,您可以使用一系列命令来管理容器、镜像和网络。以下是一些常用的命令:

  • docker run 运行一个容器。

    bash
    docker run -d -p 80:80 nginx

    此命令将运行一个 Nginx 容器,并将容器的 80 端口映射到宿主机的 80 端口。

  • docker ps 列出正在运行的容器。

    bash
    docker ps

    使用 -a 选项可以列出所有容器(包括已停止的容器)。

  • docker stop 停止一个正在运行的容器。

    bash
    docker stop <container_id>

  • docker start 启动一个已停止的容器。

    bash
    docker start <container_id>

  • docker rm 删除一个容器。

    bash
    docker rm <container_id>

    使用 -f 选项可以强制删除正在运行的容器。

  • docker images 列出本地镜像。

    bash
    docker images

  • docker pull 从仓库拉取一个镜像。

    bash
    docker pull ubuntu:latest

  • docker push 将一个镜像推送到仓库。

    bash
    docker push <your_username>/<image_name>:<tag>

  • docker build 从 Dockerfile 构建一个镜像。

    bash
    docker build -t <image_name>:<tag> .

  • docker exec 在正在运行的容器中执行命令。

    bash
    docker exec -it <container_id> bash

    此命令将在容器中打开一个交互式 bash shell。

  • docker logs: 查看容器的日志。
    bash
    docker logs <container_id>

  • docker network 管理 Docker 网络。

  • docker volume 管理 Docker 卷。

五、Docker Compose:简化多容器应用管理

当您需要运行多个相互关联的容器时,Docker Compose 是一个非常有用的工具。它允许您使用 YAML 文件定义和管理多容器应用程序。

  1. 安装 Docker Compose(如果尚未安装):
    Docker Compose 通常与 docker-compose-plugin 一起安装。如果你的系统上没有,可以使用以下命令来安装(这取决于具体的Linux发行版,对于CentOS,通常不需要单独安装,前面安装Docker Engine时已经包括):

    ```bash

    (如果需要的话)

    sudo yum install docker-compose-plugin
    ```

  2. 创建 docker-compose.yml 文件:

    在您的项目目录中创建一个名为 docker-compose.yml 的文件,并在其中定义您的服务、网络和卷。

    yaml
    version: "3.9"
    services:
    web:
    image: nginx:latest
    ports:
    - "80:80"
    db:
    image: postgres:latest
    environment:
    POSTGRES_PASSWORD: mysecretpassword

  3. 启动应用程序:

    bash
    docker compose up -d

    此命令将在后台启动您的应用程序。

  4. 停止应用程序:

    bash
    docker compose down

六、常见问题与故障排除:扫清障碍,畅行无阻

在安装和使用 Docker 的过程中,您可能会遇到一些问题。以下是一些常见问题及其解决方法:

  • Cannot connect to the Docker daemon 错误:

    • 确保 Docker 服务正在运行:sudo systemctl start docker
    • 确保当前用户属于 docker 用户组:sudo usermod -aG docker $USER,然后注销并重新登录。
    • 检查 Docker 服务状态:sudo systemctl status docker
  • 镜像拉取失败:

    • 检查网络连接。
    • 检查 Docker Hub 是否可访问。
    • 尝试使用其他镜像源。
  • 容器无法启动:

    • 检查容器日志:docker logs <container_id>
    • 检查端口映射是否正确。
    • 检查资源限制(CPU、内存)。
  • 权限问题

    • 确保你有足够的权限去执行Docker命令,或者你所使用的用户属于docker组。
  • WARNING: IPv4 forwarding is disabled 警告:

    • 启用 IPv4 转发。编辑 /etc/sysctl.conf 文件,添加或修改以下行:

      net.ipv4.ip_forward=1

    • 然后运行 sudo sysctl -p 使更改生效。

七、进阶配置与最佳实践:精益求精,追求卓越

以下是一些 Docker 的进阶配置和最佳实践,可以帮助您更好地使用 Docker:

  • 使用非 root 用户运行 Docker:

    将您的用户添加到 docker 用户组,这样您就可以在不使用 sudo 的情况下运行 Docker 命令。

    bash
    sudo usermod -aG docker $USER

    然后需要注销并重新登录使更改生效.

  • 使用 Docker 数据卷:

    数据卷是持久化容器数据的推荐方式。它们独立于容器的生命周期,可以在容器之间共享数据。

  • 使用 Docker 网络:

    Docker 网络允许您创建隔离的容器网络,以便容器可以相互通信。

  • 使用 Dockerfile 构建自定义镜像:

    Dockerfile 是一个文本文件,其中包含构建 Docker 镜像的指令。使用 Dockerfile 可以自动化镜像构建过程,并确保镜像的可重复性。

  • 使用 Docker Compose 管理多容器应用程序:

    如前所述,Docker Compose 可以简化多容器应用程序的部署和管理。

  • 监控 Docker 容器:

    使用 docker stats 命令或第三方工具(如 cAdvisor、Prometheus)监控容器的资源使用情况。

  • 定期清理无用资源:

    定期删除未使用的容器、镜像和卷,以释放磁盘空间。

    bash
    docker system prune -a

    * 安全性最佳实践
    * 限制容器的权限。
    * 不要将敏感信息硬编码到镜像中。
    * 定期更新 Docker 和容器镜像。
    * 使用安全扫描工具扫描容器镜像。

八、Docker 的未来与展望:拥抱创新,与时俱进

Docker 仍然是容器化领域的主导者,并且在不断发展和演进。以下是 Docker 的一些未来趋势:

  • 与 Kubernetes 的集成: Kubernetes 已经成为容器编排的事实标准。Docker 与 Kubernetes 的集成将越来越紧密。
  • WebAssembly (Wasm): Wasm 是一种新兴的二进制指令格式,可以在浏览器和服务器上运行。Docker 正在探索将 Wasm 集成到容器生态系统中。
  • Serverless: Docker 可以与 Serverless 框架集成,以简化无服务器应用程序的部署和管理。
  • 边缘计算: Docker 可以用于在边缘设备上部署和管理容器化应用程序。
  • 安全性增强: Docker 将继续加强容器的安全性,以满足企业级应用的需求。

展望未来: 持续进化中的容器生态

Docker 的安装只是容器化之旅的第一步。通过深入了解 Docker 的核心概念、掌握常用命令、学习最佳实践并关注其未来发展,您将能够充分利用 Docker 的强大功能,构建更高效、更可靠、更具可移植性的应用程序。随着技术的不断演进,容器技术和 Docker 本身也会持续发展,保持学习的热情,您将始终站在技术的最前沿。

THE END