python 如何把docker-compose.yaml導(dǎo)入到數(shù)據(jù)庫相關(guān)條目里
實(shí)現(xiàn)將docker-compose.yaml導(dǎo)入相關(guān)的數(shù)據(jù)庫條目的功能,利用python腳本,yaml、sqlalchemy、json等模塊實(shí)現(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)我們打包好了鏡像的時(shí)候,一個(gè)一個(gè)區(qū)整理的時(shí)候,也是很浪費(fèi)功夫,尤其是我們修改了一些代碼的時(shí)候
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
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
pyinstaller打包可執(zhí)行程序過程中的常見錯(cuò)誤解決
這篇文章主要介紹了pyinstaller打包可執(zhí)行程序過程中的常見錯(cuò)誤解決,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11機(jī)器學(xué)習(xí)經(jīng)典算法-logistic回歸代碼詳解
這篇文章主要介紹了機(jī)器學(xué)習(xí)經(jīng)典算法-logistic回歸代碼詳解,具有一定借鑒價(jià)值,需要的朋友可以參考下。2017-12-12python學(xué)生信息管理系統(tǒng)(初級版)
這篇文章主要為大家詳細(xì)介紹了python學(xué)生信息管理系統(tǒng)的初級版本代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-10-10python簡單獲取本機(jī)計(jì)算機(jī)名和IP地址的方法
這篇文章主要介紹了python簡單獲取本機(jī)計(jì)算機(jī)名和IP地址的方法,涉及Python中socket模塊的相關(guān)使用技巧,需要的朋友可以參考下2015-06-06教你如何使用Python開發(fā)一個(gè)釘釘群應(yīng)答機(jī)器人
在聊天工具大肆侵入我們生活各個(gè)方面的今天,各種消息無時(shí)無刻不在侵?jǐn)_我們的每一寸時(shí)間,這種情況下,一個(gè)聊天的機(jī)器人就很有必要了.今天,我們來學(xué)習(xí)一下使用 Python 開發(fā)一個(gè)釘釘?shù)膽?yīng)答機(jī)器人,助你「人生苦短,少回消息」,需要的朋友可以參考下2021-06-06Pycharm2020最新激活碼|永久激活(附最新激活碼和插件的詳細(xì)教程)
這篇文章主要介紹了Pycharm2020最新激活碼|永久激活(附最新激活碼和插件的詳細(xì)教程),本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09Python計(jì)算公交發(fā)車時(shí)間的完整代碼
這篇文章主要介紹了Python計(jì)算公交發(fā)車時(shí)間的完整代碼,代碼簡單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-02-02