python 如何把docker-compose.yaml导入到数据库相关条目里


Posted in Python onJanuary 15, 2021

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

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

Python 相关文章推荐
Python  __getattr__与__setattr__使用方法
Sep 06 Python
python-docx修改已存在的Word文档的表格的字体格式方法
May 08 Python
解决Python 中英文混输格式对齐的问题
Jul 16 Python
python 拼接文件路径的方法
Oct 23 Python
如何使用Python自动控制windows桌面
Jul 11 Python
python求平均数、方差、中位数的例子
Aug 22 Python
Python运行DLL文件的方法
Jan 17 Python
Python 将 QQ 好友头像生成祝福语的实现代码
May 03 Python
Python内置方法和属性应用:反射和单例(推荐)
Jun 19 Python
python爬虫工具例举说明
Nov 30 Python
python小程序之飘落的银杏
Apr 17 Python
Python使用MapReduce进行简单的销售统计
Apr 22 Python
pandas针对excel处理的实现
Jan 15 #Python
详解Python中的文件操作
Jan 14 #Python
python中的时区问题
Jan 14 #Python
Python截图并保存的具体实例
Jan 14 #Python
Python从MySQL数据库中面抽取试题,生成试卷
Jan 14 #Python
DRF使用simple JWT身份验证的实现
Jan 14 #Python
如何用Python提取10000份log中的产品信息
Jan 14 #Python
You might like
php生成EXCEL的东东
2006/10/09 PHP
apache php模块整合操作指南
2012/11/16 PHP
PHP中数组定义的几种方法
2013/09/01 PHP
PHP页面间传递值和保持值的方法
2016/08/24 PHP
PHP串行化与反串行化实例分析
2016/12/27 PHP
解决laravel 5.1报错:No supported encrypter found的办法
2017/06/07 PHP
在云虚拟主机部署thinkphp5项目的步骤详解
2017/12/21 PHP
Laravel使用scout集成elasticsearch做全文搜索的实现方法
2018/11/30 PHP
改进UCHOME的记录发布,增强可访问性用户体验
2011/01/17 Javascript
关于jquery的多个选择器的使用示例
2013/10/18 Javascript
一个很有趣3D球状标签云兼容IE8
2014/08/22 Javascript
js设置cookie过期当前时间减去一秒相当于立即过期
2014/09/04 Javascript
JS右下角广告窗口代码(可收缩、展开及关闭)
2015/09/04 Javascript
jQuery插件开发精品教程(让你的jQuery更上一个台阶)
2015/11/07 Javascript
JS中多步骤多分步的StepJump组件实例详解
2016/04/01 Javascript
JavaScript的事件机制详解
2017/01/17 Javascript
实现div内部滚动条滚动到底部和顶部的代码
2017/11/15 Javascript
在Vant的基础上封装下拉日期控件的代码示例
2018/12/05 Javascript
vue实现的上拉加载更多数据/分页功能示例
2019/05/25 Javascript
Javascript实现简易天数计算器
2020/05/18 Javascript
[02:35]DOTA2超级联赛专访XB 难忘一年九冠称王
2013/06/20 DOTA
[02:32]DOTA2亚洲邀请赛 VG战队巡礼
2015/02/03 DOTA
[01:48]完美圣典齐天大圣至宝宣传片
2016/12/17 DOTA
好的Python培训机构应该具备哪些条件
2018/05/23 Python
python实现推箱子游戏
2020/03/25 Python
谈谈python垃圾回收机制
2020/09/27 Python
详解CSS3中常用的样式【基本文本和字体样式】
2020/10/20 HTML / CSS
Melijoe英国官网:法国儿童时尚网站
2016/11/18 全球购物
Penhaligon’s英国官网:成立于1870年的英国香水制造商
2021/02/18 全球购物
安全检查验收制度
2014/01/12 职场文书
历史学专业求职信
2014/06/19 职场文书
产品委托授权书范本
2014/09/16 职场文书
上课不认真检讨书
2014/09/17 职场文书
2014年党的群众路线学习心得体会
2014/11/05 职场文书
如何使用PostgreSQL进行中文全文检索
2021/05/27 PostgreSQL
Vue3如何理解ref toRef和toRefs的区别
2022/02/18 Vue.js