網站首頁 編程語言 正文
前言
在我們使用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來統一管理非常方便。
原文鏈接:https://juejin.cn/post/7202085514399629369
- 上一篇:沒有了
- 下一篇:沒有了
相關推薦
- 2022-06-02 基于Redis6.2.6版本部署Redis?Cluster集群的問題_Redis
- 2023-05-20 Kotlin作用域函數使用示例詳細介紹_Android
- 2023-04-01 SqlServer字符截取的具體函數使用_MsSql
- 2022-09-04 C++?實現單鏈表創建、插入和刪除_C 語言
- 2022-09-15 Nginx如何獲取自定義請求header頭和URL參數詳解_nginx
- 2022-07-20 spring boot 配置文件
- 2022-10-23 Kubernetes?k8s?configmap?容器技術解析_云其它
- 2022-09-24 C++實現并優化異常系統_C 語言
- 欄目分類
-
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支