本文信息核实于2026-08-06
先给你一句扎心的话:如果你还在为“环境不一致”导致项目跑不起来而抓狂,或者因为重装系统后要花两天时间配环境而崩溃,那么Docker就是你的救星。超过60%的开发者已经在用Docker,而你还在手动装依赖? 别慌,这篇攻略就是写给零基础小白的,我保证你跟着做,30分钟内能把你自己的网站或服务容器化并跑起来,而且不会踩我当年踩过的那些坑。
核心观点:Docker不是虚拟机,是你项目环境的“快递打包箱”
很多人一听容器,就以为是个轻量级虚拟机。错! 虚拟机模拟的是整个硬件,而Docker容器共享宿主机内核,只隔离运行环境。这意味着它启动快(毫秒级)、占用小(几MB到几十MB)、迁移方便(一个镜像到处跑)。
打个比方:虚拟机是给每个项目配一台整机,Docker是给每个项目配一个标准化的“行李箱”,里面装好所有衣服(代码、依赖、配置),但行李箱本身还是放在同一个衣柜(宿主机)里。你走到哪,拎着行李箱就走,不用重新买衣服。
第一步:装好“行李箱”和“传送带”(安装Docker)
别去官网看那些复杂的英文文档,跟着我做:
- Windows/Mac用户:直接下载Docker Desktop,一路Next。安装完打开,它可能需要你启用WSL2(Windows)或允许虚拟化(Mac),照做就行。
- Linux用户(以Ubuntu为例):三条命令搞定
bash sudo apt update sudo apt install docker.io -y sudo systemctl enable --now docker - 验证是否成功:终端输入
docker --version,能显示版本号就OK。
坑1提醒:Windows上如果提示“Docker Engine stopped”,去“设置”里把“Use WSL 2 based engine”勾上,然后重启Docker Desktop,90%能解决。
第二步:拉取你的第一个镜像(就像下载一个软件包)
打开终端,执行:
docker pull nginx:latest
这会从Docker Hub(全球最大的镜像仓库)拉取一个最流行的Web服务器镜像。等下载完,输入 docker images 就能看到你本地有了一个名为nginx的镜像。
坑2提醒:国内网络拉取镜像可能很慢或超时。解决办法是配置国内镜像加速器,比如在Docker Desktop的Settings -> Docker Engine里,加上:
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}
保存并重启Docker,速度立刻起飞。
第三步:运行你的第一个容器(把行李箱打开)
docker run -d -p 8080:80 --name my-web nginx
解释一下这条命令:
- -d:后台运行
- -p 8080:80:把本机8080端口映射到容器内的80端口(你可以理解为把行李箱里的衣服挂到你的衣柜门上)
- --name my-web:给这个容器起个名字
- nginx:用哪个镜像
然后打开浏览器,访问 http://localhost:8080,你会看到Nginx的欢迎页。恭喜,你的第一个容器跑起来了!
第四步:把你自己写的代码“装进行李箱”(构建自定义镜像)
光跑别人的镜像没意思,你得把自己的项目容器化。假设你有一个简单的Python Flask应用,项目结构如下:
my-app/
├── app.py
└── requirements.txt
在项目根目录创建一个名为 Dockerfile 的文件(注意没有扩展名),内容如下:
# 基于Python官方镜像
FROM python:3.10-slim
# 设置工作目录
WORKDIR /app
# 复制依赖文件并安装
COPY requirements.txt .
RUN pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
# 复制源代码
COPY . .
# 暴露端口
EXPOSE 5000
# 启动命令
CMD ["python", "app.py"]
然后在终端执行:
docker build -t my-flask-app .
坑3提醒:docker build 末尾那个点不能漏,它代表当前目录。如果提示找不到Dockerfile,检查文件名是否大小写完全一致。
构建成功后,运行你的应用容器:
docker run -d -p 5000:5000 my-flask-app
浏览器访问 http://localhost:5000,看到你的应用页面了吗?整个打包过程不到5分钟。
第五步:管理你的容器(不只是启动和停止)
常用命令速查:
| 命令 | 作用 |
|---|---|
docker ps |
查看运行中的容器 |
docker ps -a |
查看所有容器(含已停止的) |
docker stop my-web |
停止容器 |
docker start my-web |
启动已停止的容器 |
docker rm my-web |
删除容器 |
docker rmi nginx |
删除镜像 |
docker logs my-web |
查看容器日志(排错神器) |
坑4提醒:停止容器用 stop,删除容器用 rm,删除镜像用 rmi,别搞混。删错镜像不会影响容器,但容器删了数据就没了(除非用数据卷)。
5个FAQ(小白最容易问的问题)
Q1:容器删了,里面的数据是不是就没了?
确实会没。如果你需要持久化数据(比如数据库文件),必须用“数据卷”挂载。运行命令加 -v 宿主机目录:容器目录,比如:
docker run -d -v /my/host/data:/var/lib/mysql mysql
这样数据存在宿主机上,容器删了数据还在。
Q2:镜像和容器的区别到底是什么? 镜像是一个只读的模板(类似安装包),容器是镜像运行后的实例(类似安装好的软件)。你可以从一个镜像启动多个容器,每个容器相互隔离。
Q3:Docker和Jenkins、K8s是什么关系? Docker负责打包和运行容器;Jenkins是自动化构建工具,可以把代码构建成Docker镜像;K8s是容器编排工具,管理大量容器的部署和伸缩。它们是不同层面的东西。
Q4:为什么我 docker pull 特别慢?
大概率是网络问题。除了配置加速器,还可以试试用代理。如果还不行,考虑用 docker pull 搭配 --platform 参数,有时拉取指定平台镜像会快一些。
Q5:Docker Desktop占用空间太大,怎么办?
在Docker Desktop的Settings -> Resources里,可以限制CPU和内存。另外,定期运行 docker system prune -a 清理无用的镜像和构建缓存,能释放大量空间。
实用建议(让你少走弯路)
- 不要用
latest标签用于生产环境,因为每次拉取可能得到不同版本。用具体版本号,比如nginx:1.25.3。 - 每个容器只跑一个进程。别把MySQL和Redis塞进同一个容器,这违背了容器的设计哲学。
- 学会看日志。容器起不来,第一件事就是
docker logs 容器名,90%的错误都能在日志里找到答案。 - 写
.dockerignore文件。就像.gitignore一样,把不需要的文件排除在构建上下文外,既能加快构建速度,又能减小镜像体积。 - 从官方镜像开始。别自己从零搭基础镜像,用官方的
python、node、ubuntu镜像,安全又省事。 - 多练习
docker exec -it 容器名 bash,进入容器内部探索文件结构,你会对容器有更直观的理解。
最后说两句:Docker的学习曲线其实很平缓,你不需要一开始就搞懂所有概念。先跑起来,再慢慢深入。我见过太多人卡在“安装”这一步就放弃了,其实你只要坚持30分钟,把上面这些命令敲一遍,你就能超过80%的初学者。等你熟练了,再去看Docker Compose(多容器编排)、Dockerfile进阶写法、镜像优化,这些都是水到渠成的事。现在,打开终端,开始你的第一个容器吧!