实现将docker-compose.yaml导入相关的数据库条目的功能,利用python脚本,yaml、sqlalchemy、json等模块实现。
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导入到数据库的docker-compose表中。 docker-compose表创建语句: 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)
补充:docker-compose.yaml的编写
当我们打包好了镜像的时候,一个一个区整理的时候,也是很浪费功夫,尤其是我们修改了一些代码的时候
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
以上为个人经验,希望能给大家一个参考,也希望大家多多支持免费资源网。如有错误或未考虑完全的地方,望不吝赐教。
© 版权声明
THE END
暂无评论内容