docker-compose统一管理多个容器使用详解
|
前言
在我们使用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配置起来更加方便。
代码完成后,开启服务:
服务正常开启,来测试一下两个容器的连通性。
进入flask容器- docker-compose exec flask bash
复制代码 ping一下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容器管理的资料请关注脚本之家其它相关文章!
来源:https://www.jb51.net/article/275903.htm
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|
|
|
发表于 2023-2-25 11:19:51
举报
回复
分享
|
|
|
|