docker-compose统一管理多个容器使用详解

 更新时间:2023年02月20日 15:16:15   作者:芥末拌饭  
这篇文章主要为大家介绍了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配置起来更加方便。

代码完成后,开启服务:

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容器管理的资料请关注脚本之家其它相关文章!

相关文章

  • 通过idea打包项目到docker的操作方法

    通过idea打包项目到docker的操作方法

    这篇文章主要介绍了通过idea打包项目到docker的操作方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-05-05
  • Docker发布镜像到DockerHub与阿里云容器

    Docker发布镜像到DockerHub与阿里云容器

    本文主要介绍了Docker发布镜像到DockerHub与阿里云容器,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • Docker在CentOS7下不能下载镜像timeout的解决办法(图解)

    Docker在CentOS7下不能下载镜像timeout的解决办法(图解)

    本文给大家记录下Docker在CentOS7下不能下载镜像timeout问题的解决方法,非常不错,具有参考借鉴价值,感兴趣的朋友一起看看吧
    2016-11-11
  • 关于docker的15个小tip(技巧)

    关于docker的15个小tip(技巧)

    本篇文章主要介绍了docker的15个小tip(技巧),具有一定的参考价值,有需要的可以了解一下。
    2016-12-12
  • Docker 如何安装 Nginx

    Docker 如何安装 Nginx

    这篇文章主要介绍了Docker 如何安装 Nginx,帮助大家更好的使用docker容器,感兴趣的朋友可以了解下。
    2020-09-09
  • Docker部署前后端分离项目的实现示例

    Docker部署前后端分离项目的实现示例

    本文主要介绍了Docker部署前后端分离项目的实现示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • 使用Docker部署MySQL的实现步骤

    使用Docker部署MySQL的实现步骤

    本文主要介绍了Docker部署MySQL的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • 如何监控docker容器运行状态 shell 脚本

    如何监控docker容器运行状态 shell 脚本

    这篇文章主要介绍了如何监控docker容器运行状态 shell 脚本的操作方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • Dockerfile构建Redis镜像的方法实现(yum方式)

    Dockerfile构建Redis镜像的方法实现(yum方式)

    本文主要介绍了Dockerfile构建Redis镜像的方法实现(yum方式),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-08-08
  • docker-compose 部署 Apollo 自定义环境的详细教程

    docker-compose 部署 Apollo 自定义环境的详细教程

    本篇文章给大家介绍docker-compose 部署 Apollo 自定义环境的详细教程,而其中Config Service提供配置的读取、推送等功能,服务对象是Apollo客户端,对docker部署Apollo环境相关知识感兴趣的朋友一起看看吧
    2021-06-06

最新评论