docker-compose統(tǒng)一管理多個(gè)容器使用詳解
前言
在我們使用Docker時(shí),如果需要運(yùn)行多個(gè)容器,在沒(méi)有Docker-compose之前,你可能需要一個(gè)個(gè)的定義和啟動(dòng)。
docker-compose誕生之后,你只需要把這些容器、依賴關(guān)系、端口映射等配置在一個(gè)yaml文件中即可,大大提升了管理效率。今天就以一個(gè)Python項(xiàng)目來(lái)說(shuō)說(shuō)Docker-compose的使用步驟。
Docker-compose目錄樹
flask項(xiàng)目中要用到mysql,因此我們準(zhǔn)備2個(gè)容器:mysql鏡像、flask項(xiàng)目鏡像。
flask代碼目錄如下:
. ├── docker-compose.yml ├── flask │ ├── Dockerfile │ ├── __init__.py │ ├── gunicorn_conf.py │ ├── manage.py │ ├── requirements.txt │ └── settings.py └── mysql
flask目錄下文件
首先來(lái)編寫MySQL連接文件settings.py:
import pymysql db = pymysql.connect( host='mysql', port=3306, user='root', password='root123456' )
再編寫代碼文件manage.py,代碼很簡(jiǎn)單,就是開啟一個(gè)flask服務(wù),需要用到上述的mysql服務(wù):
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()
進(jìn)程管理方面,我們使用gunicorn來(lái)管理服務(wù),因此編寫gunicorn配置文件gunicorn_conf.py:
worker = 4 worker_class = "gevent" bind = "0.0.0.0:5000"
接著,我們來(lái)編寫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項(xiàng)目依賴文件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,我們要描述應(yīng)用的構(gòu)成(一個(gè)web服務(wù)器和一個(gè)數(shù)據(jù)庫(kù))、使用的Docker鏡像、鏡像間的連接、掛載到容器的數(shù)據(jù)卷、服務(wù)開放的端口。
version: '3' services: mysql: image: mysql:latest restart: always networks: # 配置網(wǎng)絡(luò) - diy_net expose: - 3310 ports: - "3310:3306" environment: # 環(huán)境變量(可防止泄露不必要的數(shù)據(jù)) - MYSQL_ROOT_PASSWORD=root123456 flask: build: ./flask depends_on: # 依賴于mysql容器,啟動(dòng)時(shí)會(huì)先啟動(dòng)mysql - mysql networks: # 配置網(wǎng)絡(luò) - diy_net environment: - MYSQL_USER=root - MYSQL_PASSWORD=root123456 - MYSQL_DB=docker_db ports: - "5000:5000" networks: # 網(wǎng)絡(luò)設(shè)置 diy_net: name: diy_net external: true # 表示已有的網(wǎng)絡(luò)
備注: networks的配置是為了讓flask應(yīng)用和mysql應(yīng)用同處在一個(gè)網(wǎng)絡(luò),這樣才能保證容器間的連通性。 當(dāng)然保證容器間的連通性,還有其他方式,如用--link配置。用networks配置起來(lái)更加方便。
代碼完成后,開啟服務(wù):
docker-compose up -d
服務(wù)正常開啟,來(lái)測(cè)試一下兩個(gè)容器的連通性。
進(jìn)入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
說(shuō)明容器間互聯(lián)成功。整個(gè)項(xiàng)目就運(yùn)行起來(lái)了。
小結(jié)
本文以一個(gè)簡(jiǎn)單的flask項(xiàng)目使用docker-compose構(gòu)建起來(lái),當(dāng)我們有多個(gè)容器,并且容器間有依賴相關(guān)的時(shí)候,使用docker-compose來(lái)統(tǒng)一管理非常方便。
以上就是docker-compose統(tǒng)一管理多個(gè)容器使用詳解的詳細(xì)內(nèi)容,更多關(guān)于docker-compose容器管理的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
docker運(yùn)行nginx綁定配置文件失敗原因以及問(wèn)題解決
最近工作中在使用docker運(yùn)行nginx的時(shí)候遇到了些問(wèn)題,下面分享給大家,這篇文章主要給大家介紹了關(guān)于docker運(yùn)行nginx綁定配置文件失敗原因以及問(wèn)題解決的相關(guān)資料,需要的朋友可以參考下2023-02-02Docker部署rabbitmq遇到的兩個(gè)問(wèn)題
當(dāng)使用docker部署rabbitmq時(shí)遇到兩個(gè)問(wèn)題,訪問(wèn)交換機(jī)時(shí)報(bào)錯(cuò),另一種是訪問(wèn)channel時(shí)報(bào)錯(cuò),本文給大家分享解決方案,感興趣的朋友跟隨小編一起看看吧2021-07-07使用docker compose搭建consul集群環(huán)境的例子
consul是HashCorp公司推出使用go語(yǔ)言編寫的開源工具,用于實(shí)現(xiàn)分布式系統(tǒng)的服務(wù)發(fā)現(xiàn)與配置,今天給大家普及使用docker compose搭建consul集群環(huán)境的方法及consul基本知識(shí)講解,感興趣的朋友一起看看吧2021-06-06.NET?6?從0到1使用Docker部署至Linux環(huán)境超詳細(xì)教程
這篇文章主要介紹了.NET?6?從0到1使用Docker部署至Linux環(huán)境,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05Docker 網(wǎng)絡(luò)模式(四種)詳細(xì)介紹
這篇文章主要介紹了Docker 網(wǎng)絡(luò)模式詳細(xì)介紹的相關(guān)資料,這里提供了四種網(wǎng)絡(luò)模式的介紹,Docker 作為輕量級(jí)容器技術(shù),很多比較不錯(cuò)的功能,網(wǎng)絡(luò)不是多好,這里就整理下,需要的朋友可以參考下2016-11-11在CentOS啟動(dòng)時(shí)自動(dòng)加載內(nèi)核模塊overlayfs操作
這篇文章主要介紹了在CentOS啟動(dòng)時(shí)自動(dòng)加載內(nèi)核模塊overlayfs操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-11-11