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.hqwc.cn/news/700602.html

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

相关文章

mysql查询优化索引篇

其实在写这篇文章之前,也对查询优化做过一些设置,但这次则更为具体一点,之前做的无非就是增加查询字段的索引,让select里和where里的内容全部都包含在索引内(覆盖索引不走回表的基本概念),但这次这么做的时候发现了一些问题,这也是我接下来要提到的,而且之前使用的是sqlserver的…

全网最通俗易懂的vue透传

概念&#xff1a; Vue的透传是指在Vue组件中&#xff0c;使用特定的语法将父组件传递的属性或事件直接传递给子组件&#xff0c;实现了通过父组件传递数据或事件&#xff0c;再传递给子组件的功能。&#xff08;传递给一个组件&#xff0c;却没有被该组件声明为 props 或 emit…

【Javaer学习Python】 1、Django安装

安装 Python 和 PyCharm 的方法就略过了&#xff0c;附一个有效激活PyCharm的链接&#xff1a;https://www.quanxiaoha.com/pycharm-pojie/pycharm-pojie-20241.html 1、安装Django # 安装Django pip install Django# 查看当前版本 python -m django --version 5.0.62、创建项…

c++多态机制

多态 在 C 中&#xff0c;多态&#xff08;Polymorphism&#xff09;是一种面向对象编程的重要概念&#xff0c;它允许不同类的对象对同一消息做出不同的响应。具体来说&#xff0c;多态性允许基类的指针或引用在运行时指向派生类的对象&#xff0c;并且根据对象的实际类型来调…

算法_前缀和

DP34 【模板】前缀和 import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别int n in.nextInt(),q in.ne…

Hadoop 3.4.0+HBase2.5.8+ZooKeeper3.8.4+Hive+Sqoop 分布式高可用集群部署安装 大数据系列二

创建服务器,参考 虚拟机创建服务器 节点名字节点IP系统版本master11192.168.50.11centos 8.5slave12192.168.50.12centos 8.5slave13192.168.50.13centos 8.5 1 下载组件 Hadoop:官网地址 Hbase:官网地址 ZooKeeper:官网下载 Hive:官网下载 Sqoop:官网下载 为方便同学…

一文带你快速了解GPT-4o!内含免费使用指南!

一、GPT-4o简介 北京时间5月14日&#xff0c;OpenAI举行春季发布会。OpenAI在活动中发布了新旗舰模型“GPT-4o”&#xff01;据OpenAI首席技术官穆里穆拉蒂&#xff08;Muri Murati&#xff09;介绍&#xff0c;GPT-4o在继承GPT-4强大智能的同时&#xff0c;进一步提升了文本、…

深入理解K8S【安全认证机制kubectlconfig】

深入理解K8S【安全认证机制】 1 核心概念 1.1 安全体系 对于大型系统来说&#xff0c;对业务的权限、网络的安全认证是必不可少的。 对于linux系统来说&#xff0c;用户和组、文件权限、SELinux、防火墙、pam、sudo等&#xff0c;究其核心的目的都是为了保证系统是安全的。 …

LeetCode1657确定两个字符串是否接近

题目描述 如果可以使用以下操作从一个字符串得到另一个字符串&#xff0c;则认为两个字符串 接近 &#xff1a; 操作 1&#xff1a;交换任意两个 现有 字符。例如&#xff0c;abcde -> aecdb操作 2&#xff1a;将一个 现有 字符的每次出现转换为另一个 现有 字符&#xff0…

【计算机毕业设计】ssm绿色农产品推广应用网站

21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的 重要性已逐渐被人们所认识&#xff0c;科学化的管理&#xff0c;使信息存储达到…

分布式系统的一致性与共识算法(二)

Consitency 背景 如买最后一张车票&#xff0c;两个售票处分别通过某种方式确认过这张票的存在。这时&#xff0c;两家售票处几乎同时分别来了一个乘客要买这张票&#xff0c;从各自"观察"看来&#xff0c;自己一方的乘客都是先到的&#xff0c;这种情况下&#xf…

Docker常用镜像安装

1. mysql 1.1 安装 获取镜像 docker pull mysql:8.0.30创建文件挂载目录 创建容器并运行 docker run -p 3306:3306 --name mysql8 \ -v /home/docker/mysql8/log:/var/log/mysql \ -v /home/docker/mysql8/data:/var/lib/mysql \ -v /home/docker/mysql8/mysql-files:/va…