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容器管理的资料请关注其它相关文章!
上一篇:Docker(黑马spring cloud笔记)详解
栏 目:其它服务器
下一篇:使用Docker部署Dashdot服务器仪表盘的步骤
本文标题:docker-compose统一管理多个容器使用详解
本文地址:https://zz.feitang.co/server/30839.html
您可能感兴趣的文章
- 12-20Kubernetes中使用临时容器进行故障排查的方法
- 12-20Nginx设置HTTPS的方法步骤
- 12-20二进制方式安装 Kubernetes1.18.3版本实现脚本
- 12-20Nginx工作模式及代理配置的使用细节
- 12-20ZooKeeper分布式协调服务设计核心概念及安装配置
- 12-20Kubernetes部署可视化地图的十个步骤
- 12-20关于docker清理Overlay2占用磁盘空间的问题(亲测有效)
- 12-20Docker compose配置文件写法及命令使用示例
- 12-20openwrt安装docker并启动的操作方法
- 12-20云原生Kubernetes初始化容器Init使用教程


阅读排行
推荐教程
- 12-07一文教你怎么选择Tomcat对应的JDK版本
- 12-07新版Eclipse集成Tomcat时找不到server选项的解决方法
- 12-06IIS7 应用程序池自动回收关闭的解决方案
- 12-05Windows Server 2019安装VMware
- 12-05Windows服务器默认IE浏览器无法下载文件的解决方法
- 12-05Docker安装Jenkins全过程
- 12-19Zabbix SAML SSO 登录绕过漏洞的操作流程
- 12-15Docker-Compose搭建Spark集群的实现方法
- 12-14Docker Desktop无法正常启动解决(failed to start...)
- 12-14k8s 与docker空间使用分析与清理方法





