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字符串的encode与decode研究心得乱码问题解决方法
Mar 23 Python
如何使用七牛Python SDK写一个同步脚本及使用教程
Aug 23 Python
Python序列循环移位的3种方法推荐
Apr 09 Python
python判断设备是否联网的方法
Jun 29 Python
Python魔法方法详解
Feb 13 Python
python批量将excel内容进行翻译写入功能
Oct 10 Python
Python常用编译器原理及特点解析
Mar 23 Python
设置jupyter中DataFrame的显示限制方式
Apr 12 Python
推荐技术人员一款Python开源库(造数据神器)
Jul 08 Python
在pycharm中文件取消用 pytest模式打开的操作
Sep 01 Python
python如何实时获取tcpdump输出
Sep 16 Python
Python实现自动装机功能案例分析
Oct 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采集中国代理服务器网的方法
2015/06/16 PHP
ThinkPHP5.0框架控制器继承基类和自定义类示例
2018/05/25 PHP
Laravel用户授权系统的使用方法示例
2018/09/16 PHP
Javascript - HTML的request类
2006/07/15 Javascript
Javascript----文件操作
2007/01/18 Javascript
JavaScript模板入门介绍
2012/09/26 Javascript
jQuery判断checkbox是否选中的3种方法
2014/08/12 Javascript
浅谈javascript语法和定时函数
2015/05/03 Javascript
jquery实现不包含当前项的选择器实例
2015/06/25 Javascript
详解javascript实现瀑布流绝对式布局
2016/01/29 Javascript
移动端H5开发 Turn.js实现很棒的翻书效果
2016/06/20 Javascript
js获取Get值的方法
2016/09/29 Javascript
jQuery实现动态添加tr到table的方法
2016/12/26 Javascript
微信小程序 radio单选框组件详解及实例代码
2017/01/10 Javascript
jQuery插件ImgAreaSelect实现头像上传预览和裁剪功能实例讲解一
2017/05/26 jQuery
angular之ng-template模板加载
2017/11/09 Javascript
如何将你的AngularJS1.x应用迁移至React的方法
2018/02/01 Javascript
实例详解Vue项目使用eslint + prettier规范代码风格
2018/08/20 Javascript
koa大型web项目中使用路由装饰器的方法示例
2019/04/02 Javascript
Vue基于iview实现登录密码的显示与隐藏功能
2020/03/06 Javascript
python 实现删除文件或文件夹实例详解
2016/12/04 Python
深入理解NumPy简明教程---数组2
2016/12/17 Python
在python 中实现运行多条shell命令
2019/01/07 Python
Python使用sax模块解析XML文件示例
2019/04/04 Python
python中的单引号双引号区别知识点总结
2019/06/23 Python
Python数据可视化 pyecharts实现各种统计图表过程详解
2019/08/15 Python
使用Python paramiko模块利用多线程实现ssh并发执行操作
2019/12/05 Python
python request 模块详细介绍
2020/11/10 Python
中国酒类在线零售网站:酒仙网
2016/08/20 全球购物
毕业生造价工程师求职信
2013/10/17 职场文书
诚信考试承诺书
2014/03/27 职场文书
明星员工获奖感言
2014/08/14 职场文书
2014年客房服务员工作总结
2014/11/18 职场文书
寻衅滋事罪辩护词
2015/05/21 职场文书
使用pandas或numpy处理数据中的空值(np.isnan()/pd.isnull())
2021/05/14 Python
Pycharm远程调试和MySQL数据库授权问题
2022/03/18 MySQL