目录

  1. Docker 核心概念
  2. 安装 Docker
  3. Docker 命令详解
  4. Docker 技术原理
  5. Dockerfile 与镜像构建
  6. Docker 网络
  7. Docker Compose
  8. 总结

1. Docker 核心概念

1.1. 容器化技术

  • Docker 使用容器化技术为应用程序封装独立的运行环境
  • 每个运行环境就是一个容器
  • 运行容器的计算机被称为宿主机 (Host Machine)

1.2. Docker 与虚拟机的区别

  • Docker 容器:共用同一个系统内核,更轻更小,启动速度更快
  • 虚拟机:每个虚拟机都包含一个操作系统的完整内核

1.3. 镜像与容器

  • 镜像 (Image):容器的母版,类比为软件安装包或模具
  • 容器 (Container):从镜像创建的运行实例,类比为安装的软件或糕点
  • 一个镜像可以创建多个容器,镜像可以分享给他人使用

1.4. Docker 仓库

  • Docker Hub:官方仓库,存储了大量共享的 Docker 镜像
  • 用户可以上传自己的镜像到仓库,他人可以下载使用

2. 安装 Docker

2.1. Linux 系统安装

  1. 访问 Docker 官网获取安装步骤

  2. 执行官网提供的第一步和第四步命令

  3. 使用 sudo 执行 Docker 命令(如果不是 root 用户)

  4. 配置镜像站解决网络问题:

    # 修改配置文件
    sudo vim /etc/docker/daemon.json
    # 添加镜像站配置
    {
      "registry-mirrors": ["https://registry.docker-cn.com"]
    }
    # 重启 Docker
    sudo systemctl restart docker
    

2.2. Windows 系统安装

  1. 启用 Windows 功能:

    • WSL 2 (Windows Subsystem for Linux)
    • 虚拟机平台
  2. 重启电脑

  3. 安装 WSL:

    wsl --set-default-version 2
    wsl --update
    
  4. 下载 Docker Desktop 并安装

  5. 配置镜像站:在 Docker Desktop 设置中添加镜像地址

2.3. macOS 系统安装

  • 根据芯片类型下载对应的 Docker Desktop 安装包
  • 安装过程简单,一路点击下一步即可

3. Docker 命令详解

3.1. 镜像相关命令

  • docker pull [镜像名]:从仓库下载镜像
    • 镜像名称结构:[registry]/[namespace]/[image]:[tag]
    • 官方镜像可省略 registry 和 namespace
    • 示例:docker pull nginx(下载最新版 Nginx)
  • docker images:列出所有本地镜像
  • docker rmi [镜像ID或名称]:删除镜像

3.2. 容器相关命令

  • docker run [参数] [镜像]:创建并运行容器
    • 重要参数
      • -d:后台运行(分离模式)
      • -p [宿主机端口]:[容器端口]:端口映射
      • -v [宿主机目录]:[容器目录]:目录挂载(绑定挂载)
      • -e [环境变量名]=[值]:设置环境变量
      • --name [名称]:为容器指定名称
      • --restart [策略]:设置重启策略(always/on-failure)
      • -it:交互式终端
      • --rm:容器停止时自动删除
  • docker ps:查看运行中的容器
  • docker ps -a:查看所有容器(包括已停止的)
  • docker stop [容器ID或名称]:停止容器
  • docker start [容器ID或名称]:启动已停止的容器
  • docker rm [容器ID或名称]:删除容器(加 -f 强制删除运行中的容器)
  • docker logs [容器ID或名称]:查看容器日志(加 -f 实时滚动)

3.3. 进入容器内部

  • docker exec -it [容器ID或名称] [命令]:在容器内执行命令
  • 示例:docker exec -it mycontainer bash(进入容器 bash shell)

3.4. 数据持久化:挂载卷 (Volume)

  • 绑定挂载:直接指定宿主机目录
    • 示例:-v /host/path:/container/path
  • 匿名卷挂载:Docker 自动创建存储空间
    • 创建卷:docker volume create [卷名]
    • 使用卷:-v [卷名]:/container/path
    • 查看卷:docker volume ls
    • 删除卷:docker volume rm [卷名]
    • 清理未使用卷:docker volume prune

3.5. 容器信息查看

  • docker inspect [容器ID]:查看容器详细信息(配置、网络、挂载等)
  • 可使用 AI 工具解析复杂的 inspect 输出

4. Docker 技术原理

4.1. Linux 内核功能

  • Cgroups:限制和隔离进程资源使用(CPU、内存、网络等)
  • Namespaces:隔离进程资源视图(进程ID、网络、文件系统等)

4.2. 容器本质

  • 容器本质上是特殊的进程
  • 通过 Namespaces 隔离,使容器内部看起来像独立的操作系统
  • 每个容器都是独立的运行环境

5. Dockerfile 与镜像构建

5.1. Dockerfile 基础

  • Dockerfile 是构建镜像的"图纸"

  • 基本结构:

    FROM [基础镜像]          # 指定基础镜像
    WORKDIR /app           # 设置工作目录
    COPY . .               # 复制文件到镜像
    RUN [命令]             # 执行构建命令
    EXPOSE [端口]          # 声明暴露端口
    CMD ["命令", "参数"]    # 容器启动命令
    

5.2. 镜像构建与推送

  1. 构建镜像:docker build -t [用户名]/[镜像名]:[标签] .
  2. 登录 Docker Hub:docker login
  3. 推送镜像:docker push [用户名]/[镜像名]:[标签]

5.3. 实际示例:Python 应用

FROM python:3.13-slim
WORKDIR /app
COPY . .
RUN pip install -r requirements.txt
EXPOSE 8000
CMD ["python", "main.py"]

6. Docker 网络

6.1. 网络模式

  • Bridge(桥接):默认模式,容器连接到一个内部子网
  • Host:容器直接使用宿主机网络
  • None:容器不连接任何网络

6.2. 自定义网络

  • 创建网络:docker network create [网络名]
  • 容器加入网络:--network [网络名]
  • 同一网络内的容器可以通过容器名互相访问(DNS 机制)
  • 查看网络:docker network ls
  • 删除网络:docker network rm [网络名]

6.3. 多容器通信示例

# 创建网络
docker network create mynetwork

# 启动 MongoDB(不暴露端口到宿主机)
docker run -d --name mongodb --network mynetwork -e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=password mongo

# 启动 Mongo Express(暴露端口,使用容器名访问数据库)
docker run -d --name mongo-express --network mynetwork -p 8081:8081 -e ME_CONFIG_MONGODB_SERVER=mongodb -e ME_CONFIG_MONGODB_ADMINUSERNAME=admin -e ME_CONFIG_MONGODB_ADMINPASSWORD=password mongo-express

7. Docker Compose

7.1. 基本概念

  • 使用 YAML 文件管理多容器应用
  • 简化多容器的创建和网络配置
  • 自动为 compose 文件创建独立网络

7.2. Compose 文件示例

version: '3'
services:
  mongodb:
    image: mongo
    environment:
      MONGO_INITDB_ROOT_USERNAME: admin
      MONGO_INITDB_ROOT_PASSWORD: password
    networks:
      - mynetwork

  mongo-express:
    image: mongo-express
    ports:
      - "8081:8081"
    environment:
      ME_CONFIG_MONGODB_SERVER: mongodb
      ME_CONFIG_MONGODB_ADMINUSERNAME: admin
      ME_CONFIG_MONGODB_ADMINPASSWORD: password
    depends_on:
      - mongodb
    networks:
      - mynetwork

networks:
  mynetwork:
    driver: bridge

7.3. Compose 命令

  • docker-compose up:启动所有服务(加 -d 后台运行)
  • docker-compose down:停止并删除所有容器
  • docker-compose stop:停止服务(不删除容器)
  • docker-compose start:启动已停止的服务
  • docker-compose -f [文件名]:指定非标准文件名

8. 总结

8.1. 核心要点

  • Docker 通过容器化技术提供独立的运行环境
  • 镜像-容器关系类似于模具-糕点的关系
  • 使用挂载卷实现数据持久化
  • 通过端口映射和网络配置实现容器通信

8.2. 适用场景

  • 个人开发环境隔离
  • 微服务架构部署
  • 持续集成/持续部署(CI/CD)
  • 多环境应用部署(开发、测试、生产)

8.3. 进阶学习

  • Docker Swarm:原生集群管理
  • Kubernetes:企业级容器编排
  • 容器安全最佳实践
  • 性能监控和优化

该笔记是通过使用AI工作流所生成 关于一些可能更详细的Docker教程 菜鸟教程