如何从零开始创建 Docker 容器

DockerDockerBeginner
立即练习

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

简介

本教程提供了一份关于使用 Docker Compose 的全面指南,重点解决“docker: 'compose' 不是一个 docker 命令”错误。你将学习如何安装和配置 Docker Compose,构建和管理多容器应用程序,并探索有效使用 Docker Compose 的最佳实践。

Docker 基础

Docker 容器化简介

Docker 是一项强大的容器技术,它彻底改变了应用程序的部署和开发方式。容器技术使开发者能够将应用程序及其所有依赖项打包在一起,确保在不同的计算环境中都能保持一致的性能。

Docker 的核心概念

什么是 Docker?

Docker 是一个用于容器化的开源平台,它允许开发者自动化应用程序的部署、扩展和管理。通过创建称为容器的隔离环境,它为传统虚拟机提供了一种轻量级的替代方案。

Docker 的关键组件

组件 描述
Docker 引擎 创建和运行容器的核心运行时环境
Docker 镜像 包含应用程序代码和依赖项的只读模板
Docker 容器 Docker 镜像的可运行实例
Dockerfile 定义容器构建指令的文本文件

Docker 架构

graph TD A[Docker 客户端] --> B[Docker 守护进程] B --> C[容器运行时] B --> D[镜像仓库] D --> E[Docker Hub]

基本的 Docker 命令及示例

在 Ubuntu 22.04 上安装 Docker

## 更新系统软件包
sudo apt update

## 安装 Docker 依赖项
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

## 设置 Docker 仓库
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 Hub 拉取镜像

## 列出可用镜像

## 运行容器

## 列出正在运行的容器

## 停止容器

容器技术的优势

Docker 容器化具有以下几个优点:

  • 一致的应用程序环境
  • 更快的部署和扩展
  • 减少资源消耗
  • 改进开发工作流程
  • 平台独立性

Docker 容器的使用场景

Docker 广泛应用于:

  • 微服务架构
  • 持续集成/持续部署(CI/CD)
  • 云原生应用开发
  • 开发和测试环境

Docker Compose 工作流程

理解 Docker Compose

Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。它允许开发者使用 YAML 文件来配置应用程序服务、网络和卷,简化了管理复杂容器化环境的过程。

Docker Compose 架构

graph TD A[Docker Compose] --> B[docker-compose.yml] B --> C[服务 1] B --> D[服务 2] B --> E[服务 3] C --> F[网络] D --> F E --> F

Docker Compose 配置

YAML 文件结构

描述
version Compose 文件格式版本
services 定义各个容器
networks 配置容器网络
volumes 管理持久数据存储

实际示例:Web 应用程序部署

示例 docker-compose.yml

version: "3.8"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes: -./website:/usr/share/nginx/html
  database:
    image: postgres:13
    environment:
      POSTGRES_PASSWORD: secretpassword
    volumes:
      - postgres_data:/var/lib/postgresql/data

volumes:
  postgres_data:

Docker Compose 命令

## 在 Ubuntu 22.04 上安装 Docker Compose
sudo apt update
sudo apt install docker-compose

## 验证 compose 文件
docker-compose config

## 启动多容器应用程序
docker-compose up -d

## 查看正在运行的容器
docker-compose ps

## 停止并移除容器
docker-compose down

服务编排技术

Docker Compose 支持高级服务编排:

  • 定义容器间依赖关系
  • 管理环境变量
  • 配置网络连接
  • 控制容器启动顺序

可扩展性和灵活性

多容器应用程序受益于:

  • 模块化架构
  • 轻松水平扩展
  • 简化配置管理
  • 一致的开发环境

高级 Docker 技术

Docker 网络配置

网络类型

网络模式 描述
桥接(Bridge) 默认网络模式
主机(Host) 直接使用主机网络
覆盖(Overlay) 多主机通信
Macvlan 分配 MAC 地址
graph TD A[Docker 网络] --> B[桥接网络] A --> C[主机网络] A --> D[覆盖网络] A --> E[Macvlan 网络]

创建自定义网络

## 创建自定义桥接网络
docker network create --driver bridge custom_network

## 列出网络
docker network ls

## 检查网络详细信息
docker network inspect custom_network

容器资源管理

资源限制

services:
  webapp:
    image: nginx
    deploy:
      resources:
        limits:
          cpus: "0.50"
          memory: 512M
        reservations:
          cpus: "0.25"
          memory: 256M

Docker 卷管理

## 创建命名卷
docker volume create app_data

## 将卷挂载到容器
docker run -v app_data:/app/data nginx

## 列出卷
docker volume ls

## 删除未使用的卷
docker volume prune

Dockerfile 优化

## 多阶段构建示例
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
ENTRYPOINT ["myapp"]

高级故障排除

## 检查容器日志

## 实时资源监控

## 查看容器进程详细信息

安全增强

运行时安全选项

## 以只读文件系统运行容器
docker run --read-only nginx

## 限制容器能力
docker run --cap-drop ALL --cap-add NET_BIND_SERVICE nginx

性能监控

## 查看系统范围的 Docker 信息
docker system info

## 磁盘使用情况分析
docker system df

## 删除未使用的资源
docker system prune -a

总结

在本教程结束时,你将对 Docker Compose 以及如何解决“docker: 'compose' 不是一个 docker 命令”错误有深入的理解。你将能够充满信心地设置、管理和扩展你的 Docker Compose 应用程序,并遵循行业标准的最佳实践来实现最佳性能和可维护性。