Docker 教程(保姆级教程)

什么是 Docker?为什么它改变了开发方式

在写代码的时候,你有没有遇到过这样的情况:
在本地运行得好好的项目,一放到服务器上就“爆红”?
错误信息五花八门:找不到某个库、版本不匹配、端口被占用……
这其实是“环境不一致”惹的祸。
而 Docker,就是为了解决这个问题而生的。

你可以把 Docker 想象成一个“虚拟的集装箱”——
它不只是装代码,而是把整个运行环境(操作系统、依赖库、配置文件、启动命令)全都打包进去。
无论你把它放到哪台机器上,只要这台机器装了 Docker,它就能原封不动地运行起来。

这种“一次构建,到处运行”的能力,正是现代开发流程的核心。
无论是前端、后端、数据科学,还是 DevOps,Docker 都是绕不开的工具。

所以,今天我们就来手把手带你完成一次完整的 Docker 教程,从安装到部署,全程实战,不讲废话。


安装 Docker:迈出第一步

在开始之前,你需要先安装 Docker。
它支持 Windows、macOS 和 Linux,安装过程非常简单。

在 macOS 上安装

打开终端(Terminal),执行以下命令:

brew install --cask docker

安装完成后,打开 Docker Desktop,等待它启动。
你会看到一个鲸鱼图标出现在菜单栏,表示服务已就绪。

在 Windows 上安装

下载并安装 Docker Desktop for Windows
安装时请确保启用 WSL2(Windows Subsystem for Linux 2),这是 Docker 在 Windows 上高效运行的关键。

在 Linux 上安装(以 Ubuntu 为例)

sudo apt update

sudo apt install -y apt-transport-https ca-certificates curl software-properties-common

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io

sudo usermod -aG docker $USER

📌 注意:添加用户组后,需要重启终端或重新登录才能生效。

安装完成后,验证是否成功:

docker --version

如果输出类似 Docker version 24.0.6, build 28a7c31,说明安装成功!


Docker 核心概念:镜像、容器、仓库

理解这三个核心概念,是掌握 Docker 教程的关键。

镜像(Image)—— 代码的“模板”

镜像就像是一个“模板”或“快照”。
比如你有一个 Python 3.10 的环境,里面装了 Flask 框架,那么这个完整环境就是一张镜像。

你可以把它想象成一个“系统安装盘”——它本身不会运行,但能用来创建运行实例。

容器(Container)—— 镜像的“实例”

容器是镜像运行时的实例。
就像你从 U 盘复制系统到电脑,启动后就变成一个正在运行的系统。
容器就是运行中的镜像。

你可以同时运行多个相同镜像的容器,它们彼此隔离,互不影响。

仓库(Repository)—— 镜像的“存储库”

仓库是存放镜像的地方。
Docker Hub 就是最著名的公共仓库,就像 GitHub 之于代码。
你可以上传自己的镜像,也可以下载别人分享的镜像。


第一个 Docker 项目:用 Flask 搭建一个 Web 服务

现在我们来做一个真实的项目:用 Python + Flask 写一个“Hello, World!”网页服务,并用 Docker 打包它。

创建项目文件结构

mkdir flask-docker-demo
cd flask-docker-demo
touch app.py Dockerfile

编写 Flask 应用代码

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
    return '<h1>Hello, Docker!</h1>'

if __name__ == '__main__':
    # 监听所有网络接口的 5000 端口
    app.run(host='0.0.0.0', port=5000)

编写 Dockerfile

Dockerfile 是告诉 Docker 如何构建镜像的“说明书”。

FROM python:3.10-slim

WORKDIR /app

COPY requirements.txt .

RUN pip install -r requirements.txt

COPY app.py .

EXPOSE 5000

CMD ["python", "app.py"]

✅ 注释说明:

  • FROM 指定基础镜像,这里是 Python 官方镜像。
  • WORKDIR 设置容器内工作目录,便于后续操作。
  • COPY 将本地文件复制到容器中,注意顺序。
  • RUN 在构建阶段执行命令,这里安装依赖。
  • EXPOSE 声明端口,但不实际开放,需运行时指定。
  • CMD 定义容器启动后默认运行的命令。

构建镜像

在项目根目录执行:

docker build -t flask-app:v1.0 .

📌 -t 表示 tag,用来给镜像命名和版本标记。
. 表示 Dockerfile 在当前目录。

构建成功后,用以下命令查看本地镜像:

docker images

你会看到类似输出:

REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
flask-app     v1.0      abc123def456   2 minutes ago   110MB

运行容器并访问服务

现在我们用刚才构建的镜像启动一个容器。

docker run -d -p 8000:5000 --name my-flask-app flask-app:v1.0

✅ 命令解释:

  • -d:后台运行(detached 模式)
  • -p 8000:5000:将宿主机的 8000 端口映射到容器的 5000 端口
  • --name my-flask-app:给容器起个名字,方便管理
  • flask-app:v1.0:使用的镜像

打开浏览器,访问 http://localhost:8000,你应该能看到:

Hello, Docker!

🎉 成功了!你的第一个 Docker 应用上线了!


管理容器:查看、停止、删除

Docker 不只是运行,还支持灵活管理。

查看正在运行的容器

docker ps

输出示例:

CONTAINER ID   IMAGE           COMMAND                  CREATED         STATUS         PORTS                    NAMES
abc123def456   flask-app:v1.0  "python app.py"          2 minutes ago     Up 2 minutes     0.0.0.0:8000->5000/tcp   my-flask-app

查看所有容器(包括已停止的)

docker ps -a

停止容器

docker stop my-flask-app

删除容器

docker rm my-flask-app

删除镜像

docker rmi flask-app:v1.0

⚠️ 注意:删除镜像前,必须先删除使用它的容器。


Docker Compose:多容器应用的“指挥官”

当你的项目需要多个服务(比如前端 + 后端 + 数据库)时,一个一个运行容器太麻烦。
这时候,Docker Compose 就派上用场了。

创建 docker-compose.yml 文件:

version: '3.8'

services:
  web:
    build: .
    ports:
      - "8000:5000"
    restart: unless-stopped

  # 可选:添加一个 Redis 服务(用于缓存)
  redis:
    image: redis:7-alpine
    restart: unless-stopped

然后运行:

docker-compose up -d

这会自动构建镜像(如果需要)、启动 web 和 redis 两个服务,全部在后台运行。

💡 优势:一键启动多个服务,配置集中管理,适合开发和测试环境。


结语:Docker 教程的终点,是起点

今天我们完成了从零开始的 Docker 教程:
从安装、核心概念,到实战项目部署,再到容器管理和多服务编排。
你已经掌握了现代开发中不可或缺的一环。

Docker 不只是工具,它是一种思维——
“环境即代码”,把运行环境也纳入版本控制,让协作更高效,部署更可靠。

无论你是前端、后端,还是运维,Docker 都值得你投入时间去掌握。
别再为“在我机器上能跑”而烦恼了,用 Docker,让代码“哪里都能跑”。

现在,就动手试试吧。
你的第一个 Docker 项目,可能就在今天诞生。