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

致谢

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

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

  • 24
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小李学不完

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值