2026-03-10

Docker 从入门到放弃再到入门

docker devops

说实话,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:

踩过的坑

总结

现在项目都尽量 Docker 化部署,确实省心很多。开发环境和生产环境一致,「在我机器上能跑」不再是借口。

建议想学的朋友直接用 docker-compose 入门,单学 docker 命令行有点枯燥。