前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除
目录如下:
一、从源代码开始构建、部署和管理应用程序
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
致谢
在此,我要对所有为知识共享做出贡献的个人和机构表示最深切的感谢。同时也感谢每一位花时间阅读这篇文章的读者,如果文章中有任何错误,欢迎留言指正。
学习永无止境,让我们共同进步!!