
前言“Docker?我知道,就是容器嘛。”这句话我听过无数次。但真到用的时候,很多人发现:docker run是跑起来了,但多容器怎么协作?数据怎么持久化?线上怎么部署?日志怎么看?一遇到实际问题就卡住了。这篇文章的目标是:让你读完就能把一个完整的Web应用用Docker跑起来,并且知道线上怎么部署。一、为什么要用Docker在Docker出现之前,最经典的对话:开发者:"我本地跑得好好的啊!" 运维:"服务器上就是不行。"原因无他——环境不一致。你的Windows上Python是3.11,服务器上是3.8;你装了某个系统库忘了说,服务器上没有。Docker把"整个环境"打包成一个镜像。你在本地跑通了,镜像丢到服务器上,结果完全一样。二、核心概念(只需理解三个)1. 镜像(Image)镜像是一个只读的模板,包含了运行应用所需的一切:代码、运行时、系统库、环境变量。# 拉取一个Python 3.11的镜像 docker pull python:3.11-slim # 查看本地已有镜像 docker images2. 容器(Container)容器是镜像的运行实例。你可以把镜像理解成一个类,容器就是这个类的实例。# 从镜像启动一个容器 docker run python:3.11-slim python --version # 查看运行中的容器 docker ps # 查看所有容器(包括已停止的) docker ps -a3. DockerfileDockerfile是一个文本文件,描述了如何构建镜像。它是Docker的核心。# 从哪开始 FROM python:3.11-slim # 设置工作目录 WORKDIR /app # 安装依赖(先复制依赖文件,再安装——利用缓存加速构建) COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt # 复制源代码 COPY . . # 容器启动时的命令 CMD ["python", "app.py"]三、实战:Docker化一个Flask应用第一步:准备应用创建一个简单的Flask应用app.py:from flask import Flask, json