docker使用履历总结(三、Docker compose基础应用)

打印 上一主题 下一主题

主题 830|帖子 830|积分 2490

六、Docker compose:Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。通过 Docker Compose,用户可以使用一个 YAML 文件来定义应用程序所需的所有服务,然后通过一条命令就可以创建并启动这些服务。Docker Compose 可以极大简化多容器应用的管理和部署流程。
它的原理,Docker Compose 重要依靠于两个核心部分:

  • YAML 文件 (docker-compose.yml):这个文件用来形貌多容器应用的各个服务以及它们之间的关系。通过定义各个服务的镜像、网络、卷、端口映射等,Compose 可以在本地环境或生产环境中一致性地部署应用。
  • Docker Compose CLI:Docker 提供了一个命令行工具 docker-compose,用户可以通过它来管理使用 docker-compose.yml 定义的服务。这些命令包括启动、停止、重启服务,检察日志等。

 1. compose.yml:是 Docker Compose 用来定义多容器应用的核心设置文件。它使用 YAML 语法形貌服务、网络、卷和其他设置项。下面是一个典范的 docker-compose.yml 文件结构及其各部分的详细说明。
YAML 文件不必须命名为 docker-compose.yml,但默认情况下,Docker Compose 会在当前目录下查找名为 docker-compose.yml 的文件作为设置文件。如果想使用其他名称的 YAML 文件,也完全可以,只须要在运行 Docker Compose 命令时显式指定该文件的路径和名称。
  1. version: '3.8'  # 指定 Docker Compose 文件的版本
  2. services:  # 定义服务
  3.   web:  # 服务名称,可以是任意名称
  4.     image: nginx:alpine  # 使用的镜像
  5.     ports:
  6.       - "8080:80"  # 端口映射:将主机的8080端口映射到容器的80端口
  7.     volumes:
  8.       - ./html:/usr/share/nginx/html  # 挂载本地目录到容器中的路径
  9.     networks:
  10.       - webnet  # 指定服务使用的网络
  11.     depends_on:
  12.       - app  # 指定依赖的服务,确保app服务在web服务之前启动
  13.   app:  # 另一个服务
  14.     build: ./app  # 使用本地的Dockerfile构建镜像
  15.     command: python app.py  # 覆盖默认命令
  16.     volumes:
  17.       - ./app:/app  # 挂载本地目录到容器中
  18.     environment:
  19.       - DEBUG=1  # 设置环境变量
  20.     networks:
  21.       - webnet  # 指定服务使用的网络
  22. volumes:  # 定义数据卷
  23.   db_data:  # 卷名称,可以在 services 中引用
  24.     driver: local  # 指定驱动类型,这里是本地驱动
  25. networks:  # 定义网络
  26.   webnet:  # 网络名称
  27.     driver: bridge  # 指定网络驱动类型
复制代码
version

version 定义了 docker-compose.yml 文件的版本,版本决定了可以使用的语法和功能。常见版本包括 '3.8'、'3'、'2' 等。一样平常建议使用较新的版本以确保兼容最新功能。
services

services 是最核心的部分,定义了应用中所有的服务。每个服务包罗以下常用设置项:

  • image: 指定要使用的 Docker 镜像。如果该镜像不存在,Compose 会主动从 Docker Hub 拉取。
  • build: 如果你渴望构建自己的镜像,可以使用 build 选项,通常指定一个包罗 Dockerfile 的路径。
  • ports: 端口映射,HOST:CONTAINER 格式,将主机的端口映射到容器内的端口。
  • volumes: 卷挂载,HOST_PATH:CONTAINER_PATH 格式,将主机的目录或文件挂载到容器内。
  • networks: 指定服务使用的网络。可以在下面的 networks 部分定义这些网络。
  • environment: 设置环境变量,可以在容器内访问这些变量。
  • depends_on: 指定服务之间的依靠关系,确保某些服务在其他服务启动之前启动。
  • command: 覆盖默认的容器启动命令。
  • restart: 定义容器的重启策略(如 always、on-failure)。
volumes

volumes 用于定义和管理数据卷。数据卷用于持久化数据,即使容器被删除,数据仍然存在。

  • driver: 定义卷的驱动类型,默认是 local。
卷可以在 services 中引用,作为数据存储的路径。
networks

networks 用于定义服务之间的网络设置。

  • driver: 指定网络驱动类型,常见的有 bridge、overlay 等。
网络可以被多个服务共享,用于服务之间的通信。
 
2.常用基础命令:Docker Compose 的命令大多数是在项目的根目录下实行的,该目录包罗 docker-compose.yml 文件。Docker Compose 会主动在当前目录查找 docker-compose.yml 文件,并根据此中定义的内容实行相关操纵。
  1. # 启动应用:命令会读取当前目录下的 docker-compose.yml 文件,并启动所有定义的服务。如果服务所需的镜像不存在,Compose 会自动构建或拉取镜像。如果想在后台运行,可以加上 -d 参数
  2. docker compose up -d

  3. # 启动已经存在的容器,而不会重新创建它们。如果容器已经存在但未运行,此命令可以用来重新启动它们。
复制代码
  docker compose start
  1. # 命令会停止所有正在运行的服务
  2. docker compose stop
  3. # 重启服务,且在不指定服务名称,docker-compose 将重启所有服务
  4. docker compose restart [SERVICE_NAME]
  5. # 列出当前所有服务的状态
  6. docker compose ps
  7. # 看指定服务的日志。如果不指定服务名称,则会查看所有服务的日志
  8. docker compose logs [SERVICE_NAME]
  9. # 运行一次性命令
  10. docker compose run SERVICE_NAME COMMAND

  11. # 在正在运行的容器中执行命令
  12. docker compose exec
  13. # 在 docker-compose.yml 中定义了 build 选项,可以用这个命令来构建镜像
  14. docker compose build
  15. # 停止并删除所有在 docker-compose.yml 中启动的服务、网络和挂载的卷。如果你想删除服务但保留卷数据,可以加上 --volumes 选项
  16. docker compose down --volumes
复制代码
此中,docker compose up有几个参数要重点讲下
  1. # --scale SERVICE=NUM:指定服务的容器数量,例如可以扩展 web 服务到 3 个副本。
  2. docker compose up --scale web=3
  3. # 制构建服务镜像,即使镜像已经存在
  4. docker compose up --build
  5. # 删除不在 docker-compose.yml 文件中的多余容器
  6. docker compose up --remove-orphans
复制代码
 
2. 使用流程

  • 定义应用环境:在 docker-compose.yml 文件中定义应用程序所需的各个服务。
  • 启动应用:使用 docker-compose up 命令启动整个应用,Compose 会根据 docker-compose.yml 文件创建并启动所有服务。
  • 管理服务:使用 docker-compose 提供的其他命令,如 stop, start, restart,scale等来管理已经启动的服务。
  • 删除应用:通过 docker-compose down 命令停止并删除所有服务及其相关资源。
3.实践

假设有一个前后端分离的 Python + Django + MySQL + Redis + Vue + Nginx 项目,我们须要为各个组件编写Dockerfile,并在 docker-compose.yml 文件中设置服务。
目录结构:
  1. myproject/
  2. ├── backend/
  3. │   ├── Dockerfile
  4. │   ├── myproject/
  5. │   ├── manage.py
  6. │   ├── requirements.txt
  7. ├── frontend/
  8. │   ├── Dockerfile
  9. │   ├── package.json
  10. │   ├── src/
  11. │   └── ...
  12. ├── nginx/
  13. │   ├── Dockerfile
  14. │   ├── nginx.conf
  15. ├── docker-compose.yml
复制代码
3.1 Backend(Django)部分
backend/Dockerfile:
  1. # 使用官方的 Python 镜像作为基础镜像
  2. FROM python:3.9-slim
  3. # 设置工作目录
  4. WORKDIR /app
  5. # 复制依赖文件并安装
  6. COPY requirements.txt /app/
  7. RUN pip install --no-cache-dir -r requirements.txt
  8. # 复制应用代码
  9. COPY . /app/
  10. # 暴露应用端口
  11. EXPOSE 8000
  12. # 运行 Django 开发服务器(你可能需要使用 gunicorn 或者其他 WSGI 服务器在生产环境中)
  13. CMD ["gunicorn", "myproject.wsgi:application", "--bind", "0.0.0.0:8000"]
复制代码
backend/requirements.txt,在这个文件中,列出 Django 项目所需的所有 Python 包,如:
[code]Django>=3.2,

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

魏晓东

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表