【docker】docker compose多容器部署

news2024/12/26 18:39:31

Docker Compose 的详细讲解与实际应用

  1. 什么是 Docker Compose?
    Docker Compose 是一个工具,用于定义和运行多容器 Docker 应用。
    通过一个 docker-compose.yml 文件,可以同时启动多个服务,简化多容器管理。

  2. Docker Compose 的核心功能

    • 服务定义:通过 YAML 文件描述服务的构建和运行方式。
    • 网络通信:服务间自动创建网络通信,无需额外配置。
    • 依赖管理:可以定义服务间的启动顺序。
    • 多环境支持:通过 .env 文件实现环境变量管理。

实际应用场景:部署微服务应用
场景:一个应用有三个服务:

  1. web 服务:前端 Web 应用,使用 Nginx。
  2. app 服务:后端服务,使用 Python Flask。
  3. db 服务:数据库,使用 MySQL。

优化后的文件结构

myapp/
├── docker-compose.yml
├── app/
│   ├── Dockerfile
│   ├── app.py
│   └── requirements.txt
└── db/

docker-compose.yml 文件

version: '3.8'

services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"
    networks:
      - myapp_network

  app:
    build:
      context: ./app
      dockerfile: Dockerfile
    networks:
      - myapp_network
    depends_on:
      - db

  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: myapp
    networks:
      - myapp_network

networks:
  myapp_network:
    driver: bridge

app/Dockerfile 文件

FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "app.py"]

app/requirements.txt 文件

flask
mysql-connector-python

app/app.py 文件

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello, Docker Compose!'

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)
  1. 操作步骤

    • 构建并启动服务
      docker-compose up --build
      
    • 查看运行的容器
      docker-compose ps
      
    • 停止服务
      docker-compose down
      
    • 查看容器日志
      docker-compose logs
      
  2. 应用网络配置

    • Docker Compose 默认为每个项目创建独立的网络,服务之间通过服务名称通信。
    • 例如:app 服务可以通过 db 直接访问数据库,无需额外配置 IP 地址。
  3. 扩展:多环境支持

    • 使用 .env 文件管理环境变量。
    • docker-compose.yml 中通过 ${VAR_NAME} 引用环境变量。
    • 示例 .env 文件:
      MYSQL_ROOT_PASSWORD=rootpassword
      MYSQL_DATABASE=myapp
      
    • 修改 docker-compose.yml
      environment:
        MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
        MYSQL_DATABASE: ${MYSQL_DATABASE}
      
  4. 总结
    Docker Compose 简化了多容器应用的管理流程,通过 YAML 文件定义服务间依赖、网络和存储配置,适合开发、测试和生产环境。

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

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

相关文章

游戏引擎学习第30天

仓库: https://gitee.com/mrxiao_com/2d_game 回顾 在这段讨论中,重点是对开发过程中出现的游戏代码进行梳理和进一步优化的过程。 工作回顾:在第30天,回顾了前一天的工作,并提到今天的任务是继续从第29天的代码开始&#xff0c…

探索HarmonyOS:一键掌握Router与NavPathStatck的传参和页面回调技巧

路由的选择 HarmonyOS提供两种路由实现的方式,分别是 Router 和 NavPatchStack。两者使用场景和特效各有优劣。 组件适用场景特点备注Router模块间与模块内页面切换通过每个页面的url实现模块间解耦NavPathStack模块内页面切换通过组件级路由统一路由管理 什么时候使…

每日计划-1203

1. 完成 236. 二叉树的最近公共祖先 ​ /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/ class Solution {public:TreeNode* lowe…

【AI系统】Auto-Tuning 原理

Auto-Tuning 原理 在硬件平台驱动算子运行需要使用各种优化方式来提高性能,然而传统的手工编写算子库面临各种窘境,衍生出了自动生成高性能算子的的方式,称为自动调优。在本文我们首先分析传统算子库面临的挑战,之后介绍基于 TVM…

多组学数据如何发表高分SCI论文,以RNA-Seq数据为例

随着高通量测序以及生物信息学的发展,R语言在生物大数据分析以及数据挖掘中发挥着越来越重要的作用。想要成为一名优秀的生物数据分析者与科研团队不可或缺的人才,除了掌握对生物大数据挖掘与分析技能之外,还要具备一定的统计分析能力与SCI论…

攻防世界-easyupload-新手训练区域

赛前回顾 1.文件上传绕过方式 1.mime:可以通过关闭浏览器js,浏览器f12切断点,burp抓包该文件类型来绕过 2.双写php绕过pphphp或者phpphp 3.使用ptml来绕过,phtml也是通过php来解析的 4..htaccess绕过,这个是apache的解…

位图的学习

一,位图介绍 位图(Bitmap)是一种用于存储图像的方式,它通过二维矩阵(由像素组成)来表示图像的每一个细节。每个像素通常对应一个特定的颜色值,位图的每个“位”就代表了图像的一个像素。 位图…

正则化(Regularization)

正则化(Regularization)是机器学习和统计建模中用来防止过拟合的一种技术。当模型过于复杂,例如拥有过多的参数或层级时,它可能会在训练数据上表现得非常好,但对未见过的数据(即测试数据或真实世界的数据&a…

集成网关 -- 新节点的开发说明

在node-red中,nVisual节点可以帮助我们更快快简捷的完成新的功能,今天我来分享一下关于node-Red中关于nVisual新节点开发基础教程。 首先来看一下基本node-red节点文件目录,当前新开发的7个节点都放在了“node-red\packages\node_modulesno…

小程序入门学习(六)之本地生活案例

效果图如下: 关键代码如下: app.json {"pages": ["pages/home/home","pages/message/message","pages/contact/contact"],"window": {"backgroundTextStyle": "light","n…

ArcGIS对地区进行筛选提取及投影转换

首先我们需要对坐标系和投影这些概念做进一步的解释。 1、基本概念: 想要理解坐标系和投影的概念,首先我们需要先理解什么是坐标。顾名思义,坐标就是指我们所在的位置,比如我在离旗杆东北部50m处,其实就是离旗杆东边…

MFC图形函数学习13——在图形界面输出文字

本篇是图形函数学习的最后一篇,相关内容暂告一段落。 在图形界面输出文字,涉及文字字体、大小、颜色、背景、显示等问题,完成这些需要系列函数的支持。下面做简要介绍。 一、输出文本函数 原型:virtual BOOL te…

Mysql如何实现原子性(MVCC实现原理)

Mysql如何实现原子性(MVCC实现原理) Mysql实现原子性主要通过一下机制 锁MVCC多版本并发控制 MVCC的实现原理 在介绍MVCC的实现原理之前需要先介绍一下Mysql表中的隐藏字段 , 以及undo_log版本链以及readview 1. Mysql中的隐藏字段 Mysql在创建表的时候除了我们所定义的字…

遇到问题:hive中的数据库和sparksql 操作的数据库不是同一个。

遇到的问题: 1、hive中的数据库和sparksql 操作的数据库不同步。 观察上面的数据库看是否同步 !!! 2、查询服务器中MySQL中hive的数据库,发现创建的位置没有在hdfs上,而是在本地。 这个错误产生的原因是&…

Leetcode - 周赛426

目录 一,3370. 仅含置位位的最小整数 二,3371. 识别数组中的最大异常值 三,3372. 连接两棵树后最大目标节点数目 I 四,3373. 连接两棵树后最大目标节点数目 II 一,3370. 仅含置位位的最小整数 两种做法&#xff1a…

用 Python 从零开始创建神经网络(十四):L1 和 L2 正则化(L1 and L2 Regularization)

L1 和 L2 正则化(L1 and L2 Regularization) 引言1. Forward Pass2. Backward pass到此为止的全部代码: 引言 正则化方法旨在降低泛化误差。我们首先讨论的正则化形式是L1正则化和L2正则化。L1和L2正则化用于计算一个数值(称为惩…

浅谈网络 | 应用层之流媒体与P2P协议

目录 流媒体名词系列视频的本质视频压缩编码过程如何在直播中看到帅哥美女?RTMP 协议 P2PP2P 文件下载种子文件 (.torrent)去中心化网络(DHT)哈希值与 DHT 网络DHT 网络是如何查找 流媒体 直播系统组成与协议 近几年直播比较火,…

云计算介绍_3(计算虚拟化——cpu虚拟化、内存虚拟化、io虚拟化、常见集群策略、华为FC)

计算虚拟化 1.计算虚拟化介绍1.1 计算虚拟化 分类(cpu虚拟化、内存虚拟化、IO虚拟化)1.1.1 cpu虚拟化 一级目录 一级目录 一级目录 一级目录 1.计算虚拟化介绍 1.1 计算虚拟化 分类(cpu虚拟化、内存虚拟化、IO虚拟化) 1.1.1 cpu虚…

关于 Qt编译遇到fatal error C1189: #error: “No Target Architecture的 解决方法

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/144205902 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV…

基于python的某音乐网站热门歌曲的采集与分析,包括聚类和Lda主题分析

一项目背景 在当前竞争激烈的市场环境下,分析酷狗音乐上的热门歌曲及其用户行为趋势,对平台运营、歌曲推荐和音乐创作具有重要意义。尤其是通过对酷狗音乐平台热门歌曲的数据采集与分析,可以深入理解用户偏好、歌曲流行的规律以及市场需求的…