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

文章目录

  • 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:

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

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

  • 安装 Docker Compose:

    对于 Ubuntu:

    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 文件的项目根目录,然后运行以下命令:

docker-compose up -d

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

docker-compose up

4. 检查运行状态

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

docker-compose ps

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

5. 停止服务

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

docker-compose down

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

示例 docker-compose.yaml 文件

以下是一个简单的 docker-compose.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 文件来描述这些服务及其依赖关系:

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 文件

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. 启动服务:
docker-compose up
  1. 后台启动服务:
docker-compose up -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 文件示例:

POSTGRES_DB=mydatabase
POSTGRES_USER=user
POSTGRES_PASSWORD=password

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

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:覆盖或扩展基本配置。

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

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

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:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/742525.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

别再盲目生产了!精益KPI管理让你事半功倍!

在竞争日益激烈的制造业领域,如何提升生产效率、降低成本、确保产品质量,是每个企业都需要面对的重要课题。而研华科技作为工业自动化领域的领军企业,凭借其独特的精益生产KPI分析与管理平台,为企业提供了一套行之有效的解决方案。…

高考志愿填报:选择好专业还是好学校?

人不走空 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌赋:斯是陋室,惟吾德馨 高考志愿填报:选择好专业还是好学校? 每年高考结束后,考生和家长面临的一个…

网络设备框架

文章目录 前言一、主要流程二、Linux网络设备驱动架构1.概述2.读入数据 总结 前言 Linux中的Ethernet驱动框架涉及到网络设备驱动程序的多个方面,包括初始化、注册、数据传输以及与物理层(PHY)的交互。以下是网络设备驱动架构的概述&#xf…

Spring Boot配置Springdoc

刚刚开通了一个公众号,会分享一些技术博客和自己觉得比较好的项目,同时会更新一些自己使用的工具和图书资料,后面会整理一些面试资料进行分享,觉得有兴趣的可以关注一下。 问题描述 之前文章有提到Spring Boot切换到Springdoc&a…

LeetCode刷题之HOT100之乘积最大子数组

2024/6/25 六月也来到了末尾,刷题也刷了一个半月左右。收获还是有的,最起码打字快了哈哈,做题啦! 1、题目描述 2、逻辑分析 一眼动态规划。 解题思路 遍历数组时计算当前最大值,不断更新令nowMax 为当前最大值&…

【azure openaiai翻译】翻译功能测试及对比(定价,响应速度,响应限制,翻译质量)

最近在测试翻译质量,用到了azure ai service里的文本翻译(简称ai翻译)和azure openai 。 告一段落,辅以笔记。这两种将分别从定价,响应速度,响应限制,翻译质量进行讲解。 1.azure openai 对于内…

EthernetIP IO从站设备数据 转opc ua项目案例

1 案例说明 设置网关采集EthernetIP IO设备数据把采集的数据转成opc ua协议转发给其他系统。 2 VFBOX网关工作原理 VFBOX网关是协议转换网关,是把一种协议转换成另外一种协议。网关可以采集西门子,欧姆龙,三菱,AB PLC&#xff0…

2005年下半年软件设计师【上午题】试题及答案

文章目录 2005年下半年软件设计师上午题--试题2005年下半年软件设计师上午题--答案 2005年下半年软件设计师上午题–试题 2005年下半年软件设计师上午题–答案

ModbusRTU协议报文解析

ModbusRTU协议报文解析 报文格式: 设备地址/从站地址: 1个字节 指定目标设备地址(从站地址) 功能码:1个字节 功能码在modbus协议用于表示信息帧的功能,例如读取线圈状态、读取寄存器等。 数据&#xff…

C语言数据结构-分析期末选择题考点(一)

昔我往矣,杨柳依依 今我来思,雨雪霏霏 契子✨ 有道是:得选择题者得天下。临近考试,便总结一下数据结构选择题的常考题型吧,以及预测一下考点,一来是为了备考,二来可以水文。祝各位老铁 “挂柯南…

韩顺平0基础学java——第30天

p600-611 坦克大战! 艰难推进中 坦克大战-子弹 发射子弹 1.当发射一颗子弹后,就相当于启动一个线程 2.玩家拥有子弹对象,当按下J时,就启动发射行为(线程),让子弹不停移动,形成…

(上位机APP开发)调用华为云命令API接口给设备下发命令

一、功能说明 通过调用华为云IOT提供的命令下发API接口,实现下面界面上相同的功能。调用API接口给设备下发命令。 二、JavaScript代码 function sendUnlockCommand() {var requestUrl = "https://9bcf4cfd30.st1.iotda-app.cn-north-4.myhuaweicloud.com:443/v5/iot/60…

全国首场以AI数字内容风控为主题的大会正式官宣,首批演讲嘉宾和议题揭晓!

曾经我们感叹的“AI迎来了iPhone时刻”,如今已变成“iPhone迎来了AI时刻”。前段时间,苹果全球开发者大会的召开,以及闻声而起的资本市场,无一不再次佐证了AI的无穷想象。 从OpenAI直播演示GPT-4o和谷歌的I/O开发者大会2024&…

空调制冷剂泄漏引发健康隐患,冷媒传感器实时监测至关重要

随着夏季的脚步逐渐临近,气温逐渐攀升,空调成为了许多家庭和企业必不可少的降温设备。然而,近年来多起因空调制冷剂泄漏导致的健康问题和安全事故,让人们开始重新审视空调使用安全的重要性。其中,冷媒传感器的实时监测…

智能AI在线人工智能对话源码系统 完整的代安装码+搭建部署教程

系统概述 智能 AI 在线人工智能对话源码系统是一款前沿的技术解决方案,它融合了人工智能的强大能力,为用户提供了一个高效、智能的对话平台。该系统基于先进的算法和模型,能够理解用户的输入,并以高度准确和自然的方式进行回应。…

深度测试中的隐藏面消除技术

by STANCH 标签:#计算机图形学 #深度测试 #深度测试 #隐藏面消除 1.概述 根据我们的日常经验,近处的物体会挡住后面的物体,在三维场景中通常通过深度缓冲来实现这样的效果。深度缓冲记录着屏幕对应的每个像素的深度值。模型一开始所在的局部…

计算机工具软件安装攻略:Chrome浏览器下载安装及使用

1 Chrome简介 Chrome是谷歌公司开发的一款免费网页浏览器它快速、稳定、安全拥有简洁流畅的界面和丰富的应用程序内置了强大的谷歌搜索引擎。Chrome使用Blink浏览器引擎和V8 JavaScript引擎支持多种插件和扩展程序让浏览网页更便捷。它可以与Android手机良好同步支持跨设备浏览…

AI降重技术:论文查重率的智能解决方案

现在大部分学校已经进入到论文查重降重的阶段了。如果查重率居高不下,延毕的威胁可能就在眼前。对于即将告别校园的学子们,这无疑是个噩梦。四年磨一剑,谁也不想在最后关头功亏一篑。 查重率过高,无非以下两种原因。要么是作为“…

中霖教育怎么样?中霖教育好吗?

中霖教育怎么样?中霖教育好吗? 中霖教育包括师资力量、课程设置、教学方法等都是经过不断完善来制定的,我们拥有专业且经验丰富的师资队伍,在教学过程中更注重个性化教学方式,针对每个学员的需求和学习情况制定专属的学习计划。 无论是在…

养殖自动化管理系统:开启智慧养殖新篇章

在现代农业的快速演进中,养殖业正经历一场前所未有的技术革命。养殖自动化管理系统,作为这场变革的前沿科技,正逐步成为推动行业高效、环保、可持续发展的关键力量。本文将深入探讨自动化养殖系统如何通过精准管理、智能监控、数据驱动决策&a…