docker compose的使用

目录

  • [一. 使用普通docker命令启动容器](#一. 使用普通docker命令启动容器)
  • [二. 使用`docker compose`](#二. 使用docker compose)
    • [2.1 创建`docker-compose.yml` 配置文件](#2.1 创建docker-compose.yml 配置文件)
    • [2.2 `docker compose build` 构建镜像](#2.2 docker compose build 构建镜像)
    • [3.4 `docker compose run` 启动一次性容器](#3.4 docker compose run 启动一次性容器)
    • [3.5 `docker compose up` 运行容器](#3.5 docker compose up 运行容器)

一. 使用普通docker命令启动容器

如果容器被销毁,容器中的数据也会一同消失,所以一般不会将数据存储在容器内部,而是通过挂载的方式将其存储在宿主机的指定位置中。

⏹将容器运行所需要的db.sqlite3文件,在容器启动时挂载

  • -v /主机路径文件:/容器路径文件 这会让容器内部使用主机上的文件,从而让 db.sqlite3 的内容得以持久保存。
  • -w /app 设置容器内的工作目录是 /app,这个要与你 Dockerfile 中 WORKDIR 设置一致(通常也是 /app
bash 复制代码
docker run -it -p 8100:8000 \
-v $(pwd)/db.sqlite3:/app/db.sqlite3 \
-w /app \
helloworld-django

💦但是输入这么长的命令,非常繁琐,而且如果我们有多个需要部署多个容器,并且对这些容器的顺序有要求的话,每次手动输入非常容器出错。那么,有没有什么更好的办法?

二. 使用docker compose

2.1 创建docker-compose.yml 配置文件

  • 将命令行中的配置命令,通过yml文件的方式简化到配置文件中。
bash 复制代码
apluser@FengYeHong-HP:helloworld-django$ ls -l
total 152
-rw-r--r-- 1 apluser apluser 131072 Jun 14  2025 db.sqlite3
-rw-r--r-- 1 apluser apluser    303 Mar  8 19:20 docker-compose.yml
-rw-r--r-- 1 apluser apluser    483 Jun 11  2025 Dockerfile
drwxr-xr-x 4 apluser apluser   4096 Jun  7  2025 hello
-rwxr-xr-x 1 apluser apluser    667 Jun  7  2025 manage.py
-rw-r--r-- 1 apluser apluser     16 Jun  7  2025 requirements.txt
drwxr-xr-x 3 apluser apluser   4096 Jun  7  2025 web_project
apluser@FengYeHong-HP:helloworld-django$
apluser@FengYeHong-HP:helloworld-django$ cat docker-compose.yml
services:
  web:
    image: helloworld-django:0.0.2
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - "8100:8000"
    volumes:
      - /home/apluser/project/helloworld-django/db.sqlite3:/app/db.sqlite3
    working_dir: /app
    command: python manage.py runserver 0.0.0.0:8000
apluser@FengYeHong-HP:helloworld-django$

2.2 docker compose build 构建镜像

3.4 docker compose run 启动一次性容器

  • docker compose up:启动整个服务(长期运行)
  • docker compose run:启动一个临时容器执行命令
  • 非常适合:
    • 数据库迁移
    • 管理命令
    • debug

docker compose run web python manage.py migrate

  • 执行命令进行数据迁移
  • 此处的web应当和docker-compose.yml文件中的services对应的名称相同

💥需要注意的是

  • docker compose run 会启动一个一次性容器,它不会被 docker-compose up 管理到。

3.5 docker compose up 运行容器

  • docker compose up --remove-orphans
    • --remove-orphans 在启动的时候,删除被遗漏的容器
  • docker compose up -d
    • 在后台启动容器

⏹如下图所示,容器启动成功,页面也能正常访问。

相关推荐
爱喝水的鱼丶13 分钟前
SAP-ABAP:SAP基础数据校验工具开发系列博客(共5篇)第三篇:SAP接口对接开发:实现数据的实时/批量校验交互
运维·数据库·学习·性能优化·sap·abap·经验交流
難釋懷44 分钟前
Nginx扩容
运维·nginx
绿虫光伏运维1 小时前
光伏监控运维系统哪家靠谱?
运维·光伏管理·光伏运维
木雷坞1 小时前
Docker Hub、GHCR、Quay 混在一起后,镜像源要分开测
运维·docker
qq_452396231 小时前
第十五篇:《Docker 与 Kubernetes 集成:从 Swarm 到 K8s 的迁移》
docker·容器·kubernetes
HackTwoHub2 小时前
K8s综合渗透测试工具,集成信息搜集、权限逃逸、横向移动,一站式搞定全流程渗透测试工作
人工智能·安全·web安全·云原生·容器·kubernetes·系统安全
LT10157974442 小时前
2026年物流RPA选型指南:物流供应链自动化场景适配
运维·自动化·rpa
AC赳赳老秦2 小时前
OpenClaw任务复盘自动化:统计每日完成工作、遗留问题,优化工作节奏
java·大数据·linux·运维·服务器·数据库·openclaw
雾岛心情2 小时前
【小铭邮箱】小铭邮箱工具箱公司版本导入VCF文件
运维·工具·exchage·o365·小铭邮件工具箱(公司版)
kaoa0002 小时前
Linux入门攻坚——79、XEN虚拟化-2
linux·运维·开发语言