Compose容器编排示例

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

目录如下:

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

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

1.2、创建Dockerfile

1.3、在Compose文件中定义服务

[1.4、通过Docker Compose构建并运行应用程序](#1.4、通过Docker Compose构建并运行应用程序)

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

[1.6、使用Docker Compose重新构建并运行应用程序](#1.6、使用Docker Compose重新构建并运行应用程序)

1.7、升级应用程序

[1.8、试用其他Docker Compose命令](#1.8、试用其他Docker Compose命令)

[二. 更改Compose文件应用程序以适应不同环境](#二. 更改Compose文件应用程序以适应不同环境)

2.1、针对开发环境的配置

2.2、针对生产环境的配置

2.3、部署生产环境

[三. 针对Docker Compose 应用程序运行管理任务](#三. 针对Docker Compose 应用程序运行管理任务)

3.1、添加管理任务服务

3.2、运行数据库备份任务

致谢


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

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

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

 mkdir flask-web && cd flask-web

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

cs 复制代码
 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文件并添加依赖:

cs 复制代码
 flask
 redis

1.2、创建Dockerfile

创建Dockerfile并添加以下内容:

cpp 复制代码
 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文件并添加以下内容:

cpp 复制代码
 version: '3'
 services:
   web:
     build: .
     ports:
       - "5000:5000"
   redis:
     image: "redis:alpine"

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

启动应用程序:

cpp 复制代码
 [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查看返回的消息

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

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

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

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

cpp 复制代码
[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>组合键停止应用程序

cs 复制代码
^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服务添加绑定挂载 :

cs 复制代码
version: '3'
services:
  web:
    build: .
    ports:
     - "5000:5000"
    volumes:
     - .:/code
  redis:
    image: "redis:alpine"

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

再次启动应用程序:

cpp 复制代码
docker-compose up

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

cpp 复制代码
[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查看返回的消息,发现问候语句会更改,计数也还会增加:

cpp 复制代码
[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)在后台运行服务:

cpp 复制代码
[root@docker flask-web]# docker-compose up -d
Starting flask-web_web_1   ... done
Starting flask-web_redis_1 ... done

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

cpp 复制代码
[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服务的环境变量:

cpp 复制代码
[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)停止应用程序并删除容器以及卷:

cs 复制代码
[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文件示例:

cpp 复制代码
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文件示例:

cpp 复制代码
web:
  ports:
    - 80:80
  environment:
    PRODUCTION: 'true'
cache:
  environment:
    TTL: '5000'

2.3、部署生产环境

使用以下命令部署:

cpp 复制代码
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开始:

cpp 复制代码
web:
  images: example/my_web_app:latest
  links:
    - db
db:
  image: postgres:latest

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

cs 复制代码
dbadmin:
  build: database_admin/
  links:
    - db

3.2、运行数据库备份任务

(1)启动常规环境:

cs 复制代码
docker-compose up -d

(2)运行数据库备份:

cs 复制代码
docker-compose -f docker-compose.yml -f docker-compose.admin.yml run dbadmin db-backup

致谢

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

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

相关推荐
NuyoahC24 分钟前
算法笔记(十一)——优先级队列(堆)
c++·笔记·算法·优先级队列
这可就有点麻烦了1 小时前
强化学习笔记之【TD3算法】
linux·笔记·算法·机器学习
漫无目的行走的月亮3 小时前
在Docker中运行微服务注册中心Eureka
docker
Ljubim.te3 小时前
软件设计师——数据结构
数据结构·笔记
speop5 小时前
【笔记】I/O总结王道强化视频笔记
笔记·音视频
yngsqq5 小时前
031集——文本文件按空格分行——C#学习笔记
笔记·学习·c#
大道归简6 小时前
Docker 命令从入门到入门:从 Windows 到容器的完美类比
windows·docker·容器
sealaugh326 小时前
aws(学习笔记第一课) AWS CLI,创建ec2 server以及drawio进行aws画图
笔记·学习·aws
CXDNW6 小时前
【网络篇】计算机网络——应用层详述(笔记)
服务器·笔记·计算机网络·http·web·cdn·dns
向上的车轮6 小时前
Django学习笔记五:templates使用详解
笔记·学习·django