轻量级虚拟机--Docker使用手册

Docker 使用手册

1. 什么是 Docker?

Docker 解决了一个核心问题:环境一致性。

  1. 场景 :小甲有一个程序 a.py,在本地环境 Env 1 中运行结果是 A;
  2. 问题:发给小乙后,他的电脑环境是 Env 2,很可能因为依赖缺失或其他原因导致运行报错;
  3. Docker 解决方案 :将【 a.py + Env 1 】打包成一个 Docker 镜像(images);
  4. 使用方式:甲将 Docker 镜像上传到仓库(公共或私有均可),乙从仓库 pull 下来,在命令行中启动 Docker 并使用该镜像,即可执行相同的运行并得到相同的结果。

2. 核心术语

  1. Docker images(镜像):相对容器来说,是模板,包含了完整的运行环境和应用代码。
  2. Docker container(容器):是镜像的实例化,一个镜像可以创建多个容器。
  3. Docker service(服务):在 Docker Compose 或 Swarm 环境中,服务是对容器的抽象和管理单位,定义了容器的运行方式、数量、网络等配置。
  4. Dockerfile : 一个文本文件,包含了构建 Docker 镜像所需的所有命令。通过 docker build 命令读取 Dockerfile 并执行其中的命令,最终生成一个镜像。

3. 服务与容器的关系

3.1 服务的定义

服务(Service)是 Docker Compose / Docker Swarm 中的概念,定义了如何运行容器。

服务可以理解为容器的配置模板,包含了容器的镜像、命令、环境变量、网络、卷等配置信息。

  1. 服务是容器的抽象:服务定义了容器的运行规范,一个服务可以管理多个容器实例。

3.2 服务与容器的区别

特性 服务(Service) 容器(Container)
定义方式 通过 docker-compose.yml 或 Swarm 配置文件定义 通过镜像创建
管理范围 可以管理多个容器实例 单个运行实例
配置方式 集中配置,统一管理 独立配置
扩展能力 支持水平扩展,调整实例数量 单个实例,需要手动管理多个容器
网络管理 提供服务发现和负载均衡 需要手动配置网络

4. 实用命令(命令清单,暂可不看)

4.1 镜像相关命令

***imagename>:举例: *** my-image:latest (my-image 是镜像名,latest 是默认标签,意思是最新版本)

  1. docker images:查看本地所有镜像
  2. docker pull <image_name>:<tag>:从仓库拉取镜像

eg: docker pull ccr.ccs.tencentyun.com/library/ubuntu:22.04 从腾讯云拉取 ubuntu22.04镜像

  1. docker push <image_name>:<tag>:将镜像推送到仓库
  2. docker rmi <image_id>:删除指定镜像(可以只用ID的前四位)
  3. docker build -t <image_name>:<tag> .:构建镜像

4.2 容器相关命令

  1. docker ps:查看正在运行的容器
  2. docker ps -a:查看所有容器(包括已停止的)
  3. docker start <container_id>:启动容器
  4. docker stop <container_id>:停止容器
  5. docker rm <container_id>:删除容器
  6. docker exec -it <container_id> bash:进入容器内部

4.3 服务相关命令

  1. docker compose up:启动服务
  2. docker compose down:停止服务
  3. docker compose ps:查看服务状态
  4. docker compose logs:查看服务日志
  5. docker compose scale <service_name>=<number>:扩展服务实例数量

4.4 系统相关命令

  1. docker system df:查看 Docker 系统资源使用情况
  2. docker system prune:清理未使用的 Docker 资源

5. 使用步骤(必须逐步)

我采用的是构建方式,将 Dockerfiledocker-compose.yml.dockerignore 等文件放在 Git 仓库内。

乙方 git clone 仓库后,输入对应命令即可复刻出镜像。

5.1 通过 requirements.txt 添加依赖

创建 requirements.txt 文件,列出项目所需的依赖包:

复制代码
# 核心依赖
# ============================================================
pyyaml>=6.0
# 数据处理和分析
pandas>=1.3.0,<3.0.0

# 系统监控(用于内存监控)
psutil>=5.8.0,<6.0.0

5.2 编写 Dockerfile 构建命令

dockerfile 复制代码
# 基础镜像
FROM python:3.9-slim

# 设置工作目录
WORKDIR /app

# 复制依赖文件
COPY requirements.txt .

# 安装依赖
RUN pip install --no-cache-dir -r requirements.txt

# 复制项目代码
COPY . .

# 暴露端口
EXPOSE 5000

# 启动命令
CMD ["python", "app.py"]

5.3 编写 docker-compose.yml(多容器场景)(可选)

如果需要同时构建多个容器,使用 docker-compose.yml

下面是两个容器的示例配置

yaml 复制代码
services:
  exp-dfs-bestgoal-commonpre:
    image: my-image:latest
    user: "1000:1000"
    working_dir: /app/scripts
    command: python3 ablation_car5-24.py
    mem_limit: 8g
    cpus: 4
    restart: "no"
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"
    labels:
      - "project=static-scenario-synthesis"
      - "experiment.type=ablation"
      - "experiment.algorithm=dfs"
      - "experiment.strategy=bestgoal-commonpre"
    volumes:
      - ../:/app
      - ./results/dfs-bestgoal-commonpre:/app/results
    environment:
      - PYTHONUNBUFFERED=1
      - PYTHONPATH=/app:/app/scripts:/app/core
      - CURRENT_SERVICE=exp-dfs-bestgoal-commonpre
      - CONFIG_ALGORITHMS=DFS_BestGoal_CommonPre
      - CAR_COUNTS_TO_RUN=5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24
      - TIMEOUT_SECONDS=7200
      - MEMORY_LIMIT_MB=8192

  exp-dfs-bestgoal:
    image: my-image:latest
    user: "1000:1000"
    working_dir: /app/scripts
    command: python3 ablation_car5-24.py
    mem_limit: 8g
    cpus: 4
    restart: "no"
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"
    labels:
      - "project=static-scenario-synthesis"
      - "experiment.type=ablation"
      - "experiment.algorithm=dfs"
      - "experiment.strategy=bestgoal"
    volumes:
      - ../:/app
      - ./results/dfs-bestgoal:/app/results
    environment:
      - PYTHONUNBUFFERED=1
      - PYTHONPATH=/app:/app/scripts:/app/core
      - CURRENT_SERVICE=exp-dfs-bestgoal
      - CONFIG_ALGORITHMS=DFS_BestGoal
      - CAR_COUNTS_TO_RUN=5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24
      - TIMEOUT_SECONDS=7200
      - MEMORY_LIMIT_MB=8192

5.4 运行

在 Dockerfile 同目录下执行:

bash 复制代码
docker build -t my-image:latest .
docker run -p 5000:5000 my-image:latest

6. 运行相关脚本

6.1 启动所有容器 (加上-d 是后台运行)

bash 复制代码
docker-compose up -d

6.2 查看状态(所有运行中的容器)

bash 复制代码
docker-compose ps
#查看 包括没运行的容器
docker-compose ps -a

6.3 查看日志

bash 复制代码
docker-compose logs -f

7. 需要重新构建镜像的情况:

在修改以下配置后,需要重新构建新镜像:

  • Dockerfile
  • requirements.txt
  • 项目代码
  • 构建上下文文件(配置文件、静态资源等):
    • 构建上下文文件指在构建 Docker 镜像时,Docker 引擎会将指定目录(通常是当前目录,即 . )下的所有文件和子目录作为构建上下文发送给 Docker 守护进程

    • COPY 指令 示例:在 Dockerfile 中使用 COPY 指令将构建上下文中的文件复制到镜像中

      dockerfile 复制代码
      COPY ./app.py /app/
      COPY ./static/ /app/static/
bash 复制代码
#常规构建
docker build -t my-image:latest .
#带网络配置的构建
docker build --network=host --no-cache -t my-image:latest .

8. 需要重新生成新容器的情况:

修改docker-compose.yml配置后,必须删除旧容器才能生效(无需重新构建新镜像):

旧容器仍用旧配置,必须停止重建;而Compose 每次运行都会重新读取配置文件。

bash 复制代码
docker compose down
# 删除旧容器
docker rm -f $(docker ps -a -q) 2>/dev/null || true

docker compose up -d 【可指定容器,如exp-dfs-bestgoal-commonpre】

9. 服务管理 docker compose 常见命令

bash 复制代码
#1 查看特定服务日志
docker compose logs -f exp-dfs-bestgoal-commonpre
# 运行多个服务
##同时启动 2 个服务
docker compose up -d exp-dfs-bestgoal-commonpre exp-bfs-commonpre
##查看 2 个服务的日志
docker compose logs -f exp-dfs-bestgoal-commonpre exp-bfs-commonpre
#2 容器操作
##进入容器 bash(用命令行在容器内操作,执行文件)
docker compose run --rm exp-dfs-bestgoal-commonpre bash
  1. 使用 .dockerignore 文件:排除不需要打包到镜像中的文件,减少镜像大小
  2. 使用官方基础镜像:确保安全性和稳定性
  3. 使用多阶段构建:减小最终镜像大小
  4. 设置合理的标签:便于版本管理和回滚

版本历史

  1. 2026-03-09:初始版本
  2. 2026-03-10:完善文档结构和内容
相关推荐
嘟嘟 嘟嘟嘟2 小时前
让AI帮我部署一套3节点K8S集群
云原生·容器·kubernetes
奋斗的蛋黄3 小时前
Docker 核心知识点
运维·docker·容器
Benszen3 小时前
K8S存储管理:从Volume到PV/PVC详解
云原生·容器·kubernetes
云深麋鹿3 小时前
C++ | 手搓一个string类
开发语言·c++·容器
returnthem4 小时前
Dockerfile制作Tomcat镜像
docker
胡斌附体4 小时前
MySQL 在 Docker 环境下连接变慢问题记录
数据库·mysql·docker·连接··本机·外部机器连接
cg_ssh4 小时前
MinIO docker 集群
运维·docker·容器
云深麋鹿4 小时前
C++ | 容器vector
开发语言·c++·容器
DynamicsAgg4 小时前
企业数字化底座-k8s企业实践系列第一篇初识
云原生·容器·kubernetes