python 如何把docker-compose.yaml導(dǎo)入到數(shù)據(jù)庫相關(guān)條目里
實現(xiàn)將docker-compose.yaml導(dǎo)入相關(guān)的數(shù)據(jù)庫條目的功能,利用python腳本,yaml、sqlalchemy、json等模塊實現(xiàn)。
docker-compose.yaml
_version: "1"
services:
webapp:
build:
context: ./dir
dockerfile: Dockerfile-alternate
args:
buildno: 1
python deme文件。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import yaml
import traceback
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy import Column, DateTime, Index, Integer, String, Text, text, BigInteger
from sqlalchemy.ext.declarative import declarative_base
import datetime
import json
import base64
"""
作用:將docker-compose.yaml導(dǎo)入到數(shù)據(jù)庫的docker-compose表中。
docker-compose表創(chuàng)建語句:
CREATE TABLE `docker_compose` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`services` text NOT NULL COMMENT '@desc services',
`creator` int(11) DEFAULT '0',
`modifier` int(11) DEFAULT '0',
`gmt_created` datetime NOT NULL,
`gmt_modified` datetime NOT NULL,
`_version` varchar(64) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1092 DEFAULT CHARSET=utf8
"""
def now():
return datetime.datetime.now()
BASE = declarative_base()
class DockerCompose(BASE):
__tablename__ = 'docker_compose'
id = Column(BigInteger, primary_key=True)
services = Column(Text, nullable=False)
_version = Column(String(64))
creator = Column(Integer, server_default=text("'0'"))
modifier = Column(Integer, server_default=text("'0'"))
gmt_created = Column(DateTime, nullable=False)
gmt_modified = Column(DateTime, nullable=False)
def get_session(db_connection):
"""
db connection api
:param db_connection:
:return:
"""
DB_URL = 'mysql+pymysql://%s' % (db_connection,)
engine = create_engine(DB_URL, pool_size=25, pool_recycle=3600, echo=False)
Session = sessionmaker(bind=engine)
return Session()
def load_yaml(filename):
try:
with open(filename, 'r') as fh:
return yaml.safe_load(fh)
except (IOError, yaml.YAMLError) as e:
raise Exception(u"{}".format(traceback.format_exc()))
def import_engine_compose(instance_config, dbConnection):
services = instance_config['services']
_version = instance_config.get('_version')
session = get_session(dbConnection)
docker_compose = DockerCompose(
gmt_created=datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
gmt_modified=datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
creator=999,
modifier=999,
_version=_version,
services=json.dumps(services)
)
session.add(docker_compose)
session.commit()
def main(dbConnection, filepath="docker_compose.yaml"):
docker_compose_config = load_yaml(filepath)
import_engine_compose(docker_compose_config, dbConnection)
if __name__ == '__main__':
dbConnection = "xxx"
DB_CONNECTION = base64.b64decode(dbConnection)
main(DB_CONNECTION)
補(bǔ)充:docker-compose.yaml的編寫
當(dāng)我們打包好了鏡像的時候,一個一個區(qū)整理的時候,也是很浪費(fèi)功夫,尤其是我們修改了一些代碼的時候
version: "2"
services:
mysql:
image: mysql:mysql
hostname: mysql
ports:
- "3306:3306"
volumes:
- "/data/mysql:/var/lib/mysql"
restart: always
backend:
image: backend:0.5
command: "python3 main.py"
hostname: backend
volumes:
- "/data/files:/app/files"
network_mode: "host"
depends_on:
- mysql
restart: always
frontend:
image: frontend:0.5
hostname: frontend
volumes:
- "/Users/gaven/Desktop/anji/frontend/web/nginx.conf:/etc/nginx/nginx.conf"
- "/Users/gaven/Desktop/anji/frontend/web/default.conf:/etc/nginx/conf.d/default.conf"
ports:
- "80:80"
network_mode: "host"
restart: always
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
pyinstaller打包可執(zhí)行程序過程中的常見錯誤解決
這篇文章主要介紹了pyinstaller打包可執(zhí)行程序過程中的常見錯誤解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-11-11
機(jī)器學(xué)習(xí)經(jīng)典算法-logistic回歸代碼詳解
這篇文章主要介紹了機(jī)器學(xué)習(xí)經(jīng)典算法-logistic回歸代碼詳解,具有一定借鑒價值,需要的朋友可以參考下。2017-12-12
python學(xué)生信息管理系統(tǒng)(初級版)
這篇文章主要為大家詳細(xì)介紹了python學(xué)生信息管理系統(tǒng)的初級版本代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-10-10
python簡單獲取本機(jī)計算機(jī)名和IP地址的方法
這篇文章主要介紹了python簡單獲取本機(jī)計算機(jī)名和IP地址的方法,涉及Python中socket模塊的相關(guān)使用技巧,需要的朋友可以參考下2015-06-06
教你如何使用Python開發(fā)一個釘釘群應(yīng)答機(jī)器人
在聊天工具大肆侵入我們生活各個方面的今天,各種消息無時無刻不在侵?jǐn)_我們的每一寸時間,這種情況下,一個聊天的機(jī)器人就很有必要了.今天,我們來學(xué)習(xí)一下使用 Python 開發(fā)一個釘釘?shù)膽?yīng)答機(jī)器人,助你「人生苦短,少回消息」,需要的朋友可以參考下2021-06-06
Pycharm2020最新激活碼|永久激活(附最新激活碼和插件的詳細(xì)教程)
這篇文章主要介紹了Pycharm2020最新激活碼|永久激活(附最新激活碼和插件的詳細(xì)教程),本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-09-09

