目录
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 系统安装
访问 Docker 官网获取安装步骤
执行官网提供的第一步和第四步命令
使用
sudo执行 Docker 命令(如果不是 root 用户)配置镜像站解决网络问题:
# 修改配置文件 sudo vim /etc/docker/daemon.json # 添加镜像站配置 { "registry-mirrors": ["https://registry.docker-cn.com"] } # 重启 Docker sudo systemctl restart docker
2.2. Windows 系统安装
启用 Windows 功能:
- WSL 2 (Windows Subsystem for Linux)
- 虚拟机平台
重启电脑
安装 WSL:
wsl --set-default-version 2 wsl --update下载 Docker Desktop 并安装
配置镜像站:在 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. 镜像构建与推送
- 构建镜像:
docker build -t [用户名]/[镜像名]:[标签] . - 登录 Docker Hub:
docker login - 推送镜像:
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教程 菜鸟教程
评论