2024-09-01
工具使用
00

目录

docker-compose启动项目流程
1. 安装 Docker 和 Docker Compose
2. 准备 Docker Compose 文件
3. 启动 Docker Compose 服务
4. 检查运行状态
5. 停止服务
示例 docker-compose.yaml 文件
为什么要用docker-compose
1. 微服务架构的实现
2. 依赖管理
3. 简化开发和测试环境
4. 方便的服务管理
5. 网络配置
示例应用场景
语法
基本语法结构
示例 docker-compose.yml 文件
关键字详解
version
services
volumes
networks
常用命令
进阶用法
使用 .env 文件
多个 Compose 文件
一个示例工程

docker-compose启动项目流程

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

1. 安装 Docker 和 Docker Compose

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

  • 安装 Docker:

    对于 Ubuntu:

    bash
    sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io

    对于 Windows 和 macOS,可以从 Docker 官网 下载 Docker Desktop 并按照提示进行安装。

  • 安装 Docker Compose:

    对于 Ubuntu:

    bash
    sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose

    对于 Windows 和 macOS,Docker Compose 已经包含在 Docker Desktop 中,无需额外安装。

2. 准备 Docker Compose 文件

确保 docker-compose.yaml 文件在您的项目根目录中。该文件定义了您的服务,包括镜像、容器名称、网络配置、挂载卷等。

3. 启动 Docker Compose 服务

打开终端或命令行窗口,导航到包含 docker-compose.yaml 文件的项目根目录,然后运行以下命令:

bash
docker-compose up -d

这个命令会在后台启动所有定义在 docker-compose.yaml 文件中的服务。如果希望在前台运行并查看日志输出,可以去掉 -d 参数:

bash
docker-compose up

4. 检查运行状态

您可以使用以下命令检查服务是否正常运行:

bash
docker-compose ps

这个命令会列出所有由 docker-compose 启动的容器及其状态。

5. 停止服务

如果您需要停止服务,可以在项目根目录中运行以下命令:

bash
docker-compose down

这个命令会停止并删除所有由 docker-compose 启动的容器。

示例 docker-compose.yaml 文件

以下是一个简单的 docker-compose.yaml 文件示例:

yaml
version: '3.8' services: web: image: python:3.8 volumes: - .:/code working_dir: /code command: python app.py ports: - "5000:5000" db: image: postgres:13 environment: POSTGRES_USER: user POSTGRES_PASSWORD: password POSTGRES_DB: mydatabase ports: - "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 自动为所有定义的服务创建一个专用网络,使得这些服务之间能够互相通信,而不需要额外配置复杂的网络设置。每个服务都可以通过服务名直接访问其他服务。

示例应用场景

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

  • 一个前端Web服务器(例如,使用Nginx)

  • 一个后端API服务器(例如,使用Flask或Django)

  • 一个数据库服务器(例如,使用PostgreSQL)

在没有 docker-compose 的情况下,我们需要分别配置和管理这些服务,这可能会非常复杂且容易出错。而使用 docker-compose,我们可以定义一个简单的 docker-compose.yaml 文件来描述这些服务及其依赖关系:

yaml
version: '3.8' services: web: image: nginx:latest ports: - "80:80" volumes: - ./nginx.conf:/etc/nginx/nginx.conf depends_on: - api api: image: my-api-server:latest build: ./api ports: - "5000:5000" environment: - DATABASE_URL=postgres://user:password@db:5432/mydatabase db: image: postgres:13 environment: POSTGRES_USER: user POSTGRES_PASSWORD: password POSTGRES_DB: mydatabase ports: - "5432:5432" volumes: - postgres-data:/var/lib/postgresql/data volumes: postgres-data:

docker-compose 为开发人员提供了一种简便的方法来定义、管理和运行多容器Docker应用程序。它在微服务架构、依赖管理、一致的开发和生产环境、服务管理以及网络配置方面提供了显著的优势,使得复杂应用程序的管理和维护变得更加容易和高效。

语法

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

基本语法结构

docker-compose.yml 文件是一个 YAML 文件,通常包含以下几部分:

  1. version:指定 Docker Compose 文件的版本。

  2. services:定义应用程序中的服务。

  3. volumes:定义数据卷。

  4. networks:定义网络。

示例 docker-compose.yml 文件

yaml
version: '3.8' # Docker Compose 文件版本 services: web: image: nginx:latest # 使用的镜像 ports: - "80:80" # 映射端口 volumes: - ./html:/usr/share/nginx/html # 挂载主机目录到容器 networks: - webnet # 使用的网络 app: build: context: ./app # Dockerfile 所在目录 dockerfile: Dockerfile ports: - "5000:5000" volumes: - ./app:/app networks: - webnet depends_on: - db # 指定依赖的服务 db: image: postgres:latest environment: POSTGRES_DB: mydatabase POSTGRES_USER: user POSTGRES_PASSWORD: password volumes: - db_data:/var/lib/postgresql/data networks: - webnet volumes: db_data: # 定义一个名为 db_data 的卷 networks: webnet: # 定义一个名为 webnet 的网络

关键字详解

version

指定 Compose 文件的版本。不同版本支持的语法和功能有所不同。常用的版本包括 22.133.8 等。

services

定义应用中的各个服务。每个服务可以包含以下字段:

  • image:指定服务使用的 Docker 镜像。

  • build:构建镜像的配置,通常包含 contextdockerfile

  • ports:暴露和映射端口。

  • volumes:挂载卷。

  • networks:服务使用的网络。

  • environment:环境变量配置。

  • depends_on:指定服务依赖关系。

volumes

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

networks

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

常用命令

  1. 启动服务:
sh
docker-compose up
  1. 后台启动服务:
sh
docker-compose up -d
  1. 停止服务:
sh
docker-compose down
  1. 查看服务日志:
sh
docker-compose logs
  1. 重新构建服务:
sh
docker-compose build
  1. 列出正在运行的服务:
sh
docker-compose ps

进阶用法

使用 .env 文件

Docker Compose 支持使用 .env 文件来设置环境变量。这些变量可以在 docker-compose.yml 文件中使用。

.env 文件示例:

plaintext
POSTGRES_DB=mydatabase POSTGRES_USER=user POSTGRES_PASSWORD=password

docker-compose.yml 文件中使用环境变量:

yaml
services: db: image: postgres:latest environment: POSTGRES_DB: ${POSTGRES_DB} POSTGRES_USER: ${POSTGRES_USER} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}

多个 Compose 文件

在复杂的应用中,你可能需要使用多个 Compose 文件。例如,一个用于开发环境,一个用于生产环境:

  • docker-compose.yml:基本配置。

  • docker-compose.override.yml:覆盖或扩展基本配置。

启动时可以指定多个文件:

sh
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

css
version: '3' services: money: image: infq/money:latest container_name: money environment: - PORT=8888 - WorthUseCache=true ports: - "8888:8888" volumes: - ./data:/app/money/data - ./conf:/app/money/conf networks: - money restart: always command: [ "uvicorn", "app:app", "--host", "0.0.0.0", "--port", "8888" ] money-frontend: image: infq/money-front:latest container_name: money-frontend ports: - "80:80" depends_on: - money networks: - money environment: - SERVER=http://money:8888 - PORT=80 restart: always networks: money:
如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:Dong

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!