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读写txt文本文件的操作方法全解析
Jun 26 Python
利用Python实现Windows定时关机功能
Mar 21 Python
Python PyQt5实现的简易计算器功能示例
Aug 23 Python
Pandas读取并修改excel的示例代码
Feb 17 Python
PyQt5 加载图片和文本文件的实例
Jun 14 Python
Python银行系统实战源码
Oct 25 Python
python函数不定长参数使用方法解析
Dec 14 Python
python中resample函数实现重采样和降采样代码
Feb 25 Python
如何快速理解python的垃圾回收机制
Sep 01 Python
python两种获取剪贴板内容的方法
Nov 06 Python
python 批量下载bilibili视频的gui程序
Nov 20 Python
python热力图实现的完整实例
Jun 25 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
建立动态的WML站点(二)
2006/10/09 PHP
用PHP控制用户的浏览器--ob*函数的使用说明
2007/03/16 PHP
PHP中的integer类型使用分析
2010/07/27 PHP
PHP运行模式的深入理解
2013/06/03 PHP
mac环境中使用brew安装php5.5.15
2014/08/18 PHP
laravel容器延迟加载以及auth扩展详解
2015/03/02 PHP
PHP生成唯一订单号
2015/07/05 PHP
PHP获取网站中各文章的第一张图片的代码示例
2016/05/20 PHP
ExtJs 表单提交登陆实现代码
2010/08/19 Javascript
基于jquery的多彩百分比 动态进度条 投票效果显示效果实现代码
2011/08/28 Javascript
Google官方支持的NodeJS访问API,提供后台登录授权
2014/07/29 NodeJs
FF(火狐)浏览器无法执行window.close()解决方案
2014/11/13 Javascript
浅谈JavaScript 中有关时间对象的方法
2016/08/15 Javascript
jQuery实现的自定义弹出层效果实例详解
2016/09/04 Javascript
荐书|您有一份JavaScript书单待签收
2017/07/21 Javascript
DVA框架统一处理所有页面的loading状态
2017/08/25 Javascript
微信小程序之裁剪图片成圆形的实现代码
2018/10/11 Javascript
简单了解Ajax表单序列化的实现方法
2019/06/14 Javascript
layui数据表格 table.render 报错的解决方法
2019/09/29 Javascript
JavaScript类的继承多种实现方法
2020/05/30 Javascript
Vue + ts实现轮播插件的示例
2020/11/10 Javascript
Python识别快递条形码及Tesseract-OCR使用详解
2019/07/15 Python
django使用xadmin的全局配置详解
2019/11/15 Python
tensorflow实现二维平面模拟三维数据教程
2020/02/11 Python
Python socket处理client连接过程解析
2020/03/18 Python
python爬取网易云音乐热歌榜实例代码
2020/08/07 Python
python中random.randint和random.randrange的区别详解
2020/09/20 Python
Intimissimi德国网上商店:意大利知名内衣品牌
2018/04/03 全球购物
高中生期末评语大全
2014/01/28 职场文书
求职毕业生自荐书
2014/02/08 职场文书
青年文明号口号
2014/06/17 职场文书
讲座通知范文
2015/04/23 职场文书
尼克胡哲观后感
2015/06/08 职场文书
高中历史教学反思
2016/02/19 职场文书
Python图片检索之以图搜图
2021/05/31 Python
PyQt5结合QtDesigner实现文本框读写操作
2021/06/11 Python