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读写unicode文件的方法
Jul 10 Python
Python实现二叉搜索树
Feb 03 Python
Python匹配中文的正则表达式
May 11 Python
python使用电子邮件模块smtplib的方法
Aug 28 Python
Python双精度浮点数运算并分行显示操作示例
Jul 21 Python
python如何定义带参数的装饰器
Mar 20 Python
python训练数据时打乱训练数据与标签的两种方法小结
Nov 08 Python
详解pandas数据合并与重塑(pd.concat篇)
Jul 09 Python
python Opencv计算图像相似度过程解析
Dec 03 Python
Python列表解析操作实例总结
Feb 26 Python
Django微信小程序后台开发教程的实现
Jun 03 Python
基于matplotlib中ion()和ioff()的使用详解
Jun 16 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
模仿OSO的论坛(三)
2006/10/09 PHP
COM in PHP (winows only)
2006/10/09 PHP
PHP 在5.1.* 和5.2.*之间 PDO数据库操作中的不同之处小结
2012/03/07 PHP
基于PHPExcel的常用方法总结
2013/06/13 PHP
PHP session_start()问题解疑(详细介绍)
2013/07/05 PHP
PHP中strnatcmp()函数“自然排序算法”进行字符串比较用法分析(对比strcmp函数)
2016/01/07 PHP
thinkphp表单上传文件并将文件路径保存到数据库中
2016/07/28 PHP
ie和firefox中img对象区别的困惑
2006/12/27 Javascript
JavaScript简单实现网页回到顶部功能
2013/11/12 Javascript
jQuery标签替换函数replaceWith()的使用例子
2014/08/28 Javascript
浅谈jQuery效果函数
2016/09/16 Javascript
老生常谈js中0到底是 true 还是 false
2017/03/08 Javascript
浅谈JavaScript正则表达式-非捕获性分组
2017/03/08 Javascript
详解cordova打包成webapp的方法
2017/10/18 Javascript
纯JavaScript实现实时反馈系统时间
2017/10/26 Javascript
vue计算属性及使用详解
2018/04/02 Javascript
js合并两个数组生成合并后的key:value数组
2018/05/09 Javascript
解决vue自定义全局消息框组件问题
2019/11/22 Javascript
node.js基于dgram数据报模块创建UDP服务器和客户端操作示例
2020/02/12 Javascript
vue2.0 解决抽取公用js的问题
2020/07/31 Javascript
JS实现炫酷轮播图
2020/11/15 Javascript
wxPython窗口的继承机制实例分析
2014/09/28 Python
python登陆asp网站页面的实现代码
2015/01/14 Python
Python常用的文件及文件路径、目录操作方法汇总介绍
2015/05/21 Python
教你用python3根据关键词爬取百度百科的内容
2016/08/18 Python
python实现用户答题功能
2018/01/17 Python
Python面向对象之类和对象属性的增删改查操作示例
2018/12/14 Python
浅谈Python采集网页时正则表达式匹配换行符的问题
2018/12/20 Python
Python实现一个数组除以一个数的例子
2019/07/20 Python
Pandas数据离散化原理及实例解析
2019/11/16 Python
基于python调用jenkins-cli实现快速发布
2020/08/14 Python
Django Admin后台模型列表页面如何添加自定义操作按钮
2020/11/11 Python
几款主流好用的富文本编辑器(所见即所得常用编辑器)介绍
2021/03/17 Javascript
办公室岗位职责
2015/02/04 职场文书
OpenCV-Python实现人脸磨皮算法
2021/06/07 Python
总结Python使用过程中的bug
2021/06/18 Python