跳转至

Docker

为什么使用 Docker

在学习 CS 课程的过程中,你经常会遇到这样的问题:

  • 课程实验要求特定的操作系统或软件版本
  • 本地环境和老师提供的环境不一致,导致代码运行结果不同
  • 安装一个软件需要配置大量依赖,过程繁琐且容易出错

Docker 通过容器化技术解决了这些问题。容器就像一个轻量级的虚拟机,它把你的程序和它需要的所有依赖打包在一起,在任何地方都能以相同的方式运行。

环境一致性,一次构建到处运行

Docker 容器封装了完整的运行环境,包括操作系统、库和依赖。你本地能跑的代码,放到服务器上、别人电脑上也能跑,彻底告别"在我电脑上能跑"的问题。

快速部署,秒级启动

相比传统虚拟机需要几分钟启动,Docker 容器可以在几秒内启动,资源占用也更少。

CS 课程实验利器

很多 CS 课程(如操作系统、数据库、网络)的实验都提供 Docker 镜像,直接拉取即可使用,免去繁琐的环境配置。

安装 Docker

Windows

推荐使用 Docker Desktop for Windows。

注意:Docker Desktop 需要开启 WSL2 或 Hyper-V。如果你使用 WSL2(推荐),Docker 会自动利用 WSL2 的 Linux 内核。

macOS

下载 Docker Desktop for Mac。

Linux

# Ubuntu
sudo apt update
sudo apt install docker.io
sudo systemctl start docker
sudo systemctl enable docker
# 将当前用户加入 docker 组(免 sudo)
sudo usermod -aG docker $USER

基本使用

拉取并运行镜像

# 拉取一个 Ubuntu 镜像
docker pull ubuntu

# 运行一个容器
docker run -it ubuntu bash

# 运行一个 Python 容器
docker run -it python:3.11 bash

常用命令

docker ps                        # 查看正在运行的容器
docker ps -a                     # 查看所有容器(包括已停止的)
docker stop <container_id>       # 停止容器
docker rm <container_id>         # 删除容器
docker images                    # 查看本地镜像
docker rmi <image_id>            # 删除镜像

使用 Dockerfile

Dockerfile 是一个文本文件,描述了如何构建镜像:

FROM python:3.11
WORKDIR /app
COPY . .
RUN pip install -r requirements.txt
CMD ["python", "main.py"]
docker build -t myapp .
docker run -it myapp

挂载本地目录

将本地代码目录挂载到容器中,方便开发调试:

docker run -v $(pwd):/app -w /app -it python:3.11 bash

Docker Compose

当你的应用需要多个服务(如 Web 服务器 + 数据库)时,Docker Compose 可以帮你一次性启动和管理多个容器:

# docker-compose.yml
services:
  web:
    build: .
    ports:
      - "8000:8000"
  db:
    image: postgres:15
    environment:
      POSTGRES_PASSWORD: example
docker compose up -d      # 启动所有服务
docker compose down       # 停止所有服务

其他资源