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 将字符串转换成字典dict
Mar 24 Python
用 Python 爬了爬自己的微信朋友(实例讲解)
Aug 25 Python
微信小程序跳一跳游戏 python脚本跳一跳刷高分技巧
Jan 04 Python
pymongo中group by的操作方法教程
Mar 22 Python
python调用并链接MATLAB脚本详解
Jul 05 Python
Django实现简单网页弹出警告代码
Nov 15 Python
python Popen 获取输出,等待运行完成示例
Dec 30 Python
python 实现将Numpy数组保存为图像
Jan 09 Python
解决python cv2.imread 读取中文路径的图片返回为None的问题
Jun 02 Python
Pandas把dataframe或series转换成list的方法
Jun 14 Python
python中id函数运行方式
Jul 03 Python
Python安装并操作redis实现流程详解
Oct 13 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以post形式发送xml的方法
2014/11/04 PHP
给WordPress的编辑后台添加提示框的代码实例分享
2015/12/25 PHP
php常用字符串查找函数strstr()与strpos()实例分析
2019/06/21 PHP
CSS3画一个阴阳八卦图
2021/03/09 HTML / CSS
js实现简单模态窗口,背景灰显
2008/11/14 Javascript
Js组件的一些写法
2010/09/10 Javascript
仿百度的关键词匹配搜索示例
2013/09/25 Javascript
javascript中的变量作用域以及变量提升详细介绍
2013/10/24 Javascript
使用postMesssage()实现iframe跨域页面间的信息传递
2016/03/29 Javascript
详解Node.js开发中的express-session
2017/05/19 Javascript
React简单介绍
2017/05/24 Javascript
React实现全局组件的Toast轻提示效果
2018/09/21 Javascript
vue-cli3.0 脚手架搭建项目的过程详解
2018/10/19 Javascript
vue.js多页面开发环境搭建过程
2019/04/24 Javascript
JS数组reduce()方法原理及使用技巧解析
2020/07/14 Javascript
详解Webpack4多页应用打包方案
2020/07/16 Javascript
wepy--用vantUI 实现上弹列表并选择相应的值操作
2020/11/03 Javascript
[40:56]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 Liquid vs TNC
2018/04/01 DOTA
python实现文本文件合并
2015/12/29 Python
Python实现网站注册验证码生成类
2017/06/08 Python
Python3正则匹配re.split,re.finditer及re.findall函数用法详解
2018/06/11 Python
python tkinter界面居中显示的方法
2018/10/11 Python
numpy数组之存取文件的实现示例
2019/05/24 Python
Django 对象关系映射(ORM)源码详解
2019/08/06 Python
matplotlib subplot绘制多个子图的方法示例
2020/07/28 Python
详解rem 适配布局
2018/10/31 HTML / CSS
GAP阿联酋官网:GAP UAE
2017/11/30 全球购物
职业生涯规划书前言
2014/04/15 职场文书
个人担保书范文
2014/05/20 职场文书
感恩老师演讲稿400字
2014/08/28 职场文书
工作态度怎么写
2015/06/25 职场文书
婚礼迎宾词大全
2015/08/10 职场文书
工商局调档介绍信
2015/10/22 职场文书
2019职场实习报告该怎么写?
2019/07/01 职场文书
母婴行业实体、电商模式全面解析
2019/08/01 职场文书
SQL Server数据库基本概念、组成、常用对象与约束
2022/03/20 SQL Server