如何构建和配置 Docker 容器

DockerDockerBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

本全面的 Docker 教程为开发者和 IT 专业人员提供了一份实用指南,帮助他们理解和应用容器技术。通过探索 Docker 的核心概念、安装过程和基本命令,学习者将获得在现代软件部署和开发环境中所需的关键技能。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker(("Docker")) -.-> docker/DockerfileGroup(["Dockerfile"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") docker/ImageOperationsGroup -.-> docker/push("Push Image to Repository") docker/DockerfileGroup -.-> docker/build("Build Image from Dockerfile") subgraph Lab Skills docker/run -.-> lab-393179{{"如何构建和配置 Docker 容器"}} docker/pull -.-> lab-393179{{"如何构建和配置 Docker 容器"}} docker/push -.-> lab-393179{{"如何构建和配置 Docker 容器"}} docker/build -.-> lab-393179{{"如何构建和配置 Docker 容器"}} end

Docker 基础

什么是 Docker?

Docker 是一项强大的容器技术,它彻底改变了软件部署和开发方式。它允许开发者将应用及其所有依赖项打包成称为容器的标准化单元,确保在不同的计算环境中具有一致的性能。

Docker 的核心概念

容器化技术

容器化使应用能够在隔离的环境中运行,具有以下几个关键优势:

特性 描述
隔离性 容器独立运行,互不干扰
可移植性 应用可以在不同系统之间无缝迁移
高效性 轻量级,比传统虚拟机更快
graph TD A[应用代码] --> B[Docker 容器] B --> C[一致的部署] B --> D[资源高效性]

在 Ubuntu 22.04 上安装 Docker

要在 Ubuntu 上安装 Docker,请使用以下命令:

## 更新软件包索引
sudo apt-get update

## 安装依赖项
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common

## 添加 Docker 的官方 GPG 密钥
curl -fsSL | sudo apt-key add -

## 设置 Docker 仓库
sudo add-apt-repository "deb [arch=amd64]  $(lsb_release -cs) stable"

## 安装 Docker CE
sudo apt-get update
sudo apt-get install docker-ce

第一个 Docker 容器示例

创建并运行一个简单的 nginx 容器:

## 拉取 nginx 镜像
sudo docker pull nginx

## 运行 nginx 容器
sudo docker run -d -p 80:80 nginx

此命令下载 nginx 镜像并运行一个容器,将容器的 80 端口映射到主机系统的 80 端口。

Docker 的关键组件

  • Docker 引擎:核心运行时环境
  • Docker 镜像:容器的只读模板
  • Docker 容器:镜像的可运行实例
  • Dockerfile:用于构建自定义镜像的脚本

环境变量

理解 Docker 中的环境变量

环境变量是键值对,为 Docker 容器提供配置和运行时信息。它们能够在不修改容器源代码的情况下实现动态应用配置。

环境变量配置的类型

配置方法 描述 使用场景
Dockerfile ENV 在镜像构建期间定义静态环境变量 设置默认配置
Docker Run 命令 传递特定于运行时的变量 覆盖默认设置
Docker Compose 在配置文件中定义环境变量 复杂的多容器设置
graph TD A[环境变量源] --> B[Dockerfile] A --> C[Docker Run 命令] A --> D[Docker Compose]

Dockerfile 环境变量示例

创建一个带有环境变量的简单 Dockerfile:

## 基础镜像
FROM ubuntu:22.04

## 设置环境变量
ENV APP_HOME=/opt/myapp
ENV DATABASE_URL=localhost
ENV LOG_LEVEL=info

## 创建应用目录
RUN mkdir -p $APP_HOME

## 设置工作目录
WORKDIR $APP_HOME

运行时环境变量注入

在容器运行时传递环境变量:

## 使用自定义环境变量运行容器
docker run -e DATABASE_URL=postgresql://user:[email protected] \
  -e LOG_LEVEL=debug \
  myapp:latest

Docker Compose 环境配置

带有环境变量的 docker-compose.yml 示例:

version: "3"
services:
  web:
    image: myapp
    environment:
      - DATABASE_URL=postgresql://user:pass@db
      - LOG_LEVEL=info

环境变量的最佳实践

  • 对敏感信息使用环境变量
  • 避免硬编码凭证
  • 在本地开发中利用.env 文件
  • 实施安全的变量管理策略

Docker 最佳实践

容器镜像优化

高效的 Docker 镜像对于性能和安全性至关重要。采用多阶段构建来减小镜像大小和复杂度:

## 多阶段构建示例
FROM golang:1.17 AS builder
WORKDIR /app
COPY..
RUN go build -o myapp

FROM alpine:latest
COPY --from=builder /app/myapp /usr/local/bin/
EXPOSE 8080
CMD ["myapp"]

安全考量

安全实践 描述 实施方式
最小化基础镜像 使用轻量级基础镜像 Alpine Linux
非 root 用户 以非 root 用户运行容器 USER 指令
镜像扫描 检测漏洞 Trivy、Docker Scout
graph TD A[Docker 安全] --> B[最小化镜像] A --> C[非 root 执行] A --> D[定期扫描]

容器资源管理

实施资源限制以防止容器过载:

## 限制 CPU 和内存使用
docker run -d \
  --cpus="0.5" \
  --memory="512m" \
  --memory-reservation="256m" \
  myapp:latest

Dockerfile 优化技巧

减少镜像层数并优化构建过程:

## 合并命令以最小化层数
RUN apt-get update \
  && apt-get install -y python3 \
  && apt-get clean \
  && rm -rf /var/lib/apt/lists/*

容器编排原则

对于复杂部署,利用 Docker Compose:

version: "3"
services:
  web:
    image: myapp
    deploy:
      replicas: 3
      restart_policy:
        condition: on-failure
    ports:
      - "8080:80"

日志记录与监控策略

配置集中式日志记录和监控:

## 带有大小限制的 JSON 文件日志记录
docker run --log-driver json-file \
  --log-opt max-size=10m \
  --log-opt max-file=3 \
  myapp:latest

总结

Docker 代表了一种革命性的软件部署方法,为开发者提供了强大的工具,用于在不同的计算环境中创建、管理和扩展应用程序。通过掌握容器化技术,开发者可以在软件开发和部署工作流程中实现更高的一致性、可移植性和效率。