从零开始玩转 Docker:一份能直接上手的开发实操教程,告别环境折腾

为什么你的开发环境总在“坑”里?

💡 推荐阅读:云服务器推荐前,先搞懂这4个“坑”!附保姆级选购与排错指南

相信不少朋友都有过这样的经历:代码在本地跑得好好的,一到同事电脑上就报错;或者新买一台电脑,光是配置 JDK、Node、Python 环境就得折腾一下午。这种“水土不服”的痛点,根源就在于应用运行环境的不一致。

而 Docker 的出现,正是为了解决这个问题。它就像一个集装箱,把你的代码和它需要的所有依赖(系统库、运行时、配置文件)打包在一起,无论搬到哪台机器上,都能保证环境完全一致。今天,站长就带大家从零开始,手把手写一份能直接落地的 Docker 开发实操教程,让你彻底告别“环境地狱”。

动手前的准备:这些前置条件你得有

🔥 【限时特惠福利】高性价比独享云服务器限时 1 折起

搭建网站或部署容器推荐选择高稳定性独享云服务器。限时特惠通道开放中,点击即可领取专属满减代金券与特惠折扣:

👉 立刻领取云服务器限时优惠券

💡 延伸阅读:Linux 服务器安全上云实操指南:从裸奔到堡垒机的进阶之路

在开始敲命令之前,我们需要确认两件事:硬件软件

  • 操作系统:Windows 10/11 专业版(建议开启 WSL2)、macOS 或任意主流 Linux 发行版(如 Ubuntu 22.04)。
  • 云服务器(可选但强烈推荐):如果你打算部署到公网,或者本地配置较低(内存小于 8G),站长建议你购买一台 2核4G 以上的云服务器。毕竟 Docker 本身比较吃内存,本地跑太吃力会影响开发效率。选择靠谱的云厂商,按量付费或包年都行,这是性价比最高的投入。
  • 安装 Docker:请前往 Docker 官网下载对应平台的 Docker Desktop。安装完成后,打开终端(Terminal)验证一下:
docker --version
# 输出示例:Docker version 24.0.7, build afdd53b

看到版本号,说明 Docker 已经成功安装。如果你在 Linux 服务器上,记得将当前用户加入 docker 组,避免每次都要 sudo:

sudo usermod -aG docker $USER
# 执行后需重新登录终端生效

核心实操:从零构建你的第一个镜像

💡 深度技术指南:Nginx反向代理配置参数深度拆解:从入门到生产级调优的完整SOP

环境准备好了,我们直接进入正题。这里我们不搞复杂的业务,而是从一个最简单的 Python Flask 应用入手,走一遍完整的 “编写代码 -> 编写 Dockerfile -> 构建镜像 -> 运行容器” 流程。

第一步:创建项目文件

新建一个名为 my-flask-app 的目录,并在其中创建两个文件:app.pyrequirements.txt

# app.py
from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello():
    return "Hello, Docker! 站长亲测有效。"

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)
# requirements.txt
Flask==3.0.0

第二步:编写 Dockerfile(自动化构建脚本)

在同一个目录下,创建一个没有后缀名的文件,命名为 Dockerfile。这是 Docker 的“施工图纸”。

# 使用官方 Python 3.11 运行时作为基础镜像
FROM python:3.11-slim

# 设置工作目录,后续命令都在此目录下执行
WORKDIR /app

# 将本地的 requirements.txt 复制到容器内
COPY requirements.txt .

# 安装依赖,--no-cache-dir 可以减少镜像体积
RUN pip install --no-cache-dir -r requirements.txt

# 将当前目录下的所有文件复制到容器内
COPY . .

# 声明容器运行时监听的端口
EXPOSE 5000

# 指定容器启动时执行的命令
CMD ["python", "app.py"]

这里有几个细节值得注意:先复制 requirements.txt 再复制源码,是为了利用 Docker 的缓存机制。只要依赖没变,重新构建镜像时就不会重复安装,速度会快很多。

第三步:构建并运行容器

my-flask-app 目录下打开终端,执行以下命令:

# 构建镜像,-t 参数是给镜像起名字和标签
docker build -t my-flask-app:v1 .

# 查看镜像是否构建成功
docker images

看到 my-flask-app 出现在列表里,说明构建成功。接下来,我们运行容器并做端口映射:

# -d 表示后台运行,-p 将宿主机的 5000 端口映射到容器的 5000 端口
docker run -d -p 5000:5000 --name my-flask-container my-flask-app:v1

# 查看运行中的容器
docker ps

此时,打开浏览器访问 http://localhost:5000,你应该能看到 “Hello, Docker!” 的字样。至此,你的第一个 Docker 容器已经成功跑起来了。

进阶实战:用 Docker Compose 编排多容器应用

单个容器只是开胃菜,实际开发中我们经常需要同时启动多个服务(比如 Web 应用 + Redis 缓存 + MySQL 数据库)。如果手动一个个启动,管理起来非常麻烦。这时候,Docker Compose 就派上用场了。

编写 docker-compose.yml

我们沿用上面的 Flask 项目,增加一个 Redis 服务。在项目根目录新建 docker-compose.yml 文件:

version: '3.8'

services:
  web:
    build: .
    ports:
      - "5000:5000"
    depends_on:
      - redis
    # 环境变量示例,实际开发中可通过 .env 文件管理
    environment:
      - REDIS_HOST=redis

  redis:
    image: redis:7-alpine
    ports:
      - "6379:6379"

注意,我们需要修改 app.py 来连接 Redis,以验证多容器通信是否正常:

# app.py (修改版)
from flask import Flask
import redis
import os

app = Flask(__name__)
# 连接 Redis,host 直接写服务名 redis
r = redis.Redis(host=os.getenv('REDIS_HOST', 'localhost'), port=6379, decode_responses=True)

@app.route('/')
def hello():
    # 计数器,每次刷新 +1
    count = r.incr('visits')
    return f"Hello, Docker! 这是你第 {count} 次访问本站。"

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

一条命令启动整个项目

执行以下命令,Compose 会自动构建镜像、拉取 Redis 镜像并启动所有服务:

# 启动所有服务(-d 后台运行)
docker compose up -d

# 查看服务状态
docker compose ps

# 查看日志(用于排错)
docker compose logs -f web

再次访问 localhost:5000,每次刷新页面,计数都会 +1,说明 Flask 和 Redis 已经成功通过 Docker 内部网络通信了。这就是 Compose 的魅力:一份配置文件,搞定整个开发环境

避坑清单:站长替你踩过的那些“雷”

实操过程中,有几个高频问题很容易让新手卡壳,这里集中说一下:

常见报错 原因分析 解决方案
port is already allocated 宿主机端口被占用 换一个映射端口,如 -p 5001:5000,或使用 docker ps 查看占用情况,docker rm -f <容器名> 强制删除旧容器。
Cannot connect to the Docker daemon Docker 服务未启动或权限不足 Linux 下执行 sudo systemctl start docker;mac/win 检查 Docker Desktop 是否已启动。
exec: "python": executable file not found 基础镜像中没有 Python 确保 Dockerfile 中的 FROM python:3.11-slim 写对,不要误用 alpine 等精简镜像(除非你手动安装 Python)。
构建速度极慢 未配置国内镜像加速器 在 Docker Desktop 的 Settings -> Docker Engine 中配置 registry-mirrors,填入国内加速地址(如 https://docker.mirrors.ustc.edu.cn)。

写在最后:让 Docker 成为你的开发“肌肉记忆”

通过本文的实操,你应该已经掌握了 Docker 最核心的两个技能:构建自定义镜像使用 Compose 编排服务。这不仅是开发效率的提升,更是团队协作规范化的基础——新同事入职,只需要 git clone 代码,然后 docker compose up -d,十分钟内就能拥有和线上完全一致的开发环境。

当然,Docker 的世界远不止于此,比如数据卷(Volume)持久化、网络模式配置、K8s 集群编排等,都是进阶的方向。但只要你把今天这份教程里的基础打牢,后续的学习就会顺畅很多。如果在实操中遇到任何问题,欢迎在评论区留言,站长看到后会第一时间回复。

最后提醒一句:如果你打算把 Docker 部署到云端,一定要选择正规的云服务商,数据安全比省那几十块钱重要得多。祝大家都能早日摆脱环境配置的折磨,把精力花在真正有价值的代码上。

相关技术专题与延伸阅读

📦 【资源免费领】本文全套实操配置文件与避坑手册下载

本文涉及的全套 Docker Compose 配置文件、服务器运维避坑清单及 AI 提效指令库已完整打包,可免费极速转存:

👉 点击前往夸克网盘免费极速转存(手机端领 1TB 空间)

💡 提示:推荐使用手机【夸克网盘 App】打开保存,新用户首月免费赠送 1TB 超大空间与免流量极速下载特权。

滚动至顶部