docker-compose统一管理多个容器使用详解
目录
-
前言Docker-compose目录树
-
flask目录下文件docker-compose.yml文件编写
小结
前言
在我们使用Docker时,如果需要运行多个容器,在没有Docker-compose之前,你可能需要一个个的定义和启动。
docker-compose诞生之后,你只需要把这些容器、依赖关系、端口映射等配置在一个yaml文件中即可,大大提升了管理效率。今天就以一个Python项目来说说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 pymysql
- db = pymysql.connect(
- host=’mysql’,
- port=3306,
- user=’root’,
- password=’root123456′
- )
复制代码 再编写代码文件manage.py,代码很简单,就是开启一个flask服务,需要用到上述的mysql服务:
- from flask import Flask
- from settings import db
- APP = 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 = 4
- worker_class = “gevent”
- bind = “0.0.0.0:5000”
复制代码 接着,我们来编写Dockerfile:
- FROM python:3.7-slim
- COPY . /home
- WORKDIR /home
- RUN pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
- CMD gunicorn -c gunicorn_conf.py manage:app
复制代码 然后,再编写一下flask项目依赖文件requirements.txt:
- Flask==2.0.3
- gunicorn==20.1.0
- gevent==21.12.0
- PyMySQL==1.0.2
- cryptography==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 mysql
- PING 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 ms
- 64 bytes from test-mysql-1.diy_net (172.18.0.3): icmp_seq=2 ttl=64 time=0.432 ms
- 64 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 2005ms
- rtt min/avg/max/mdev = 0.376/0.508/0.717
复制代码 说明容器间互联成功。整个项目就运行起来了。
小结
本文以一个简单的flask项目使用docker-compose构建起来,当我们有多个容器,并且容器间有依赖相关的时候,使用docker-compose来统一管理非常方便。
以上就是docker-compose统一管理多个容器使用详解的详细内容,更多关于docker-compose容器管理的资料请关注软件技术网其它相关文章!
原创文章,作者:starterknow,如若转载,请注明出处:https://www.starterknow.com/105969.html