Docker 环境搭建:安装与配置 – wiki基地

Docker 环境搭建:安装与配置

Docker 已经成为现代软件开发中不可或缺的工具,它通过容器化技术,使得应用程序的打包、分发和运行变得更加高效和一致。本文将详细介绍 Docker 的安装过程,并提供一系列配置最佳实践,帮助您更好地利用 Docker。

Docker 是什么?为什么使用它?

Docker 是一种开源平台,用于自动化部署、扩展和管理应用程序。它将应用程序及其所有依赖项(库、运行时、系统工具、代码等)打包到一个称为容器的独立单元中。

使用 Docker 的主要优势包括:

  • 环境一致性: 容器确保应用程序在开发、测试和生产环境中的运行方式相同,解决了“在我的机器上可以运行”的问题。
  • 资源隔离: 每个容器都在自己的独立环境中运行,与其他容器和主机系统隔离,提高了安全性和稳定性。
  • 快速部署: 容器是轻量级且可移植的,可以快速启动和停止,大大缩短了部署时间。
  • 版本控制: 容器镜像可以像代码一样进行版本控制,方便回滚和管理。
  • 可伸缩性: 容器化应用程序易于扩展,可以根据需求轻松地增加或减少容器实例。

Docker 环境搭建

Docker 的安装方式因操作系统而异。对于 Windows 和 macOS 用户,推荐使用 Docker Desktop;对于 Linux 服务器,则通常安装 Docker Engine。

1. Docker Desktop (适用于 Windows 和 macOS)

Docker Desktop 提供了一个易于使用的 GUI 界面,集成了 Docker Engine、CLI 客户端、Docker Compose、Kubernetes 等工具,是开发者的首选。

系统要求:

  • Windows: Windows 10 64-bit: Home 或 Pro 2004 (Build 19041) 或更高版本。需要开启 WSL 2 功能。
  • macOS: macOS Monterey 12 或更高版本。

安装步骤:

  1. 下载 Docker Desktop: 访问 Docker 官方网站 下载适用于您操作系统的 Docker Desktop 安装包。
  2. 运行安装程序:
    • Windows: 双击 Docker Desktop Installer.exe。在安装向导中,确保勾选“Enable Hyper-V Windows Features”和“Install required Windows components for WSL 2”选项。
    • macOS: 将下载的 .dmg 文件拖放到“Applications”文件夹中。
  3. 按照指示完成安装: 完成安装向导的剩余步骤。
  4. 重启电脑 (Windows): 在 Windows 上,安装完成后通常需要重启电脑。
  5. 启动 Docker Desktop: 安装完成后,启动 Docker Desktop 应用程序。Docker 图标会出现在系统托盘(Windows)或菜单栏(macOS)中,表示 Docker 正在运行。
  6. 验证安装: 打开终端或命令提示符,运行以下命令验证 Docker 是否安装成功:
    bash
    docker --version
    docker run hello-world

    如果看到 Hello from Docker! 的消息,则表示安装成功。

2. Docker Engine (适用于 Linux)

对于 Linux 服务器环境,通常推荐直接安装 Docker Engine。以下以 Ubuntu 为例介绍安装步骤。

先决条件:

  • 一个 64 位版本的 Ubuntu 系统 (如 Ubuntu Focal 20.04 或 Jammy 22.04)。

安装步骤 (Ubuntu):

  1. 更新 apt 包索引:
    bash
    sudo apt-get update
  2. 安装必要的软件包,以允许 apt 通过 HTTPS 使用存储库:
    bash
    sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release
  3. 添加 Docker 的官方 GPG 密钥:
    bash
    sudo mkdir -p /etc/apt/keyrings
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
  4. 设置稳定版存储库:
    bash
    echo \
    "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
    $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  5. 再次更新 apt 包索引:
    bash
    sudo apt-get update
  6. 安装 Docker Engine、CLI 和 Containerd:
    bash
    sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
  7. 验证安装: 运行 hello-world 镜像以验证 Docker Engine 是否已正确安装并运行:
    bash
    sudo docker run hello-world

    如果输出显示 Hello from Docker!,则表示安装成功。

可选:将用户添加到 docker 组 (非 root 用户管理 Docker):

默认情况下,docker 命令需要 sudo 权限才能运行。若要允许非 root 用户管理 Docker,请将其添加到 docker 组:

bash
sudo usermod -aG docker $USER
newgrp docker # 退出当前会话并重新登录以使更改生效,或运行此命令

Docker 配置最佳实践

安装 Docker 之后,遵循一些最佳实践可以帮助您更高效、安全地使用它。

1. 使用官方和特定基础镜像

  • 优先使用官方镜像: 从 Docker Hub 或其他受信任的注册中心拉取官方镜像,它们经过维护和安全扫描。
  • 使用特定版本标签: 避免使用 latest 标签,因为它可能随时更改。使用 node:18-alpinepython:3.9-slim 等特定版本标签,确保构建的可重现性。
  • 选择最小的基础镜像: 例如,使用基于 Alpine Linux 或 Distroless 的镜像,它们体积小,攻击面更小。

2. 最小化镜像大小

减小镜像大小可以加快下载速度,减少存储空间,并提高安全性。

  • 多阶段构建 (Multi-stage Builds): 在 Dockerfile 中使用多个 FROM 语句。在第一个阶段构建应用程序,在第二个阶段将构建好的应用程序复制到更小的运行时镜像中,丢弃所有构建依赖。
  • 使用 .dockerignore 文件: 类似于 .gitignore.dockerignore 文件用于排除不必要的文件和目录(如 .gitnode_modules、临时文件等)从构建上下文中,避免它们被复制到镜像中。
  • 优化层: Docker 镜像由层组成。将变化不频繁的指令放在 Dockerfile 的顶部,将变化频繁的指令放在底部。合并相关的 RUN 指令,例如使用 && 将多个命令连接起来,以减少层数。
  • 避免安装不必要的软件包: 只安装应用程序运行所需的最小依赖集。

3. 安全性

  • 减少攻击面: 最小化容器暴露的端口,避免以 root 用户运行容器(除非绝对必要),在 Dockerfile 中使用 USER 指令创建并切换到非 root 用户。
  • 敏感信息管理: 不要在 Dockerfile 或镜像中硬编码敏感信息(如 API 密钥、数据库凭据)。使用环境变量、Docker Secrets 或 Kubernetes Secrets 来安全地注入这些信息。
  • 镜像扫描: 定期使用 Docker Scout 或其他第三方工具扫描您的 Docker 镜像,查找已知的安全漏洞。
  • 及时更新: 及时更新您的基础镜像和应用程序依赖,以修补安全漏洞。

4. 容器化思维

  • 一个容器一个进程: 尽量保持每个容器只运行一个主进程(例如,一个 Web 服务器、一个数据库)。这使得容器更易于管理、扩展和调试。
  • 容器应该是无状态的: 容器应该被视为临时的、可替换的。将持久化数据存储在 Docker Volume 或绑定挂载中,而不是容器文件系统中。
  • 容器是不可变的: 不要在运行中的容器内部进行修改。如果需要更改,请修改 Dockerfile,重新构建镜像,然后启动一个新的容器。

5. 资源管理

  • 限制资源使用: 使用 docker run 命令的 --memory--cpus 等参数来限制容器可用的 CPU 和内存资源,防止单个容器耗尽主机资源。
  • 例如:
    bash
    docker run -d --memory="512m" --cpus="0.5" my-app

    这将限制容器使用 512MB 内存和 0.5 个 CPU 核心。

6. 健康检查

  • 在 Dockerfile 中定义 HEALTHCHECK 指令,以检测容器内的应用程序是否正常运行,而不仅仅是进程是否存活。
  • 例如:
    dockerfile
    HEALTHCHECK --interval=5s --timeout=3s \
    CMD curl -f http://localhost/health || exit 1

7. Docker Compose 用于本地开发

  • 使用 Docker Compose 定义和运行多容器 Docker 应用程序。它允许您使用一个 docker-compose.yml 文件来配置应用程序的所有服务、网络和卷,简化了本地开发环境的搭建和管理。

8. 自动化工作流程

  • 将 Docker 构建和部署集成到您的持续集成/持续部署 (CI/CD) 管道中,实现自动化构建、测试和部署 Docker 镜像。

总结

Docker 为软件开发和部署带来了革命性的变革。通过遵循本文提供的安装指南和最佳实践,您可以有效地搭建 Docker 环境,并构建出高效、安全且易于管理的容器化应用程序。不断学习和探索 Docker 的新功能,将帮助您更好地驾驭容器化技术。

希望这篇指南对您有所帮助!

滚动至顶部