【运维】使用 Docker Compose 快速启动项目全流程指南

文章目录

  • docker-compose启动项目流程
      • [1. 安装 Docker 和 Docker Compose](#1. 安装 Docker 和 Docker Compose)
      • [2. 准备 Docker Compose 文件](#2. 准备 Docker Compose 文件)
      • [3. 启动 Docker Compose 服务](#3. 启动 Docker Compose 服务)
      • [4. 检查运行状态](#4. 检查运行状态)
      • [5. 停止服务](#5. 停止服务)
      • [示例 `docker-compose.yaml` 文件](#示例 docker-compose.yaml 文件)
  • 为什么要用docker-compose
      • [1. 微服务架构的实现](#1. 微服务架构的实现)
      • [2. 依赖管理](#2. 依赖管理)
      • [3. 简化开发和测试环境](#3. 简化开发和测试环境)
      • [4. 方便的服务管理](#4. 方便的服务管理)
      • [5. 网络配置](#5. 网络配置)
      • 示例应用场景
  • 语法
  • 一个示例工程

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:
相关推荐
二进制coder3 小时前
Linux RTC 驱动子系统详细实现方案
linux·运维·实时音视频
淮北4943 小时前
linux系统学习(10.shell基础)
linux·运维·服务器·学习
视觉震撼3 小时前
RDP登录事件详细溯源分析脚本(兼容Windows PowerShell版本)
运维·网络·windows·网络安全·网络攻击模型·安全威胁分析·安全架构
刘一说3 小时前
Spring Boot 应用的云原生 Docker 化部署实践指南
spring boot·docker·云原生
❀͜͡傀儡师3 小时前
docker部署开源监控软件hertzbeat
docker·容器·开源·hertzbeat
demonre3 小时前
阿里云 Debian 13.1 安装 docker 并切换阿里云镜像源
后端·docker
noravinsc3 小时前
两台 centos 7.9 部署 pbs version 18.1.4 集群
linux·运维·centos
你的微笑,乱了夏天4 小时前
linux centos常用命令整理
linux·运维·centos
故林丶4 小时前
【Linux】CentOS 7.8 Docker + Docker Compose 安装
linux·docker·centos
paopao_wu4 小时前
DeepSeek-OCR实战(05):DeepSeek-OCR-WebUI部署(Docker)
docker·ai·容器·ocr