Docker 万字教程:从入门到掌握
来源:Datawhale干货
作者:杨世超,Datawhale成员
目录
1. Docker 核心介绍
1.1 什么是 Docker
Docker 是一款开源应用容器引擎,可将应用 + 依赖 + 环境配置统一打包为轻量化容器,实现一次构建、处处运行。
传统部署痛点
- 本地正常、测试/生产环境报错,环境不一致
- 手动安装配置环境,流程繁琐、极易出错
- 多项目依赖冲突,服务器环境难以统一
Docker 四大核心优势
- 轻量高效:共享宿主机内核,秒级启动,资源占用极低
- 跨平台移植:一次打包,Linux/Windows/Mac/云服务器通用
- 环境强隔离:独立文件系统、网络、进程,杜绝依赖冲突
- 标准化交付:统一构建、分发、部署流程,适配 DevOps
架构模式
Docker 采用 C/S 架构:
- 客户端:接收用户指令
- 守护进程(Daemon):后台执行容器/镜像操作
- 通信方式:UNIX 套接字 / REST API
1.2 Docker 四大核心概念
| 核心概念 | 作用说明 |
| —- | —- |
| 镜像 Image | 只读模板,创建容器的基础,包含运行环境与程序 |
| 容器 Container | 镜像运行实例,独立隔离的运行环境,可读写 |
| Dockerfile | 镜像构建脚本,自动化定制镜像 |
| 镜像仓库 | 镜像集中存储分发中心(公共:Docker Hub / 私有:Registry) |
运行流程
- 编写 Dockerfile → 构建自定义镜像
- 镜像推送至公共/私有仓库
- 任意服务器拉取镜像 → 快速启动容器
1.3 Docker 与 虚拟机 区别
| 对比项 | Docker 容器 | 传统虚拟机 |
|---|---|---|
| —- | —- | —- |
| 底层依赖 | 共享宿主机内核 | 独立完整操作系统 |
| 启动速度 | 秒级启动 | 分钟级启动 |
| 资源占用 | 极低,轻量化 | 占用内存/磁盘极高 |
| 隔离级别 | 进程级隔离 | 系统级强隔离 |
| 适用场景 | 微服务、项目部署、开发环境 | 异构系统、高安全隔离需求 |
2. 全平台安装教程
2.1 CentOS 安装 Docker
① 卸载旧版本
sudo dnf remove docker \
docker-client \
docker-common \
docker-logrotate \
docker-engine
② 安装依赖工具
sudo yum install -y yum-utils
③ 配置阿里云国内源
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
④ 安装完整组件
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
⑤ 启动服务 & 开机自启
sudo systemctl enable docker
sudo systemctl start docker
docker --version
2.2 macOS 安装 Docker
仅需安装官方 Docker Desktop,内置引擎、CLI、图形化面板。
方式1:Homebrew 一键安装
brew install --cask docker
方式2:手动安装
- 官网下载对应芯片(Intel/ARM)安装包
- 拖拽至应用目录,授权启动
- 终端执行
docker --version验证
2.3 Windows 安装 Docker
注意:
- 支持:Win10/Win11 64位 专业版/企业版
- 家庭版需手动开启 Hyper-V & WSL2
- 下载安装 Docker Desktop
- 安装勾选:WSL2、虚拟化组件
- 启动软件,托盘鲸鱼图标即为运行成功
- CMD/PowerShell 执行
docker --version验证
3. Docker 基础使用
3.1 配置国内镜像加速
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://dockerproxy.com",
"https://docker.mirrors.ustc.edu.cn",
"https://docker.nju.edu.cn"
]
}
EOF
生效配置:
sudo systemctl daemon-reload
sudo systemctl restart docker
3.2 Docker 服务管理命令
systemctl start docker
systemctl stop docker
systemctl restart docker
systemctl enable docker
systemctl status docker
3.3 镜像操作大全
登录仓库
docker login
拉取镜像
docker pull nginx
docker pull nginx:1.23
镜像标签 & 推送
docker tag nginx:latest my-nginx:v1
docker push 用户名/镜像名:版本
查看镜像
docker images
docker inspect nginx
docker history nginx
docker search mysql
镜像导入/导出
docker save -o nginx.tar nginx:latest
docker load -i nginx.tar
镜像清理删除
docker rmi nginx
docker image prune
docker image prune -a
docker system df
3.4 容器操作大全
核心 run 参数
| 参数 | 作用 |
| —- | —- |
| -d | 后台守护运行 |
| -p 主机:容器 | 端口映射 |
| --name | 自定义容器名称 |
| -it | 交互式终端 |
| -v | 目录数据挂载 |
| --restart always | 开机自动重启 |
启动容器示例
docker run -d -p 80:80 --name nginx-container nginx
容器启停管理
docker start 容器名/ID
docker stop 容器名/ID
docker rm 容器名/ID
docker rm -f 容器名/ID
查看容器信息
docker ps
docker ps -a
docker logs -f 容器名
docker stats
docker inspect 容器名
进入容器内部
docker exec -it nginx-container /bin/bash
容器导入导出
docker export -o 容器.tar 容器名
docker import 容器.tar 自定义镜像:v1
3.5 私有镜像仓库搭建
① 快速部署 Registry
docker pull registry:2
docker run -d \
-p 5000:5000 \
--name my-registry \
-v /data/registry:/var/lib/registry \
registry:2
② 私有仓库使用
docker tag nginx localhost:5000/nginx
docker push localhost:5000/nginx
docker pull localhost:5000/nginx
curl http://localhost:5000/v2/_catalog
③ 远程访问配置
{
"insecure-registries": ["服务器IP:5000"]
}
重启 Docker 生效:
systemctl restart docker
4. Dockerfile 镜像构建
4.1 基础入门示例
FROM nginx:latest
RUN echo '<h1>Custom Nginx Page</h1>' > /usr/share/nginx/html/index.html
EXPOSE 80
构建 & 运行:
docker build -t my-web:v1 .
docker run -d -p 80:80 my-web:v1
4.2 Dockerfile 常用指令
| 指令 | 功能描述 |
|---|---|
| —- | —- |
FROM |
指定基础镜像,必须为第一行 |
RUN |
构建阶段执行命令 |
COPY |
复制本地文件至镜像 |
ADD |
复制+解压+远程文件下载 |
WORKDIR |
设置工作目录 |
ENV |
配置环境变量 |
EXPOSE |
声明容器监听端口 |
CMD |
容器启动默认命令(可覆盖) |
ENTRYPOINT |
容器固定启动命令(不可覆盖) |
VOLUME |
声明数据持久化挂载卷 |
HEALTHCHECK |
容器健康状态检测 |
4.3 企业级实战 Dockerfile
Python Flask 项目
FROM python:3.9-slim
WORKDIR /app
COPY . .
RUN pip install --no-cache-dir -r requirements.txt
EXPOSE 5000
ENV FLASK_ENV=production
CMD ["flask", "run", "--host=0.0.0.0"]
Node.js 项目
FROM node:16-alpine
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
EXPOSE 3000
CMD ["npm", "start"]
Nginx 静态网站
FROM nginx:alpine
RUN rm -rf /etc/nginx/conf.d/default.conf
COPY nginx.conf /etc/nginx/conf.d/
COPY dist/ /usr/share/nginx/html/
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
5. Docker Compose 容器编排
5.1 简介
Docker Compose 是多容器编排工具,通过 YAML 配置文件,一条命令管理多个关联容器,统一启停、网络、依赖。
5.2 Linux 手动安装
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
Mac / Windows Docker Desktop 自带 Compose,无需额外安装
5.3 标准 YAML 结构
version: '3.8'
services:
服务名:
image: 镜像
ports:
- "主机端口:容器端口"
volumes:
- 本地目录:容器目录
environment:
- KEY=VALUE
depends_on:
- 依赖服务
networks:
volumes:
5.4 实战:WordPress 完整编排
version: '3.8'
services:
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: wordpress
networks:
- backend
wordpress:
image: wordpress:latest
ports:
- "80:80"
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: root
WORDPRESS_DB_PASSWORD: password
depends_on:
- db
networks:
- frontend
- backend
networks:
frontend:
backend:
volumes:
db_data:
5.5 Compose 核心命令
docker-compose up -d
docker-compose down
docker-compose logs -f
docker-compose build
docker-compose restart
6. 高频核心命令大全
6.1 服务命令
systemctl start docker
systemctl stop docker
systemctl restart docker
systemctl enable docker
systemctl status docker
6.2 镜像命令
docker images # 查看本地镜像
docker pull 镜像名:标签 # 拉取镜像
docker search 镜像名 # 搜索公共镜像
docker build -t 镜像名:版本 . # 构建自定义镜像
docker rmi 镜像ID/名称 # 删除镜像
docker save -o 压缩包 镜像 # 导出镜像
docker load -i 压缩包 # 导入镜像
docker system prune -a # 全局清理未使用资源
6.3 容器命令
docker run [参数] 镜像 # 创建并启动容器
docker ps # 查看运行中容器
docker ps -a # 查看所有容器(含停止)
docker start 容器ID/名称 # 启动已停止容器
docker stop 容器ID/名称 # 停止运行中容器
docker rm 容器ID/名称 # 删除已停止容器
docker exec -it 容器 /bin/bash # 进入容器内部
docker logs -f 容器名 # 实时查看容器日志
docker stats # 监控容器资源占用
---
### ✅ 正确发布操作步骤(100%成功)
1. **清空编辑器**:把博客编辑器里的所有内容全部删除,确保是空白状态
2. **切换模式**:切换到「纯文本/代码编辑器」模式(WordPress 古腾堡右上角 → 代码编辑器,绝对不要用可视化模式)
3. **复制内容**:全选上面的完整内容(**只复制从`# Docker 万字教程`到最后一行的内容,绝对不要复制任何外层符号**)
4. **粘贴内容**:直接粘贴到空白的编辑器中,**不要做任何修改**
5. **检查渲染**:切换回可视化模式,检查所有标题、代码块、表格、列表是否正常渲染
6. **发布文章**:确认无误后,直接发布
### ⚠️ 终极避坑清单(发布前必查)
1. ✅ **无外层大代码块**:整篇文章是纯Markdown,没有被`
markdown 包裹,代码块只包裹代码,不包裹正文
- ✅ 代码块格式正确:每个代码块都有独立的
`开头和`结尾,单独顶格一行,无缩进、无多余字符 - ✅ 反引号为英文:所有反引号都是键盘左上角~
键的英文,不是中文`、单引号’ - ✅ 用代码编辑器编辑:全程用代码编辑器模式,禁用可视化模式,避免MD语法被自动转义
- ✅ 发布前预览:发布前一定要预览,确认所有元素正常渲染,无正文混入代码框
💡 WordPress 专属优化
- 用「代码块」组件插入代码,不要写在段落块里
- 全程用代码编辑器编辑,避免可视化模式转义MD语法
- 代码高亮插件和原生MD代码块二选一使用,避免冲突
- 发布前在「自定义HTML」块中粘贴代码,确保格式正确
这份文档100%兼容所有博客平台(WordPress、CSDN、掘金、自建博客等),直接复制粘贴即可完美渲染。

评论(0)
暂无评论