2026-03-10
Docker 从入门到放弃再到入门
说实话,Docker 我之前学过好几次,每次都是半途而废。这次终于下定决心把它搞通了,记录一下学习过程和踩过的坑。
为什么学 Docker
主要是因为部署应用太麻烦了。换服务器要重装环境,依赖版本冲突,各种奇奇怪怪的问题。还有就是本地跑得好好的服务器上跑不起来,Docker 能解决这个问题。
安装
Ubuntu 上安装 Docker 很简单:
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
装完之后跑个 hello world 验证一下:
docker run hello-world
几个核心概念
镜像(Image):只读的模板,相当于系统的 ISO 文件。
容器(Container):镜像的实例,相当于运行中的虚拟机。
仓库(Registry):存放镜像的地方,最常用的是 Docker Hub。
Dockerfile 编写
这是最难的部分。我的第一个 Dockerfile:
FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["python", "app.py"]
docker-compose 才是归宿
单个容器好说,但多个服务(前端、后端、数据库、Redis)怎么管理?docker-compose 解决了这个问题。
一个典型的配置:
version: '3.8'
services:
web:
build: .
ports:
- "8000:8000"
depends_on:
- db
- redis
db:
image: postgres:15
volumes:
- pgdata:/var/lib/postgresql/data
redis:
image: redis:7
volumes:
pgdata:
踩过的坑
- 网络问题:容器之间需要用
depends_on指定依赖顺序,否则会连不上 - 卷挂载:Windows 和 Linux 路径不一样,要用相对路径
- 端口冲突:宿主机端口被占用,要改映射
- 内存限制:Docker Desktop 默认只给 2G,跑大项目会爆
总结
现在项目都尽量 Docker 化部署,确实省心很多。开发环境和生产环境一致,「在我机器上能跑」不再是借口。
建议想学的朋友直接用 docker-compose 入门,单学 docker 命令行有点枯燥。