如何将docker-compose.yaml文件导入数据库相关条目实现自动化管理?

2026-04-20 08:171阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计858个文字,预计阅读时间需要4分钟。

如何将docker-compose.yaml文件导入数据库相关条目实现自动化管理?

实现将`docker-compose.yaml`导入相关数据库条目的功能,可以使用Python脚本,结合yaml、sqlalchemy、json等模块。以下是一个简化的示例:

pythonimport yamlfrom sqlalchemy import create_engine, Column, Integer, Stringfrom sqlalchemy.ext.declarative import declarative_basefrom sqlalchemy.orm import sessionmaker

定义数据库模型Base=declarative_base()

class DatabaseItem(Base): __tablename__='items' id=Column(Integer, primary_key=True) name=Column(String) description=Column(String)

创建数据库引擎engine=create_engine('sqlite:///items.db')Base.metadata.create_all(engine)

创建会话Session=sessionmaker(bind=engine)session=Session()

def import_from_yaml(file_path): with open(file_path, 'r') as file: data=yaml.safe_load(file)

# 假设数据在'services'键下 for service, details in data['services'].items(): # 假设每个服务的名称和描述在'dockerfile'和'Dockerfile-alternate'中 for dockerfile in ['Dockerfile-alternate', 'Dockerfile']: if dockerfile in details['build']['context']: name=dockerfile.split('/')[-1].split('.')[0] description=details.get('description', 'No description') item=DatabaseItem(name=name, description=description) session.add(item)

如何将docker-compose.yaml文件导入数据库相关条目实现自动化管理?

session.commit()

导入数据import_from_yaml('docker-compose.yaml')

这段代码首先定义了一个简单的数据库模型,然后从`docker-compose.yaml`文件中读取服务配置,并提取每个服务的Dockerfile名称和描述,最后将这些信息存储到数据库中。注意,这个示例假设了数据的具体结构,实际使用时可能需要根据实际的`docker-compose.yaml`文件结构进行调整。

实现将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

以上为个人经验,希望能给大家一个参考,也希望大家多多支持易盾网络。如有错误或未考虑完全的地方,望不吝赐教。

本文共计858个文字,预计阅读时间需要4分钟。

如何将docker-compose.yaml文件导入数据库相关条目实现自动化管理?

实现将`docker-compose.yaml`导入相关数据库条目的功能,可以使用Python脚本,结合yaml、sqlalchemy、json等模块。以下是一个简化的示例:

pythonimport yamlfrom sqlalchemy import create_engine, Column, Integer, Stringfrom sqlalchemy.ext.declarative import declarative_basefrom sqlalchemy.orm import sessionmaker

定义数据库模型Base=declarative_base()

class DatabaseItem(Base): __tablename__='items' id=Column(Integer, primary_key=True) name=Column(String) description=Column(String)

创建数据库引擎engine=create_engine('sqlite:///items.db')Base.metadata.create_all(engine)

创建会话Session=sessionmaker(bind=engine)session=Session()

def import_from_yaml(file_path): with open(file_path, 'r') as file: data=yaml.safe_load(file)

# 假设数据在'services'键下 for service, details in data['services'].items(): # 假设每个服务的名称和描述在'dockerfile'和'Dockerfile-alternate'中 for dockerfile in ['Dockerfile-alternate', 'Dockerfile']: if dockerfile in details['build']['context']: name=dockerfile.split('/')[-1].split('.')[0] description=details.get('description', 'No description') item=DatabaseItem(name=name, description=description) session.add(item)

如何将docker-compose.yaml文件导入数据库相关条目实现自动化管理?

session.commit()

导入数据import_from_yaml('docker-compose.yaml')

这段代码首先定义了一个简单的数据库模型,然后从`docker-compose.yaml`文件中读取服务配置,并提取每个服务的Dockerfile名称和描述,最后将这些信息存储到数据库中。注意,这个示例假设了数据的具体结构,实际使用时可能需要根据实际的`docker-compose.yaml`文件结构进行调整。

实现将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

以上为个人经验,希望能给大家一个参考,也希望大家多多支持易盾网络。如有错误或未考虑完全的地方,望不吝赐教。