【运维】使用 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.8volumes:- .:/codeworking_dir: /codecommand: python app.pyports:- "5000:5000"db:image: postgres:13environment:POSTGRES_USER: userPOSTGRES_PASSWORD: passwordPOSTGRES_DB: mydatabaseports:- "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:latestports:- "80:80"volumes:- ./nginx.conf:/etc/nginx/nginx.confdepends_on:- apiapi:image: my-api-server:latestbuild: ./apiports:- "5000:5000"environment:- DATABASE_URL=postgres://user:password@db:5432/mydatabasedb:image: postgres:13environment:POSTGRES_USER: userPOSTGRES_PASSWORD: passwordPOSTGRES_DB: mydatabaseports:- "5432:5432"volumes:- postgres-data:/var/lib/postgresql/datavolumes: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: Dockerfileports:- "5000:5000"volumes:- ./app:/appnetworks:- webnetdepends_on:- db  # 指定依赖的服务db:image: postgres:latestenvironment:POSTGRES_DB: mydatabasePOSTGRES_USER: userPOSTGRES_PASSWORD: passwordvolumes:- db_data:/var/lib/postgresql/datanetworks:- webnetvolumes: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:latestenvironment: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:latestcontainer_name: moneyenvironment:- PORT=8888- WorthUseCache=trueports:- "8888:8888"volumes:- ./data:/app/money/data- ./conf:/app/money/confnetworks:- moneyrestart: alwayscommand: ["uvicorn","app:app","--host", "0.0.0.0","--port", "8888"]money-frontend:image: infq/money-front:latestcontainer_name: money-frontendports:- "80:80"depends_on:- moneynetworks:- moneyenvironment:- SERVER=http://money:8888- PORT=80restart: alwaysnetworks:money:

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RFID技术在汽车轮胎加工工艺中的革新应用

RFID技术在汽车轮胎加工工艺中的革新应用 物联网技术的飞速发展,无线射频识别(Radio Frequency Identification,简称RFID)技术因其独特的优势,在各行各业中展现出巨大的应用潜力。特别是在汽车制造业,RFID…

推荐一款好用的浏览器翻译插件——欧路翻译

近些年,机器翻译的效果越来越好,于是也有更多的开发者,开发了免费使用的浏览器翻译插件。这大大的帮助了我们查看国外的网站,有利于大家获取更多的信息。 在此,给大家推荐一款免费好用的浏览器插件——欧路翻译。支持…

我在高职教STM32——LCD液晶显示(4)

大家好,我是老耿,高职青椒一枚,一直从事单片机、嵌入式、物联网等课程的教学。对于高职的学生层次,同行应该都懂的,老师在课堂上教学几乎是没什么成就感的。正因如此,才有了借助 CSDN 平台寻求认同感和成就…

[经验] 如何做虾炒白菜 #学习方法#知识分享

如何做虾炒白菜 虾炒白菜的做法 虾炒白菜是一道营养丰富且美味可口的菜肴,虾肉的鲜嫩与白菜的甜脆相结合,口感极佳。接下来,让我们一起来学习一下虾炒白菜的详细做法。 食材准备 虾:约200克(选用新鲜活虾&#xff…

【深度学习】python之人工智能应用篇——视频生成技术

视频生成技术是一种基于深度学习和机器学习的先进技术,它使得计算机能够根据给定的文本、图像、视频等单模态或多模态数据,自动生成符合描述的、高保真的视频内容。这种技术主要依赖于深度学习模型,如生成对抗网络(GAN&#xff09…

基于 Native 技术加速 Spark 计算引擎

本文整理自 2024 年 6 月 DataFunSummit 2024 OLAP 架构峰会 Lakehouse 湖仓一体化架构论坛的同名主题分享。 今天分享的主题是基于 Native 技术加速 Spark 计算引擎,大家将会了解到如何基于 ClickHouse 来改造 Spark 引擎,最终获得较为可观的性能提升。…

C++实现多线程安全的生产者消费者字节缓冲区

文章目录 介绍实现细节**BytesBuffer 类****生产者和消费者** 性能优化总结 介绍 本文介绍如何使用C实现一个多线程安全的简单字节缓冲区,并进行性能测试。 实现细节 BytesBuffer 类 BytesBuffer 类通过使用条件变量和双缓冲区机制,实现了生产者和消…

【Linux】 在 Linux 中更换主机名

那年夏天我和你躲在 这一大片宁静的海 直到后来我们都还在 对这个世界充满期待 今年冬天你已经不在 我的心空出了一块 很高兴遇见你 让我终究明白 回忆比真实精彩 🎵 王心凌《那年夏天宁静的海》 在 Linux 系统中,更换主机名是系统…

使用Redis Lua脚本实现高级限流策略

引言 在现代的Web应用中,限流是一个非常重要的功能,它帮助我们控制对某些资源的访问频率,以防止系统过载和滥用。Redis是一个高性能的键值存储系统,它的原子操作和Lua脚本功能为实现复杂的限流策略提供了强大的支持。本文将详细介…

day50 1143.最长公共子序列 1035.不相交的线 53. 最大子序和 392.判断子序列

1143. 最长公共子序列 提示 给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。 一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删…

大腾智能,基于云原生的国产工业协同平台

大腾智能是一家基于云原生的国产工业软件与数字化协同平台,专注于推动企业数字化转型与升级,为企业提供一系列专业、高效的云原生数字化软件及方案,推动产品设计、生产及营销展示的革新,实现可持续发展。 大腾智能旗下产品 3D模型…

USB2.0学习4--USB包结构和包类型

目录 1. USB包基本结构 1.1 SOP域(Start Of Packet) 1.2 SYNC域(同步域) 1.3 PID域(标识域) 1.4 地址域(ADDR) 1.5 帧号域(Fram) 1.6 数据域&#xff…

前端也需要知道的一些常用linux命令

前端也需要知道的一些常用linux命令 1.问题背景2.连接工具(SecureCRT_Portable)a.下载工具b.连接服务器c.登录到root账户 3.基本命令a.cd命令和cd ..b.ll命令和ls命令c:cp命令d.rm命令e:rz命令f.unzip命令g.mv命令h.pwd命令(这里没有用到&…

机器学习之支持向量机丨神经网络测试

选择题 SVM中的什么是支持向量? 【 正确答案: D】 A. 数据集中的所有样本 B. 模型参数 C. 模型的预测输出 D. 训练数据中离决策边界最近的样本点 支持向量机(SVM)算法的主要目标是: 【 正确答案: C】 A. 最小化间隔 B. 最小化损失函数 C. 最大化间隔 D.…

【LinuxC语言】TCPIP的经典5层结构

文章目录 前言TCP/IP的结构结构示意图结构的含义生活中的TCP/IP例子总结前言 TCP/IP,全称传输控制协议/因特网互联协议,是用于在互联网上进行数据交换的一组协议,形成了互联网的基础。TCP/IP的经典五层结构包括:物理层、数据链路层、网络层、传输层和应用层。这些层次各自…

CSS 相对父级固定,且不随滚动条滚动

CSS 相对父级固定&#xff0c;且不随滚动条滚动 <div class"parent"><div class"child-one">我是固定位置的子元素</div><div class"child-tow">我是滚动的子元素</div> </div>.parent {height: 200px; /*…

以正合,以奇胜,守正出奇,稳健

个人感觉说实话&#xff0c;在所里待的这几年&#xff0c;尤其是后两年&#xff0c;收获颇多&#xff0c;不管是智识上的&#xff0c;还有一堆兄弟&#xff0c;还有愿意分享和帮助我的老师们。 不管是搞科研还是做生意&#xff0c;稳健&#xff0c;在所里的时候&#xff0c;有…

Python-天天基金网爬虫分析

1.主题式网络爬虫名称&#xff1a;天天基金网爬虫分析 2.主题式网络爬虫爬取的内容与数据特征分析&#xff1a;通过访问天天基金的网站&#xff0c;爬取相对应的信息&#xff0c;最后保存下来做可视化分析。 3.主题式网络爬虫设计方案概述&#xff08;包括实现思路与技术难点…

益百分4.0版益生君重磅来袭,为您保驾护航

益百分4.0版益生君重磅来袭&#xff0c;为您保驾护航 暑期来临&#xff0c;很多人们终于等来了一年中最幸福的时刻&#xff0c;三五成群、结伴旅游成为他们选择欢度暑假的方式。 全国各地的旅游景点也迎来了旺季&#xff0c;各大旅游公司也推出了各种各样的旅游团购活动&#x…

FFmpeg交叉编译报错pkg-config not found

ffmpeg交叉编译时报错&#xff1a; WARNING: arm-linux-gnueabihf-pkg-config not found, library detection may fail.不慌&#xff0c;没有就下载嘛&#xff0c;直接install&#xff1a; sudo apt-get install pkg-config-arm-linux-gnueabihf 参考&#xff1a; How To I…