Compose容器编排示例

 前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除 

目录如下:

一、从源代码开始构建、部署和管理应用程序

1.1、创建项目目录并准备应用程序的代码及其依赖

1.2、创建Dockerfile

1.3、在Compose文件中定义服务

1.4、通过Docker Compose构建并运行应用程序

1.5、编辑Compose文件添加绑定挂载

1.6、使用Docker Compose重新构建并运行应用程序

1.7、升级应用程序

1.8、试用其他Docker Compose命令

二. 更改Compose文件应用程序以适应不同环境

2.1、针对开发环境的配置

2.2、针对生产环境的配置

2.3、部署生产环境

三. 针对Docker Compose 应用程序运行管理任务

3.1、添加管理任务服务

3.2、运行数据库备份任务

致谢


一、从源代码开始构建、部署和管理应用程序

1.1、创建项目目录并准备应用程序的代码及其依赖

(1)创建项目目录并进入:

 mkdir flask-web && cd flask-web

(2)创建app.py文件并添加以下代码:

 import timeimport redisfrom flask import Flask​app = Flask(__name__)cache = redis.Redis(host='redis', port=6379)​def get_hit_count():retries = 5while True:try:return cache.incr("hits")except redis.exceptions.ConnectionError as exc:if retries == 0:raise excretries -= 1time.sleep(0.5)​@app.route('/')def hello():count = get_hit_count()return "Hello World! I have been seen {} times.\n".format(count)

(3)创建requirements.txt文件并添加依赖:

 flaskredis

1.2、创建Dockerfile

创建Dockerfile并添加以下内容:

 FROM python:3.4-alpine​# 将当前目录添加到镜像值的./code目录ADD . /codeWORKDIR /code​RUN pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple​CMD ['python', 'app.py']

1.3、在Compose文件中定义服务

创建docker-compose.yml文件并添加以下内容:

 version: '3'services:web:build: .ports:- "5000:5000"redis:image: "redis:alpine"

1.4、通过Docker Compose构建并运行应用程序

启动应用程序:

 [root@docker flask-web]# docker-compose upCreating network "flask-web_default" with the default driverBuilding web...web_1    |  * Debugger is active!web_1    |  * Debugger PIN: 527-644-234web_1    | 172.20.0.1 - - [29/May/2022 14:02:05] "GET / HTTP/1.1" 200 -

切换到另一个终端窗口,使用curl工具访问http://0.0.0.0:5000查看返回的消息

 [root@docker flask-web]# curl http://0.0.0.0:5000Hello from Docker! I have been seen 1 times.

再次执行上述命令(或者在浏览器上刷新页面),会发现次数增加

 [root@docker flask-web]# curl http://0.0.0.0:5000Hello from Docker! I have been seen 2 times.

执行docker images命令列出本地镜像。

[root@docker flask-web]# docker images
REPOSITORY      TAG          IMAGE ID       CREATED              SIZE
flask-web_web   latest       7d9877afb6bd   About a minute ago   60.6MB
redis           alpine       c3ea2db12504   3 days ago           28.4MB
python          3.7-alpine   7642396105af   3 days ago           45.5MB

将工作目录切换到项目根目录,执行docker-compose down命令停止应用程序。也可以切回启动该应用的原终端窗口,按<Ctrl>+<C>组合键停止应用程序

^CGracefully stopping... (press Ctrl+C again to force)
Stopping flask-web_web_1   ... done
Stopping flask-web_redis_1 ... done

1.5、编辑Compose文件添加绑定挂载

(1) 编辑项目目录中的docker-compose.yml文件,为Web服务添加绑定挂载 :

version: '3'
services:web:build: .ports:- "5000:5000"volumes:- .:/coderedis:image: "redis:alpine"

1.6、使用Docker Compose重新构建并运行应用程序

再次启动应用程序:

docker-compose up

切换到另一个终端窗口,使用curl工具访问http://0.0.0.0:5000查看返回的消息,发现计数还会增加

[root@docker flask-web]# curl http://0.0.0.0:5000
Hello from Docker! I have been seen 3 times.

1.7、升级应用程序

(1)更改app.py文件中的问候语并保存。例如,将其中的“Hello World!”消息改为“Hello from Docker!”

(2)再次使用curl工具访问http://0.0.0.0:5000查看返回的消息,发现问候语句会更改,计数也还会增加:

[root@docker flask-web]# curl http://0.0.0.0:5000
Hello from Docker! I have been seen 4 times.

(3)切换到执行docker-compose up命令的终端窗口,按<Ctrl>+<C>组合键停止应用程序

1.8、试用其他Docker Compose命令

(1)在后台运行服务:

[root@docker flask-web]# docker-compose up -d
Starting flask-web_web_1   ... done
Starting flask-web_redis_1 ... done

(2)查看当前正在运行的服务:

[root@docker flask-web]# docker-compose psName                     Command               State                    Ports                  
-----------------------------------------------------------------------------------------------------
flask-web_redis_1   docker-entrypoint.sh redis ...   Up      6379/tcp                                
flask-web_web_1     python app.py                    Up      0.0.0.0:5000->5000/tcp,:::5000->5000/tcp

(3)查看Web服务的环境变量:

[root@docker flask-web]# docker-compose run web env
PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
...
HOME=/rootdocker-compose run web env

(4)停止应用程序并删除容器以及卷:

[root@docker flask-web]# docker-compose down --volumes
Stopping flask-web_web_1   ... done
Stopping flask-web_redis_1 ... done
Removing flask-web_web_run_b2b716a32ed2 ... done
Removing flask-web_web_1                ... done
Removing flask-web_redis_1              ... done
Removing network flask-web_default

二. 更改Compose文件应用程序以适应不同环境

2.1、针对开发环境的配置

docker-compose.override.yml文件示例:

web:build: .volumes:- './:/code'ports:- 8883:80environment:DEBUG: 'true'
db:command: '-d'ports:- 5432:5432
cache:ports:- 6379:6379

向主机公开一些端口,将代码进行绑定挂载,并构建Web镜像。执行docker-compose up命令会自动读取override文件。

2.2、针对生产环境的配置

docker-compose.prod.yml文件示例:

web:ports:- 80:80environment:PRODUCTION: 'true'
cache:environment:TTL: '5000'

2.3、部署生产环境

使用以下命令部署:

docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d

这将使用docker-compose.yml和docker-compose.prod.yml中的配置部署所有3个服务

三. 针对Docker Compose 应用程序运行管理任务

运行数据库备份应用程序:

3.1、添加管理任务服务

从基础的docker-compose.yml开始:

web:images: example/my_web_app:latestlinks:- db
db:image: postgres:latest

在docker-compose.admin.yml文件添加一个新的服务,运行数据库导出或备份服务示例:

dbadmin:build: database_admin/links:- db

3.2、运行数据库备份任务

(1)启动常规环境:

docker-compose up -d

(2)运行数据库备份:

docker-compose -f docker-compose.yml -f docker-compose.admin.yml run dbadmin db-backup

致谢

在此,我要对所有为知识共享做出贡献的个人和机构表示最深切的感谢。同时也感谢每一位花时间阅读这篇文章的读者,如果文章中有任何错误,欢迎留言指正。

学习永无止境,让我们共同进步!!

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

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

相关文章

OOP和模板

在面向对象编程&#xff08;Object-Oriented Programming&#xff0c;简称OOP&#xff09;中&#xff0c;并没有直接称为“模板”的概念&#xff0c;但你可能是在提到与模板相关的概念&#xff0c;如“泛型编程”中的模板&#xff08;特别是C中的模板&#xff09;。然而&#x…

电动汽车与 PLM:下一代转型的结合

汽车电气化是汽车行业持续变革的驱动力&#xff0c;因此电动汽车 (EV) 行业成为当今最令人兴奋、最相关和最必要的创新领域之一。快速且有利可图地设计电动汽车及其零部件&#xff0c;同时使其受到消费者的青睐&#xff0c;是一项艰巨的挑战。因此&#xff0c;电动汽车行业企业…

docker————容器的管理

目录 1、运行容器 1、前台启动 2、后台启动 2、查看运行的容器 3、进入正在运行的容器 1、方式一 2、方式二 3、两种方式的区别 4、删除容器 1、删除指定的容器 2、删除所有的容器 方式一 方式二 5、启动和停止容器的操作 1、启动容器 2、重启容器 3、停止当前正…

体验GM CHM Reader Pro,享受高效阅读

还在为CHM文档的阅读而烦恼吗&#xff1f;试试GM CHM Reader Pro for Mac吧&#xff01;它拥有强大的功能和出色的性能&#xff0c;能够让你轻松打开和阅读CHM文件&#xff0c;享受高效、舒适的阅读体验。无论是学习、工作还是娱乐&#xff0c;GM CHM Reader Pro都能成为你的得…

python数据分析——数据分类汇总与统计

数据分类汇总与统计 前言一、Groupby分类统计语法按列分组示例一示例二示例三 遍历各分组示例 使用字典和Series分组示例 使用函数分组示例 二、数据聚合groupby的聚合函数示例一示例二 逐列及多函数应用示例一示例二 返回不含行索引的聚合数据示例 三、一般性的“拆分-应用-合…

我们从北京-举家南迁 来杭州了-分享不一样的变化

-----------------------------------写在前面 ----------------------------------- 核心动机&#xff1a; 北京十年&#xff0c;因拿不到户口&#xff0c;举家南迁&#xff0c; hh已经南迁。现已在杭州打卡工作好几天了&#xff08;2024年4月20搬迁杭州&#xff09; ----…

数字展厅设计需要注意哪些细节

1、用户体验 数字展厅是为了让用户感受到更多的信息和更好的体验&#xff0c;所以设计数字展厅必须以用户体验为中心&#xff0c;从用户的角度考虑&#xff0c;设计出符合用户需求和品牌形象的数字展示空间。 2、展示内容 数字展厅的展示内容是吸引用户的关键&#xff0c;要注重…

(五)STM32F407 cubemx IIC驱动OLED(2)硬件篇

这篇文章主要是个人的学习经验&#xff0c;想分享出来供大家提供思路&#xff0c;如果其中有不足之处请批评指正哈。   废话不多说直接开始主题&#xff0c;本人是基于STM32F407VET6芯片&#xff0c;但是意在你看懂这篇文章后&#xff0c;不管是F1,F4,H7等一系列系统硬件IIC配…

Docker 基础认识

文章目录 概念铺垫&#xff08;1&#xff09;概念铺垫&#xff08;2&#xff09;概念铺垫 &#xff08;3&#xff09;概念铺垫&#xff08;4&#xff09;Docker 定义Docker 特点Docker 架构 概念铺垫&#xff08;1&#xff09; 虚拟化相关概念 物理机&#xff1a;实际的服务器…

宽电压降压恒压 DC-DC 电源管理芯片

产品描述 AP8851 一款宽电压范围降压型 DC-DC 电源管理芯片&#xff0c;内部集成使能 开关控制、基准电源、误差放大器、过 热保护、限流保护、短路保护等功能&#xff0c; 非常适合在宽输入电压范围具有优良 的负载和线性调整度。 AP8851 芯片包含每周期的峰值 限流、软启动…

小米消金以创新驱动,拓展服务广度与品质高度

在当前复杂多变的经济环境下&#xff0c;扩大内需、促进消费已成为经济增长的重要引擎。重庆小米消费金融有限公司&#xff08;以下简称“小米消金”&#xff09;作为消费金融行业的佼佼者&#xff0c;积极响应国家政策&#xff0c;坚守“金融为民、服务实体”的初心&#xff0…

WordPress 、Typecho 站点的 MySQL/MariaDB 数据库优化

今天明月给大家分享一下 WordPress 、Typecho 站点的 MySQL/MariaDB 数据库优化&#xff0c;无论你的站点采用是 WordPress 还是 Typecho&#xff0c;都要用到 MySQL/MariaDB 数据库&#xff0c;我们以 MySQL 为主&#xff08;MariaDB 其实跟 MySQL 基本没啥大的区别&#xff0…

JUC下的Java java.util.concurrent.Locks详解

java.util.concurrent.locks 包介绍 java.util.concurrent.locks 包是Java并发编程中非常重要的一个部分&#xff0c;它提供了比内置synchronized关键字更为灵活的锁机制&#xff0c;用于多线程环境下的同步控制。这个包中最核心的是Lock接口&#xff0c;以及一系列实现类&…

【APM】在Kubernetes中,使用Helm安装loki-distributed 2.9.6

1、Loki简介 Grafana Loki 是一个开源的云原生日志聚合和分析系统&#xff0c;由 Grafana Labs 开发并维护。Loki 专注于为大规模的日志处理提供经济高效且易于管理的解决方案&#xff0c;尤其适用于微服务架构以及容器化和分布式环境。 以下是 Loki 的核心特性与设计原则&am…

如何通过香港站群服务器高效实现网站内容的快速更新?

如何通过香港站群服务器高效实现网站内容的快速更新? 在当今激烈的数字市场竞争中&#xff0c;网站内容的快速更新对于吸引用户和保持竞争优势至关重要。而利用香港站群服务器实现这一目标&#xff0c;则具备诸多优势。下面将详细探讨如何通过香港站群服务器高效实现网站内容…

thinkphp6使用layui分页组件做分页效果

博主用的是layui2.9.8的版本&#xff0c;但这个版本的分页组件是动态效果的&#xff0c;但我需要的是静态分页&#xff0c;所以我自己封装了一个生成layui的分页代码生成代码。代码如下&#xff1a; 1、先创建文件&#xff0c;路径是extent/layui/LayuiPage.php&#xff0c;加…

基于MetaGPT的LLM Agent学习实战(一)

前言 我最近一直在做基于AI Agent 的个人项目&#xff0c; 因为工作加班较多&#xff0c;设计思考时间不足&#xff0c;这里借着Datawhale的开源学习课程《MetaGPT智能体理论与实战》课程&#xff0c;来完善自己的思路&#xff0c;抛砖引玉&#xff0c;和各位开发者一起学习&am…

Run ‘conda init‘ before ‘conda activate‘

使用conda activate 虚拟环境名称的时候提示&#xff1a;Run conda init before conda activate 解决办法&#xff1a; 首先需要确保是管理员身份运行这个cmd窗口。 然后&#xff0c;现在执行一下&#xff1a;conda init 命令&#xff0c;最后再执行&#xff1a;conda activate…

纯血鸿蒙APP实战开发——首页下拉进入二楼效果案例

介绍 本示例主要介绍了利用position和onTouch来实现首页下拉进入二楼、二楼上划进入首页的效果场景&#xff0c;利用translate和opacity实现动效的移动和缩放&#xff0c;并将界面沉浸式&#xff08;全屏&#xff09;显示。 效果图预览 使用说明 向下滑动首页页面超过触发距…

【postgresql初级使用】创建不同索引类型,选择适合数据类型的索引,查看执行计划,评估不同索引路径的性能

索引的使用 ​专栏内容&#xff1a; postgresql使用入门基础手写数据库toadb并发编程 个人主页&#xff1a;我的主页 管理社区&#xff1a;开源数据库 座右铭&#xff1a;天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物. 文章目录 索引的使用概…