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 当前全局变量和入口参数的所有属性
Jul 01 Python
使用beaker让Facebook的Bottle框架支持session功能
Apr 23 Python
python脚本内运行linux命令的方法
Jul 02 Python
Python实现模拟登录及表单提交的方法
Jul 25 Python
Python设计模式编程中Adapter适配器模式的使用实例
Mar 02 Python
python随机取list中的元素方法
Apr 08 Python
python写入文件自动换行问题的方法
Jul 05 Python
django的ORM操作 删除和编辑实现详解
Jul 24 Python
使用tensorboard可视化loss和acc的实例
Jan 21 Python
python中random.randint和random.randrange的区别详解
Sep 20 Python
python实现扫雷游戏的示例
Oct 20 Python
python RSA加密的示例
Dec 09 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扩展imagick
2014/06/02 PHP
PHP中in_array的隐式转换的解决方法
2018/03/06 PHP
php 使用 __call实现重载功能示例
2019/11/18 PHP
Javascript之旅 对象的原型链之由来
2010/08/25 Javascript
将文本输入框内容加入表中的js代码
2013/08/18 Javascript
js用拖动滑块来控制图片大小的方法
2015/02/27 Javascript
jquery实现select选择框内容左右移动代码分享
2015/11/21 Javascript
基于jQuery实现带动画效果超炫酷的弹出对话框(附源码下载)
2016/02/22 Javascript
浅谈window.onbeforeunload() 事件调用ajax
2016/06/29 Javascript
Mvc提交表单的四种方法全程详解
2016/08/10 Javascript
jQuery EasyUI Tab 选项卡问题小结
2016/08/16 Javascript
js实现图片左右滚动效果
2017/02/27 Javascript
详解Vue2中组件间通信的解决全方案
2017/07/28 Javascript
浅谈webpack打包之后的文件过大的解决方法
2018/03/07 Javascript
JS简单实现动态添加HTML标记的方法示例
2018/04/08 Javascript
JS高级技巧(简洁版)
2018/07/29 Javascript
微信小程序常见页面跳转操作简单示例
2019/05/01 Javascript
layui数据表格实现重载数据表格功能(搜索功能)
2019/07/27 Javascript
js get和post请求实现代码解析
2020/02/06 Javascript
vue动画—通过钩子函数实现半场动画操作
2020/08/09 Javascript
windows系统中Python多版本与jupyter notebook使用虚拟环境的过程
2019/05/15 Python
python获取全国城市pm2.5、臭氧等空气质量过程解析
2019/10/12 Python
Python3 sys.argv[ ]用法详解
2019/10/24 Python
Python安装OpenCV的示例代码
2020/03/05 Python
解决tensorflow模型压缩的问题_踩坑无数,总算搞定
2021/03/02 Python
Html5如何唤起百度地图App的方法
2019/01/27 HTML / CSS
利用Node实现HTML5离线存储的方法
2020/10/16 HTML / CSS
英国足球店:UK Soccer Shop
2017/11/19 全球购物
2019年分享net面试的经历和题目
2016/08/07 面试题
给公司的建议书范文
2014/05/13 职场文书
解除劳动合同协议书(样本)
2014/10/02 职场文书
开展党的群众路线教育实践活动剖析材料
2014/10/13 职场文书
财务经理岗位职责范本
2015/04/08 职场文书
《梅花魂》教学反思
2016/02/18 职场文书
Java方法重载和方法重写的区别到底在哪?
2021/06/11 Java/Android
为什么MySQL不建议使用SELECT *
2022/04/03 MySQL