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 time
 import redis
 from flask import Flask
 ​
 app = Flask(__name__)
 cache = redis.Redis(host='redis', port=6379)
 ​
 def get_hit_count():
     retries = 5
     while True:
         try:
             return cache.incr("hits")
         except redis.exceptions.ConnectionError as exc:
             if retries == 0:
                 raise exc
             retries -= 1
             time.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文件并添加依赖:

 flask
 redis

1.2、创建Dockerfile

创建Dockerfile并添加以下内容:

 FROM python:3.4-alpine
 ​
 # 将当前目录添加到镜像值的./code目录
 ADD . /code
 WORKDIR /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 up
 Creating network "flask-web_default" with the default driver
 Building web
 ...
 web_1    |  * Debugger is active!
 web_1    |  * Debugger PIN: 527-644-234
 web_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:5000
 Hello from Docker! I have been seen 1 times.

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

 [root@docker flask-web]# curl http://0.0.0.0:5000
 Hello 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:
     - .:/code
  redis:
    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 ps
      Name                     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:80
  environment:
    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:80
  environment:
    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:latest
  links:
    - 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

致谢

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

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

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

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

相关文章

GD32驱动LCD12864

目录 1、引言 1.1、LCD12864基本概念和作用。 1.2、硬件引脚 2、GD32微控制器简介 3、LCD12864显示屏简介 3.1、模块引脚说明 3.2、模块连接方式 4、驱动原理 4.1、指令集 4.2、显示坐标关系 5、软件开发 6、硬件连接 7、效果演示 8、附录 1、引言 1.1、LCD12…

C语言 | Leetcode C语言题解之第88题合并两个有序数组

题目&#xff1a; 题解&#xff1a; void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n) {int p1 m - 1, p2 n - 1;int tail m n - 1;int cur;while (p1 > 0 || p2 > 0) {if (p1 -1) {cur nums2[p2--];} else if (p2 -1) {cur nu…

sudo apt-get update失败,怎么解决

本篇文章主要是从我的解决方案出发&#xff0c;因为个体差异性&#xff0c;对大家的帮助可能有限&#xff0c;不过大家也可以作为参考之一。 输入sudo apt-get update&#xff0c;结果一直显示&#xff1a; W: 无法下载 http://mirrors.aliyun.com/ubuntu/dists/jammy-securi…

今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 5月14日,星期二

每天一分钟&#xff0c;知晓天下事&#xff01; 2024年5月14日 星期二 农历四月初七 1、 两部门&#xff1a;2024年全国计划招聘“特岗计划”教师3.7万名。 2、 人社部&#xff1a;2024年“三支一扶”计划拟招募3.44万名高校毕业生。 3、 财政部&#xff1a;5月17日、5月24日…

Nios实验入门——用Verilog编程方式完成LED流水灯显示并使用串口输出“Hello Nios-II”字符到笔记本电脑

文章目录 前言一、Verilog编程方式完成LED流水灯显示1.1 新建工程并添加FPGA芯片1.2 新建.v文件并添加至顶层实体1.3 引脚分配1.4 编译(包含分析与综合)1.5 选择烧录器1.6 添加烧录文件1.7 下载1.8 实验现象 二、Verilog编程方式实现串口2.1 uart_tx.v文件2.2 test.v文件2.3 to…

Linux x86_64 dump_stack()函数基于FP栈回溯

文章目录 前言一、dump_stack函数使用二、dump_stack函数源码解析2.1 show_stack2.2 show_stack_log_lvl2.3 show_trace_log_lvl2.4 dump_trace2.5 print_context_stack 参考资料 前言 Linux x86_64 centos7 Linux&#xff1a;3.10.0 一、dump_stack函数使用 dump_stack函数…

LeetCode 力扣题目:买卖股票的最佳时机 III

❤️❤️❤️ 欢迎来到我的博客。希望您能在这里找到既有价值又有趣的内容&#xff0c;和我一起探索、学习和成长。欢迎评论区畅所欲言、享受知识的乐趣&#xff01; 推荐&#xff1a;数据分析螺丝钉的首页 格物致知 终身学习 期待您的关注 导航&#xff1a; LeetCode解锁100…

Autosar架构

蓝框那种叫component&#xff0c;绿框的叫function cluster。 接口 有三种接口&#xff0c;RTE跟SWC之间链接的叫Autosar Interface&#xff0c;RTE跟BSW的Components链接是Standardized Interface&#xff0c;RTE跟BSW的services链接的是Standardized Autosar Interface。 St…

C语言 8 函数递归

目录 1. 递归是什么&#xff1f; 2.递归的限制条件 3. 递归举例1 4. 递归举例2 5.迭代 6. 递归举例3 拓展学习&#xff1a; 1. 递归是什么&#xff1f; 递归是学习C语⾔函数绕不开的⼀个话题&#xff0c;那什么是递归呢&#xff1f; 递归其实是⼀种解决问题的⽅法&#xff0c…

【Spring】Springmvc学习Ⅲ

# Spring&#xff4d;vc学习Ⅲ 文章目录 一、图书管理系统1. 功能1.1 登录前端接口前端代码后端接口后端代码 1.2 图书列表展示步骤:图书类代码mock数据代码控制层调用代码服务层代码&#xff08;存储除数据库中需要存储的数据&#xff09; 2. 分层控制2.1 三层架构2.2 代码重…

Softing dataFEED OPC Suite通过OPC UA标准加速数字化转型

数字化转型的关键在于成功将信息技术&#xff08;IT&#xff09;与运营技术&#xff08;OT&#xff09;相融合&#xff0c;例如将商业应用程序和服务器与可编程逻辑控制器&#xff08;PLC&#xff09;和设备传感器相融合&#xff0c;为此&#xff0c;各种设备和系统必须能够相互…

【Day1:JAVA导学】

目录 1、path环境变量2、Java背景介绍2.1 Java SE&#xff1a;2.2 Java ME&#xff1a;2.3 Java EE&#xff1a; 3、Java的跨平台性3.1 Java跨平台的原理&#xff1a; 4、Java开发程序的三个步骤5、JDK的组成和配置5.1 JDK的组成&#xff1a; 6、IDEA项目结构介绍7、Java关键字…

01 | 为什么需要消息队列?

哪些问题适合使用消息队列来解决&#xff1f; 1. 异步处理 2. 流量控制 使用消息队列隔离网关和后端服务&#xff0c;以达到流量控制和保护后端服务的目的。 3. 服务解耦 无论增加、减少下游系统或是下游系统需求如何变化&#xff0c;订单服务都无需做任何更改&#xff0c…

秋招算法——AcWing101——拦截导弹

文章目录 题目描述思路分析实现源码分析总结 题目描述 思路分析 目前是有一个笨办法&#xff0c;就是创建链表记录每一个最长下降子序列所对应的节点的链接&#xff0c;然后逐个记录所有结点的访问情况&#xff0c;直接所有节点都被访问过。这个方法不是很好&#xff0c;因为需…

工作玩手机监测识别摄像机

工作场所的员工玩手机已经成为了一种常见的现象&#xff0c;特别是在办公室、生产车间等地方。而这种现象不仅仅影响了员工的工作效率&#xff0c;还可能会对工作安全造成一定的隐患。为了监测和识别员工玩手机的情况&#xff0c;工作玩手机监测识别摄像机应运而生。工作玩手机…

不知摄像机网段IP地址?别担心,这里有解决之道

在数字化、智能化的今天&#xff0c;摄像机作为安全监控和日常记录的重要工具&#xff0c;其应用越来越广泛。然而&#xff0c;在实际使用中&#xff0c;我们可能会遇到一些问题&#xff0c;比如忘记了摄像机的网段IP地址&#xff0c;这往往会让我们感到头疼。那么&#xff0c;…

Hashmap详细解析,原理及使用方法分析

hashmap基本原理 根据的hashCode值存储数据。由数组链表组成的&#xff0c;Entnr数组是HashMap的主体&#xff0c;数组中每个元素是一个单向链表。链表则是1/1解哈希冲突而存在的。在lava8中&#xff0c;使用红黑树优化。当链表长度大于8并且元素个数大于64&#xff0c;转为红…

官宣!招商工作全面启动“2024南京智博会”众多企业踊跃报名

2024南京智博会&#xff0c;作为一场盛大的科技盛宴&#xff0c;经过多年的发展与沉淀&#xff0c;已经成功跻身国内顶尖的高新技术产品及解决方案的展示平台之列&#xff0c;成为了引领行业趋势的风向标。本届智博会不仅汇聚了众多知名科技企业&#xff0c;更展现了国内外最前…

Java扫盲

1.常见的代码结构&#xff1a; 转自知乎天马行空的程序猿

##19 序列与时间序列预测:运用RNN和LSTM在PyTorch中的实践

文章目录 前言时间序列预测的基本概念关键概念 RNN及其局限性LSTM网络的崛起用PyTorch进行时间序列预测准备数据集数据预处理创建数据加载器构建LSTM模型训练模型测试和评估模型结语 前言 随着数据的爆炸式增长&#xff0c;时间序列预测在多个领域内变得越来越重要。它能帮助我…