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中类的定义、继承及使用对象实例详解
Apr 30 Python
Python迭代器与生成器用法实例分析
Jul 09 Python
对Python通过pypyodbc访问Access数据库的方法详解
Oct 27 Python
对pytorch网络层结构的数组化详解
Dec 08 Python
Python 普通最小二乘法(OLS)进行多项式拟合的方法
Dec 29 Python
详解python selenium 爬取网易云音乐歌单名
Mar 28 Python
python 判断字符串中是否含有汉字或非汉字的实例
Jul 15 Python
python+OpenCV实现车牌号码识别
Nov 08 Python
keras中的backend.clip用法
May 22 Python
Python多线程threading创建及使用方法解析
Jun 17 Python
Python库安装速度过慢解决方案
Jul 14 Python
解决Python安装cryptography报错问题
Sep 03 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
2006/12/13 PHP
PHP 网页过期时间的控制代码
2009/06/29 PHP
用php随机生成福彩双色球号码的2种方法
2013/02/04 PHP
Laravel给生产环境添加监听事件(SQL日志监听)
2017/06/19 PHP
javascript得到XML某节点的子节点个数的脚本
2008/10/11 Javascript
JavaScript实现表格排序方法
2013/06/14 Javascript
js加入收藏以及使用Jquery更改透明度
2014/01/26 Javascript
JavaScript获取当前cpu使用率的方法
2015/12/15 Javascript
浅谈js中几种实用的跨域方法原理详解
2016/12/02 Javascript
常用的js方法合集
2017/03/10 Javascript
基于daterangepicker日历插件使用参数注意的问题
2017/08/10 Javascript
jquery+css实现下拉列表功能
2017/09/03 jQuery
vue-video-player 通过自定义按钮组件实现全屏切换效果【推荐】
2018/08/29 Javascript
如何从0开始用node写一个自己的命令行程序
2018/12/29 Javascript
微信小程序开发技巧汇总
2019/07/15 Javascript
Layer.js实现表格溢出内容省略号显示,悬停显示全部的方法
2019/09/16 Javascript
JS脚本实现定时到网站上签到/签退功能
2020/04/22 Javascript
使用Vue Composition API写出清晰、可扩展的表单实现
2020/06/10 Javascript
JavaScript实现点击出现子菜单效果
2021/02/08 Javascript
python使用scrapy解析js示例
2014/01/23 Python
python通过scapy获取局域网所有主机mac地址示例
2014/05/04 Python
用Python编写分析Python程序性能的工具的教程
2015/04/01 Python
Python的Tornado框架实现异步非阻塞访问数据库的示例
2016/06/30 Python
numpy.where() 用法详解
2019/05/27 Python
用django-allauth实现第三方登录的示例代码
2019/06/24 Python
python提取log文件内容并画出图表
2019/07/08 Python
python爬虫爬取笔趣网小说网站过程图解
2019/11/18 Python
新手入门学习python Numpy基础操作
2020/03/02 Python
装上这 14 个插件后,PyCharm 真的是无敌的存在
2021/01/11 Python
wordpress添加Html5的表单验证required方法小结
2020/08/18 HTML / CSS
李维斯德国官方网上商店:Levi’s德国
2016/09/10 全球购物
个人自我鉴定怎么写
2013/10/28 职场文书
八年级数学教学反思
2014/01/31 职场文书
英语教师岗位职责
2014/03/16 职场文书
群众路线教育查摆剖析材料
2014/10/10 职场文书
python中pandas对多列进行分组统计的实现
2021/06/18 Python