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 06 Python
编写Python脚本批量下载DesktopNexus壁纸的教程
May 06 Python
Python实现替换文件中指定内容的方法
Mar 19 Python
python解析json串与正则匹配对比方法
Dec 20 Python
python 梯度法求解函数极值的实例
Jul 10 Python
python调用其他文件函数或类的示例
Jul 16 Python
Python如何应用cx_Oracle获取oracle中的clob字段问题
Aug 27 Python
Python使用random模块生成随机数操作实例详解
Sep 17 Python
python做接口测试的必要性
Nov 20 Python
使用python切片实现二维数组复制示例
Nov 26 Python
Numpy(Pandas)删除全为零的列的方法
Sep 11 Python
Python 内存管理机制全面分析
Jan 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
常用的PHP数据库操作方法(MYSQL版)
2011/06/08 PHP
php实现将wav文件转换成图像文件并在页面中显示的方法
2015/04/21 PHP
php的4种常用运行方式详解
2016/12/22 PHP
Gambit vs CL BO3 第三场 2.13
2021/03/10 DOTA
javaScript 简单验证代码(用户名,密码,邮箱)
2009/09/28 Javascript
获取dom元素那些讨厌的位置封装代码
2010/06/23 Javascript
js bind 函数 使用闭包保存执行上下文
2011/12/26 Javascript
JS获取键盘上任意按键的值(实例代码)
2013/11/12 Javascript
bootstrap改变按钮加载状态
2014/12/01 Javascript
jQuery on方法传递参数示例
2014/12/09 Javascript
javascript模块化简单解析
2016/04/07 Javascript
JavaScript 拖拽实例代码
2016/09/21 Javascript
JS实现淡入淡出图片效果的方法分析
2016/12/20 Javascript
js实现用户输入的小写字母自动转大写字母的方法
2017/01/21 Javascript
javascript实现简易计算器
2017/02/01 Javascript
用js屏蔽被http劫持的浮动广告实现方法
2017/08/10 Javascript
小程序实现带年月选取效果的日历
2018/06/27 Javascript
jquery实现的放大镜效果示例
2020/02/24 jQuery
[59:15]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第一场 11.20
2020/11/20 DOTA
python人人网登录应用实例
2014/09/26 Python
解决Python获取字典dict中不存在的值时出错问题
2018/10/17 Python
Ubuntu18.04下python版本完美切换的解决方法
2019/06/14 Python
Python各种扩展名区别点整理
2020/02/27 Python
PyTorch预训练Bert模型的示例
2020/11/17 Python
使用CSS3来实现滚动视差效果的教程
2015/08/24 HTML / CSS
竞选卫生委员演讲稿
2014/04/28 职场文书
个人整改方案范文
2014/10/25 职场文书
银行招聘自荐信
2015/03/06 职场文书
从事会计工作年限证明
2015/06/23 职场文书
亲戚关系证明
2015/06/24 职场文书
2015年社区党建工作汇报材料
2015/06/25 职场文书
干货干货!2019最新优秀创业计划书
2019/03/21 职场文书
银行求职信怎么写
2019/06/20 职场文书
Redis 彻底禁用RDB持久化操作
2021/07/09 Redis
利用Python将list列表写入文件并读取的方法汇总
2022/03/25 Python
面试官问我Mysql的存储引擎了解多少
2022/08/05 MySQL