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解析中国天气网的天气数据
Mar 21 Python
python2.7实现FTP文件下载功能
Apr 15 Python
python初学者,用python实现基本的学生管理系统(python3)代码实例
Apr 10 Python
Python 列表去重去除空字符的例子
Jul 20 Python
django使用admin站点上传图片的实例
Jul 28 Python
python腾讯语音合成实现过程解析
Aug 01 Python
python 利用turtle库绘制笑脸和哭脸的例子
Nov 23 Python
Python concurrent.futures模块使用实例
Dec 24 Python
Python注释、分支结构、循环结构、伪“选择结构”用法实例分析
Jan 09 Python
Python模块 _winreg操作注册表
Feb 05 Python
解决jupyter notebook import error但是命令提示符import正常的问题
Apr 15 Python
python 爬取天气网卫星图片
Jun 07 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 n个不重复的随机数生成代码
2009/06/23 PHP
编译php 5.2.14+fpm+memcached(具体操作详解)
2013/06/18 PHP
PHP永久登录、记住我功能实现方法和安全做法
2015/04/27 PHP
php获取系统变量方法小结
2015/05/29 PHP
[原创]php正则删除img标签的方法示例
2017/05/27 PHP
PHP实现微信红包金额拆分试玩的算法示例
2018/04/07 PHP
js 复制或插入Html的实现方法小结
2010/05/19 Javascript
Jquery 点击按钮显示和隐藏层的代码
2011/07/25 Javascript
js选取多个或单个元素的实现代码(用class)
2012/08/22 Javascript
15条JavaScript最佳实践小结
2013/08/09 Javascript
js实现的GridView即表头固定表体有滚动条且可滚动
2014/02/19 Javascript
JQuery each()嵌套使用小结
2014/04/18 Javascript
JavaScript使用yield模拟多线程的方法
2015/03/19 Javascript
AngularJS基础学习笔记之控制器
2015/05/10 Javascript
自己编写的支持Ajax验证的JS表单验证插件
2015/05/15 Javascript
深入理解JavaScript中的对象
2015/06/04 Javascript
浅析JavaScript动画
2015/06/10 Javascript
JavaScript队列、优先队列与循环队列
2016/11/14 Javascript
jQuery获取table下某一行某一列的值实现代码
2017/04/07 jQuery
layui 富文本赋值,取值,取纯文本值的实例
2019/09/18 Javascript
Vue使用轮询定时发送请求代码
2020/08/10 Javascript
基于Django的ModelForm组件(详解)
2017/12/07 Python
Numpy之random函数使用学习
2019/01/29 Python
Python实现初始化不同的变量类型为空值
2020/06/02 Python
在html5的Canvas上绘制椭圆的几种方法总结
2013/01/07 HTML / CSS
英国最受欢迎的价格比较网站之一:MoneySuperMarket
2018/12/19 全球购物
精彩的英文自荐信
2014/01/30 职场文书
采购部经理岗位职责
2014/02/10 职场文书
普通简短的个人自我评价
2014/02/15 职场文书
考试作弊检讨书大全
2014/02/18 职场文书
竞赛口号大全
2014/06/16 职场文书
小学“向国旗敬礼”网上签名寄语活动总结
2014/09/27 职场文书
基层党员四风问题自我剖析材料
2014/09/29 职场文书
安全生产月宣传标语
2014/10/06 职场文书
2015年仓管员工作总结
2015/04/21 职场文书
服务器间如何实现文件共享
2022/05/20 Servers