Docker 实战全指南:从零到精通
这是一篇为您精心准备的 Docker 实战指南。它不仅仅是命令的堆砌,而是按照全生命周期(从获取镜像、运行容器、数据持久化、到构建自己的镜像)编写的深度教程。
Docker 实战全指南:从零到精通
本文将通过一个完整的流程,带你掌握 Docker 的核心操作。我们将以最常用的 Web 服务器 Nginx 和一个自定义的 Python 应用为例。
第一部分:核心概念速记
在敲代码前,请死记这三个概念的关系:
- 镜像 (Image):类的定义(Class),或者说是“光盘/安装包”。它是只读的。
- 容器 (Container):类的实例(Object),或者说是“运行中的程序”。它是可读写的。
- 仓库 (Repository):存放镜像的地方(比如 Docker Hub),类似 GitHub。
第二部分:镜像管理 (Image)
一切从获取镜像开始。
1. 拉取镜像
从 Docker Hub 下载 Nginx 镜像。
# 语法: docker pull [镜像名]:[标签]
# 如果不写标签,默认是 latest
docker pull nginx:latest
2. 查看本地镜像
docker images
# 输出示例:
# REPOSITORY TAG IMAGE ID CREATED SIZE
# nginx latest 605c77e624dd 2 weeks ago 141MB
3. 删除镜像
# 删除不再需要的镜像(必须先删除使用该镜像的容器)
docker rmi nginx:latest
第三部分:容器操作 (Container) —— 核心中的核心
这是你日常工作最频繁的部分。
1. 启动容器 (Run)
这是最长、参数最复杂的命令。我们来拆解运行一个 Nginx 容器:
docker run -d \
--name my-nginx-server \
-p 8080:80 \
-v $(pwd)/html:/usr/share/nginx/html \
nginx:latest
详细参数解析(背下来):
docker run: 创建并启动一个新容器。-d(Detached): 后台运行。如果不加,容器日志会霸占你的终端。--name: 给容器起个名字(my-nginx-server),否则 Docker 会随机生成一个怪名字。-p 8080:80(Port): 端口映射。- 左边
8080:宿主机(你的电脑)的端口。 - 右边
80:容器内部的端口(Nginx 默认监听 80)。 - 效果:访问你电脑的
localhost:8080,流量会被转发到容器里的80端口。
- 左边
-v(Volume): 挂载数据卷(下文详细讲)。nginx:latest: 指定使用的镜像。
2. 查看运行中的容器
docker ps
# 如果要查看包括已停止的所有容器:
docker ps -a
3. 停止与启动
# 停止容器
docker stop my-nginx-server
# 再次启动
docker start my-nginx-server
# 重启(常用于修改配置后)
docker restart my-nginx-server
4. 进入容器内部
有时候你需要进容器里改配置文件或查看情况,这相当于 SSH 进了一台微型 Linux。
# -it 代表交互式终端
# /bin/bash 是你想在容器里执行的命令(如果没有 bash,尝试 /bin/sh)
docker exec -it my-nginx-server /bin/bash
# 进入后,你可以执行 ls, cat 等命令
# 输入 exit 退出容器
5. 查看容器日志
容器后台运行时,如何看报错?
# 查看最后20行日志
docker logs --tail 20 my-nginx-server
# -f (follow): 实时滚动查看日志(类似 tail -f)
docker logs -f my-nginx-server
6. 删除容器
# 必须先 stop 才能 rm,或者加 -f 强制删除
docker rm -f my-nginx-server
第四部分:数据持久化 (Volume)
痛点:容器一旦删除,里面的文件(比如数据库数据、日志)就全没了。
解决:使用挂载(Volume),把容器里的目录“映射”到你宿主机的硬盘上。
方式一:Bind Mount (指定路径挂载)
最适合开发环境,因为你可以直接在宿主机修改代码,容器内立即生效。
# 假设当前目录下有一个 index.html 文件
echo "<h1>Hello Docker</h1>" > index.html
# 运行并将当前目录挂载到 Nginx 的默认网页目录
docker run -d -p 8081:80 \
-v $(pwd):/usr/share/nginx/html \
nginx
此时访问 localhost:8081,你会看到 “Hello Docker”。如果你在宿主机修改 index.html,刷新浏览器内容也会变。
方式二:Docker Volume (托管卷)
最适合生产环境或数据库,由 Docker 自动管理存储位置。
# 创建一个卷
docker volume create my-db-data
# 挂载这个卷
docker run -d \
-v my-db-data:/var/lib/mysql \
mysql:5.7
第五部分:构建自己的镜像 (Dockerfile)
光用别人的镜像是不够的,你需要打包自己的代码。我们以一个简单的 Python Flask 应用为例。
1. 准备文件
新建一个文件夹,包含以下三个文件:
文件 1: app.py (业务代码)
from flask import Flask
import os
app = Flask(__name__)
@app.route('/')
def hello():
return f"Hello from Docker! Hostname: {os.getenv('HOSTNAME')}"
if __name__ == "__main__":
app.run(host='0.0.0.0', port=5000)
文件 2: requirements.txt (依赖库)
flask
文件 3: Dockerfile (构建蓝图)
这是核心,请仔细阅读每一行的注释。
# 1. 基础镜像:基于官方 Python 3.9 轻量版
FROM python:3.9-slim
# 2. 设置工作目录:容器内的操作都在 /app 下进行
WORKDIR /app
# 3. 复制依赖文件:先只复制 requirements.txt,利用缓存机制
COPY requirements.txt .
# 4. 安装依赖:在容器内执行 pip install
# --no-cache-dir 可以减小镜像体积
RUN pip install --no-cache-dir -r requirements.txt
# 5. 复制源代码:将当前目录所有文件复制到容器的 /app
COPY . .
# 6. 暴露端口:声明容器会使用 5000 端口(仅做文档声明用)
EXPOSE 5000
# 7. 启动命令:容器启动时默认执行的命令
CMD ["python", "app.py"]
2. 构建镜像 (Build)
# -t 给镜像起个名字 (my-flask-app) 和标签 (v1)
# 最后的 . 代表 Dockerfile 在当前目录
docker build -t my-flask-app:v1 .
3. 运行你的镜像
docker run -d -p 5000:5000 my-flask-app:v1
访问 localhost:5000,你就能看到你的 Python 应用在 Docker 里跑起来了!
第六部分:Docker Compose (编排)
当你同时需要 Python 后端 + Redis 缓存 + MySQL 数据库时,手动敲三个 docker run 命令太累了。
我们需要 docker-compose.yml 来一次性管理它们。
文件: docker-compose.yml
version: '3.8' # 格式版本
services:
# 服务 1: 我们的 Web 应用
web:
build: . # 直接使用当前目录的 Dockerfile 构建
ports:
- "5000:5000"
volumes:
- .:/app # 代码热更新挂载
depends_on:
- redis
environment:
- REDIS_HOST=redis
# 服务 2: Redis 数据库
redis:
image: "redis:alpine"
ports:
- "6379:6379"
常用命令:
# 1. 启动所有服务(后台运行)
docker-compose up -d
# 2. 查看 Compose 管理的容器状态
docker-compose ps
# 3. 查看所有服务的汇总日志
docker-compose logs -f
# 4. 停止并删除所有容器、网络
docker-compose down
第七部分:清理战场 (Cleanup)
Docker 用久了会产生很多垃圾(停止的容器、未使用的镜像、缓存)。
# 慎用!这会删除所有停止的容器、未被使用的网络和悬空的镜像
docker system prune
# 如果要更彻底(包括未被使用的镜像和数据卷)
docker system prune -a --volumes
总结:Docker 极简口诀
- 找镜像:
docker pull - 跑容器:
docker run -d -p <宿主机端口>:<容器端口> --name <名字> <镜像> - 看状态:
docker ps - 看日志:
docker logs -f <名字> - 进容器:
docker exec -it <名字> /bin/bash - 停容器:
docker stop <名字> - 删容器:
docker rm <名字> - 造镜像:
docker build -t <名字> . - 一键跑:
docker-compose up -d
更多推荐




所有评论(0)