ToB企服应用市场:ToB评测及商务社交产业平台

标题: 【运维】使用 Docker Compose 快速启动项目全流程指南 [打印本页]

作者: 铁佛    时间: 2024-8-12 10:06
标题: 【运维】使用 Docker Compose 快速启动项目全流程指南
docker-compose启动项目流程

要使用 docker-compose.yaml 文件启动一个 Python 代码工程,您可以按照以下步骤操作:
1. 安装 Docker 和 Docker Compose

假如您的系统上还没有安装 Docker 和 Docker Compose,您必要先安装它们。

2. 准备 Docker Compose 文件

确保 docker-compose.yaml 文件在您的项目根目录中。该文件界说了您的服务,包罗镜像、容器名称、网络配置、挂载卷等。
3. 启动 Docker Compose 服务

打开终端或命令行窗口,导航到包罗 docker-compose.yaml 文件的项目根目录,然后运行以下命令:
  1. docker-compose up
  2. -d
复制代码
这个命令会在后台启动所有界说在 docker-compose.yaml 文件中的服务。假如希望在前台运行并查看日志输出,可以去掉 -d 参数:
  1. docker-compose up
复制代码
4. 检查运行状态

您可以使用以下命令检查服务是否正常运行:
  1. docker-compose ps
复制代码
这个命令会列出所有由 docker-compose 启动的容器及其状态。
5. 停止服务

假如您必要停止服务,可以在项目根目录中运行以下命令:
  1. docker-compose down
复制代码
这个命令会停止并删除所有由 docker-compose 启动的容器。
示例 docker-compose.yaml 文件

以下是一个简单的 docker-compose.yaml 文件示例:
  1. version: '3.8'
  2. services:
  3.   web:
  4.     image: python:3.8
  5.     volumes:
  6.       - .:/code
  7.     working_dir: /code
  8.     command: python app.py
  9.     ports:
  10.       - "5000:5000"
  11.   db:
  12.     image: postgres:13
  13.     environment:
  14.       POSTGRES_USER: user
  15.       POSTGRES_PASSWORD: password
  16.       POSTGRES_DB: mydatabase
  17.     ports:
  18.       - "5432:5432"
复制代码
为什么要用docker-compose

docker-compose 是为了启动和管理多个容器以便它们能够协同工作。这么做有几个主要原因和利益:
1. 微服务架构的实现

现代应用程序往往采用微服务架构,将应用程序拆分为多个独立的服务(如数据库服务、Web服务、缓存服务等)。这些服务各自运行在独立的容器中,可以独立开辟、摆设和扩展。
2. 依赖管理

复杂的应用程序通常依赖于多个组件和服务。例如,一个典范的Web应用程序大概必要一个Web服务器、一个数据库和一个缓存系统。使用 docker-compose 可以轻松地界说和管理这些依赖关系,确保所有组件按预期启动和运行。
3. 简化开辟和测试环境

在开辟和测试过程中,必要保证开辟环境与生产环境尽大概一致。使用 docker-compose 可以界说一致的开辟、测试和生产环境,使得在当地运行的环境与摆设到服务器上的环境尽量相同,从而淘汰环境差别带来的问题。
4. 方便的服务管理

docker-compose 提供了简单的命令来启动、停止和查看所有服务的状态。例如,通过一个 docker-compose up

命令,就可以启动所有服务;通过 docker-compose down

命令,可以停止并清理所有服务。
5. 网络配置

docker-compose 自动为所有界说的服务创建一个专用网络,使得这些服务之间能够相互通信,而不必要额外配置复杂的网络设置。每个服务都可以通过服务名直接访问其他服务。
示例应用场景

假设我们有一个简单的博客应用程序,它包罗以下组件:

在没有 docker-compose 的情况下,我们必要分别配置和管理这些服务,这大概会非常复杂且容易堕落。而使用 docker-compose,我们可以界说一个简单的 docker-compose.yaml 文件来描述这些服务及其依赖关系:
  1. version: '3.8'
  2. services:
  3.   web:
  4.     image: nginx:latest
  5.     ports:
  6.       - "80:80"
  7.     volumes:
  8.       - ./nginx.conf:/etc/nginx/nginx.conf
  9.     depends_on:
  10.       - api
  11.   api:
  12.     image: my-api-server:latest
  13.     build: ./api
  14.     ports:
  15.       - "5000:5000"
  16.     environment:
  17.       - DATABASE_URL=postgres://user:password@db:5432/mydatabase
  18.   db:
  19.     image: postgres:13
  20.     environment:
  21.       POSTGRES_USER: user
  22.       POSTGRES_PASSWORD: password
  23.       POSTGRES_DB: mydatabase
  24.     ports:
  25.       - "5432:5432"
  26.     volumes:
  27.       - postgres-data:/var/lib/postgresql/data
  28. volumes:
  29.   postgres-data:
复制代码
docker-compose 为开辟职员提供了一种简便的方法来界说、管理和运行多容器Docker应用程序。它在微服务架构、依赖管理、一致的开辟和生产环境、服务管理以及网络配置方面提供了显著的优势,使得复杂应用程序的管理和维护变得更加容易和高效。
语法

Docker Compose 是一个用于界说和运行多容器 Docker 应用的工具。通过一个 docker-compose.yml 文件,你可以配置应用的服务,并使用一个命令启动或关闭它们。以下是 Docker Compose 语法的详细先容及示例:
基本语法结构

docker-compose.yml 文件是一个 YAML 文件,通常包罗以下几部门:
示例 docker-compose.yml 文件

  1. version: '3.8'  # Docker Compose 文件版本
  2. services:
  3.   web:
  4.     image: nginx:latest  # 使用的镜像
  5.     ports:
  6.       - "80:80"  # 映射端口
  7.     volumes:
  8.       - ./html:/usr/share/nginx/html  # 挂载主机目录到容器
  9.     networks:
  10.       - webnet  # 使用的网络
  11.   app:
  12.     build:
  13.       context: ./app  # Dockerfile 所在目录
  14.       dockerfile: Dockerfile
  15.     ports:
  16.       - "5000:5000"
  17.     volumes:
  18.       - ./app:/app
  19.     networks:
  20.       - webnet
  21.     depends_on:
  22.       - db  # 指定依赖的服务
  23.   db:
  24.     image: postgres:latest
  25.     environment:
  26.       POSTGRES_DB: mydatabase
  27.       POSTGRES_USER: user
  28.       POSTGRES_PASSWORD: password
  29.     volumes:
  30.       - db_data:/var/lib/postgresql/data
  31.     networks:
  32.       - webnet
  33. volumes:
  34.   db_data:  # 定义一个名为 db_data 的卷
  35. networks:
  36.   webnet:  # 定义一个名为 webnet 的网络
复制代码
关键字详解

version

指定 Compose 文件的版本。不同版本支持的语法和功能有所不同。常用的版本包罗 2、2.1、3、3.8 等。
services

界说应用中的各个服务。每个服务可以包罗以下字段:

volumes

界说数据卷。数据卷用于持久化数据,避免因容器销毁而丢失数据。
networks

界说网络。网络用于容器之间的通信。Compose 默认提供一个 bridge 网络,但可以自界说网络以满足复杂的需求。
常用命令

  1. docker-compose up
复制代码
  1. docker-compose up
  2. -d
复制代码
  1. docker-compose down
复制代码
  1. docker-compose logs
复制代码
  1. docker-compose build
复制代码
  1. docker-compose ps
复制代码
进阶用法

使用 .env 文件

Docker Compose 支持使用 .env 文件来设置环境变量。这些变量可以在 docker-compose.yml 文件中使用。
.env 文件示例:
  1. POSTGRES_DB=mydatabase
  2. POSTGRES_USER=user
  3. POSTGRES_PASSWORD=password
复制代码
docker-compose.yml 文件中使用环境变量:
  1. services:
  2.   db:
  3.     image: postgres:latest
  4.     environment:
  5.       POSTGRES_DB: ${POSTGRES_DB}
  6.       POSTGRES_USER: ${POSTGRES_USER}
  7.       POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
复制代码
多个 Compose 文件

在复杂的应用中,你大概必要使用多个 Compose 文件。例如,一个用于开辟环境,一个用于生产环境:

启动时可以指定多个文件:
  1. docker-compose -f docker-compose.yml -f docker-compose.override.yml up
复制代码
Docker Compose 是一个强盛的工具,可以简化多容器应用的管理。通过界说清晰的 docker-compose.yml 文件,可以方便地启动、停止和管理你的应用程序。
一个示例工程

https://github.com/fevolq/Money/blob/main/docker-compose.yaml
  1. version: '3'
  2. services:
  3.   money:
  4.     image: infq/money:latest
  5.     container_name: money
  6.     environment:
  7.       - PORT=8888
  8.       - WorthUseCache=true
  9.     ports:
  10.       - "8888:8888"
  11.     volumes:
  12.       - ./data:/app/money/data
  13.       - ./conf:/app/money/conf
  14.     networks:
  15.       - money
  16.     restart: always
  17.     command: [
  18.       "uvicorn",
  19.       "app:app",
  20.       "--host", "0.0.0.0",
  21.       "--port", "8888"
  22.     ]
  23.   money-frontend:
  24.     image: infq/money-front:latest
  25.     container_name: money-frontend
  26.     ports:
  27.       - "80:80"
  28.     depends_on:
  29.       - money
  30.     networks:
  31.       - money
  32.     environment:
  33.       - SERVER=http://money:8888
  34.       - PORT=80
  35.     restart: always
  36. networks:
  37.   money:
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4