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中实现字符串类型与字典类型相互转换的方法
Aug 18 Python
对Python中的@classmethod用法详解
Apr 21 Python
Python3.6.0+opencv3.3.0人脸检测示例
May 25 Python
Python拼接微信好友头像大图的实现方法
Aug 01 Python
Python随机生成身份证号码及校验功能
Dec 04 Python
python面向对象入门教程之从代码复用开始(一)
Dec 11 Python
python3.6、opencv安装环境搭建过程(图文教程)
Nov 05 Python
python 实现在shell窗口中编写print不向屏幕输出
Feb 19 Python
VScode连接远程服务器上的jupyter notebook的实现
Apr 23 Python
在keras中实现查看其训练loss值
Jun 16 Python
Python使用文件操作实现一个XX信息管理系统的示例
Jul 02 Python
Python数据可视化实现漏斗图过程图解
Jul 20 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 版获取重定向后的地址(代码)
2013/06/26 PHP
php调用新浪短链接API的方法
2014/11/08 PHP
Cygwin中安装PHP方法步骤
2015/07/04 PHP
php提取身份证号码中的生日日期以及验证是否为成年人的函数
2015/09/29 PHP
php获取一定范围内取N个不重复的随机数
2016/05/28 PHP
PHP之图片上传类实例代码(加了缩略图)
2016/06/30 PHP
Js之软键盘实现(js源码)
2007/01/30 Javascript
让getElementsByName适应IE和firefox的方法
2007/09/24 Javascript
jQuery 通过事件委派一次绑定多种事件,以减少事件冗余
2010/06/30 Javascript
多浏览器兼容性比较好的复制到剪贴板的js代码
2011/10/09 Javascript
js统计页面的来访次数实现代码
2014/05/09 Javascript
AngularJS中如何使用$http对MongoLab数据表进行增删改查
2016/01/23 Javascript
复杂的javascript窗口分帧解析
2016/02/19 Javascript
Javascript实现图片加载从模糊到清晰显示的方法
2016/06/21 Javascript
ES6所改良的javascript“缺陷”问题
2016/08/23 Javascript
标准的js无缝滚动效果
2016/08/30 Javascript
详解基于 axios 的 Vue 项目 http 请求优化
2017/09/04 Javascript
Vue通过ref父子组件拿值方法
2018/09/12 Javascript
微信JS-SDK updateAppMessageShareData安卓不能自定义分享详解
2019/03/29 Javascript
javascript实现滚动条效果
2020/03/24 Javascript
详解Vue之计算属性
2020/06/20 Javascript
uniapp,微信小程序中使用 MQTT的问题
2020/07/11 Javascript
python基于mysql实现的简单队列以及跨进程锁实例详解
2014/07/07 Python
Python OS模块常用函数说明
2015/05/23 Python
Django 前后台的数据传递的方法
2017/08/08 Python
django文档学习之applications使用详解
2018/01/29 Python
python2.7+selenium2实现淘宝滑块自动认证功能
2018/02/24 Python
对python抓取需要登录网站数据的方法详解
2018/05/21 Python
终于搞懂了Keras中multiloss的对应关系介绍
2020/06/22 Python
盛大笔试题
2016/11/05 面试题
介绍一下EJB的体系结构
2012/08/01 面试题
自荐信格式技巧有哪些呢
2013/11/19 职场文书
会计助理的岗位职责
2013/11/29 职场文书
同学会主持词
2014/03/18 职场文书
2015年财务试用期工作总结
2014/12/24 职场文书
简述python四种分词工具,盘点哪个更好用?
2021/04/13 Python