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 相关文章推荐
剖析Django中模版标签的解析与参数传递
Jul 21 Python
python3中os.path模块下常用的用法总结【推荐】
Sep 16 Python
对python自动生成接口测试的示例讲解
Nov 30 Python
解决python super()调用多重继承函数的问题
Jun 26 Python
详解PANDAS 数据合并与重塑(join/merge篇)
Jul 09 Python
pytorch实现Tensor变量之间的转换
Feb 17 Python
Python将二维列表list的数据输出(TXT,Excel)
Apr 23 Python
Python获取浏览器窗口句柄过程解析
Jul 25 Python
Python中Yield的基本用法
Oct 18 Python
python 实现表情识别
Nov 21 Python
Python-typing: 类型标注与支持 Any类型详解
May 10 Python
Python selenium模拟网页点击爬虫交管12123违章数据
May 26 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
攻克CakePHP系列三 表单数据增删改
2008/10/22 PHP
详解PHP编码转换函数应用技巧
2016/10/22 PHP
javascript学习基础笔记之DOM对象操作
2011/11/03 Javascript
同一页面多个商品倒计时JS 基于面向对象的javascript
2012/02/16 Javascript
jquery的ajax请求全面了解
2013/03/20 Javascript
网页防止tab键的使用快速解决方法
2013/11/07 Javascript
浅谈JavaScript中的String对象常用方法
2015/02/25 Javascript
javascript实现数独解法
2015/03/14 Javascript
原生js实现addclass,removeclass,toggleclasss实例
2016/11/24 Javascript
vue组件传递对象中实现单向绑定的示例
2018/02/28 Javascript
layer设置maxWidth及maxHeight解决方案
2019/07/26 Javascript
layui表单提交到后台自动封装到实体类的方法
2019/09/12 Javascript
vue中使用极验验证码的方法(附demo)
2019/12/04 Javascript
[52:22]EG vs VG Supermajor小组赛B组 BO3 第一场 6.2
2018/06/03 DOTA
[01:02:04]EG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.23
2019/09/05 DOTA
在Python的循环体中使用else语句的方法
2015/03/30 Python
Python编程入门的一些基本知识
2015/05/13 Python
Python while 循环使用的简单实例
2016/06/08 Python
用TensorFlow实现多类支持向量机的示例代码
2018/04/28 Python
Python常用的json标准库
2019/02/19 Python
使用Python轻松完成垃圾分类(基于图像识别)
2019/07/09 Python
python字符串的拼接方法总结
2019/11/18 Python
python 微信好友特征数据分析及可视化
2020/01/07 Python
Python基于class()实现面向对象原理详解
2020/03/26 Python
Django之全局使用request.user.username的实例详解
2020/05/14 Python
CSS3 制作绽放的莲花采用效果叠加实现
2013/01/31 HTML / CSS
澳大利亚最受欢迎的美发和美容在线商店:Catwalk
2018/12/12 全球购物
安全的后院和健身蹦床:JumpSport
2019/07/15 全球购物
小学校园活动策划
2014/01/30 职场文书
安全教育演讲稿
2014/05/09 职场文书
电子商务专业应届毕业生求职信
2014/06/21 职场文书
领导干部作风建设总结
2014/10/23 职场文书
储备店长岗位职责
2015/04/14 职场文书
七一慰问简报
2015/07/20 职场文书
社区宣传标语口号
2015/12/26 职场文书
管理者们如何制定2019年的工作计划?
2019/07/01 职场文书