如何使用 Docker 引擎对应用程序进行容器化

DockerDockerBeginner
立即练习

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

简介

本全面的 Docker 教程为开发者和系统管理员提供了一份实用指南,帮助他们理解和应用容器技术。通过探索 Docker 的核心概念、安装过程和基本命令,学习者将获得简化软件部署和创建一致开发环境所需的技能。

Docker 基础

Docker 基础入门

Docker 是一个强大的容器化平台,它彻底改变了软件部署和开发方式。它使开发者能够将应用程序及其所有依赖项打包成称为容器的标准化单元。

容器化的核心概念

graph TD A[Docker 镜像] --> B[Docker 容器] A --> C[Dockerfile] B --> D[隔离环境]
概念 描述
容器 轻量级的、独立的可执行包
镜像 用于创建容器的只读模板
Dockerfile 包含构建镜像指令的文本文件

在 Ubuntu 22.04 上安装

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

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

## 添加 Docker 的官方 GPG 密钥
curl -fsSL | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

## 设置稳定存储库
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg]  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

## 安装 Docker 引擎
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io

基本的 Docker 命令

## 检查 Docker 版本
docker --version

## 拉取镜像
docker pull ubuntu:latest

## 列出镜像
docker images

## 运行容器
docker run -it ubuntu:latest /bin/bash

## 列出正在运行的容器
docker ps

## 停止容器
docker stop [容器 ID]

容器生命周期管理

容器为应用程序提供了一个隔离的环境,确保在不同的计算环境中具有一致的性能。它们通过将应用程序及其所有必要的依赖项打包,解决了“在我的机器上能运行”的问题。

构建 Docker 镜像

理解 Dockerfile

Dockerfile 是一个文本文件,其中包含组装 Docker 镜像所需的所有命令。它为应用程序打包和容器创建提供了一种系统的方法。

graph LR A[Dockerfile] --> B[Docker 构建] B --> C[Docker 镜像] C --> D[Docker 容器]

Dockerfile 指令集

指令 用途
FROM 指定基础镜像
COPY 将文件复制到镜像中
RUN 在镜像构建期间执行命令
EXPOSE 声明容器的网络端口
CMD 定义容器的默认执行命令

创建一个 Python Web 应用的 Dockerfile

## 使用官方 Python 运行时作为基础镜像
FROM python:3.9-slim

## 设置工作目录
WORKDIR /app

## 复制需求文件
COPY requirements.txt.

## 安装依赖项
RUN pip install --no-cache-dir -r requirements.txt

## 复制应用程序代码
COPY..

## 暴露应用程序端口
EXPOSE 5000

## 定义启动命令
CMD ["python", "app.py"]

构建 Docker 镜像

## 使用标签构建镜像
docker build -t myapp:v1.

## 列出创建的镜像
docker images

## 验证镜像详细信息
docker inspect myapp:v1

镜像优化策略

graph TD A[最小化层数] B[使用 Alpine 镜像] C[利用构建缓存] D[删除不必要的文件]

高级镜像管理

## 为镜像仓库标记镜像
docker tag myapp:v1 username/myapp:v1

## 将镜像推送到 Docker Hub
docker push username/myapp:v1

生产环境中的 Docker

容器编排全景

graph TD A[Docker 容器] --> B[Kubernetes] A --> C[Docker Swarm] A --> D[Nomad]

生产部署策略

策略 描述 可扩展性
单主机 基本部署
群模式 原生 Docker 集群 中等
Kubernetes 高级编排

生产环境中的 Docker 网络

## 创建覆盖网络
docker network create -d overlay production_network

## 使用网络配置部署服务
docker service create \
  --name web-service \
  --network production_network \
  --replicas 3 \
  nginx:latest

容器监控配置

version: "3"
services:
  prometheus:
    image: prom/prometheus
    volumes: -./prometheus.yml:/etc/prometheus/prometheus.yml
    ports:
      - "9090:9090"

  grafana:
    image: grafana/grafana
    ports:
      - "3000:3000"

高可用性配置

graph TD A[负载均衡器] --> B[容器实例 1] A --> C[容器实例 2] A --> D[容器实例 3]

资源管理

## 限制容器资源
docker run -it \
  --cpus=".5" \
  --memory="512m" \
  nginx:latest

安全最佳实践

## 以非 root 用户运行容器
docker run --read-only \
  --tmpfs /tmp \
  --tmpfs /run \
  --security-opt=no-new-privileges:true \
  myapp:latest

持续部署管道

graph LR A[代码提交] --> B[构建镜像] B --> C[运行测试] C --> D[推送到镜像仓库] D --> E[部署到预发布环境] E --> F[生产环境部署]

总结

Docker 通过提供一个强大的容器化平台,彻底改变了软件开发方式,该平台确保了应用程序的可移植性和一致性。通过掌握容器生命周期管理、Dockerfile 创建以及基本的 Docker 命令,专业人员可以优化他们的开发工作流程,降低部署复杂性,并在各种计算环境中创建可扩展、可重现的软件解决方案。