今天小编给大家分享一下怎么使用docker-compose统一管理多个容器的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
Docker-compose目录树
flask项目中要用到mysql,因此我们准备2个容器:mysql镜像、flask项目镜像。
flask代码目录如下:
.├── docker-compose.yml├── flask│ ├── Dockerfile│ ├── __init__.py│ ├── gunicorn_conf.py│ ├── manage.py│ ├── requirements.txt│ └── settings.py└── mysql
flask目录下文件
首先来编写MySQL连接文件settings.py:
import pymysqldb = pymysql.connect( host='mysql', port=3306, user='root', password='root123456')
再编写代码文件manage.py,代码很简单,就是开启一个flask服务,需要用到上述的mysql服务:
from flask import Flaskfrom settings import dbapp = Flask(__name__)def mysql_test(): cursor = db.cursor() sql = "show databases" cursor.execute(sql) res = cursor.fetchall() cursor.close() db.close() return res @app.route('/')def index(): res = mysql_test() re_list = [] for row in res: re_list.append(row[0]) return "res: {}".format(re_list)if __name__ == '__main__': app.run()
进程管理方面,我们使用gunicorn来管理服务,因此编写gunicorn配置文件gunicorn_conf.py:
worker = 4worker_class = "gevent"bind = "0.0.0.0:5000"
接着,我们来编写Dockerfile:
FROM python:3.7-slimCOPY . /homeWORKDIR /homeRUN pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simpleCMD gunicorn -c gunicorn_conf.py manage:app
然后,再编写一下flask项目依赖文件requirements.txt:
Flask==2.0.3gunicorn==20.1.0gevent==21.12.0PyMySQL==1.0.2cryptography==39.0.0
docker-compose.yml文件编写
编写docker-compose.yml,我们要描述应用的构成(一个web服务器和一个数据库)、使用的Docker镜像、镜像间的连接、挂载到容器的数据卷、服务开放的端口。
version: '3'services: mysql: image: mysql:latest restart: always networks: # 配置网络 - diy_net expose: - 3310 ports: - "3310:3306" environment: # 环境变量(可防止泄露不必要的数据) - MYSQL_ROOT_PASSWORD=root123456 flask: build: ./flask depends_on: # 依赖于mysql容器,启动时会先启动mysql - mysql networks: # 配置网络 - diy_net environment: - MYSQL_USER=root - MYSQL_PASSWORD=root123456 - MYSQL_DB=docker_db ports: - "5000:5000"networks: # 网络设置 diy_net: name: diy_net external: true # 表示已有的网络
备注: networks的配置是为了让flask应用和mysql应用同处在一个网络,这样才能保证容器间的连通性。 当然保证容器间的连通性,还有其他方式,如用--link配置。用networks配置起来更加方便。
代码完成后,开启服务:
docker-compose up -d
服务正常开启,来测试一下两个容器的连通性。
进入flask容器docker-compose exec flask bash
ping一下mysql容器:ping -c 3 mysql
,显示信息如下:
# ping -c 3 mysqlPING mysql (172.18.0.3) 56(84) bytes of data.64 bytes from test-mysql-1.diy_net (172.18.0.3): icmp_seq=1 ttl=64 time=0.717 ms64 bytes from test-mysql-1.diy_net (172.18.0.3): icmp_seq=2 ttl=64 time=0.432 ms64 bytes from test-mysql-1.diy_net (172.18.0.3): icmp_seq=3 ttl=64 time=0.376 ms--- mysql ping statistics ---3 packets transmitted, 3 received, 0% packet loss, time 2005msrtt min/avg/max/mdev = 0.376/0.508/0.717
说明容器间互联成功。整个项目就运行起来了。
以上就是“怎么使用docker-compose统一管理多个容器”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网行业资讯频道。