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使用opencv进行人脸识别
Apr 07 Python
Python实现七彩蟒蛇绘制实例代码
Jan 16 Python
Python中出现IndentationError:unindent does not match any outer indentation level错误的解决方法
Apr 18 Python
python实现五子棋小游戏
Mar 25 Python
详解numpy的argmax的具体使用
May 27 Python
python的json中方法及jsonpath模块用法分析
Dec 06 Python
python实现指定ip端口扫描方式
Dec 17 Python
tensorflow中tf.slice和tf.gather切片函数的使用
Jan 19 Python
在django中实现choices字段获取对应字段值
Jul 12 Python
PyCharm2020.1.1与Python3.7.7的安装教程图文详解
Aug 07 Python
Python爬虫后获取重定向url的两种方法
Jan 19 Python
一篇文章带你搞懂Python类的相关知识
May 20 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编程过程中需要了解的this,self,parent的区别
2009/12/30 PHP
基于MySQL分区性能的详细介绍
2013/05/02 PHP
朋友网关于QQ相关的PHP代码(研究QQ的绝佳资料)
2015/01/26 PHP
PHP应用跨时区功能的实现方法
2019/03/21 PHP
PHP连接MySQL数据库的三种方式实例分析【mysql、mysqli、pdo】
2019/11/04 PHP
在 Laravel 6 中缓存数据库查询结果的方法
2019/12/11 PHP
JS.getTextContent(element,preformatted)使用介绍
2013/09/21 Javascript
如何调试异步加载页面里包含的js文件
2014/10/30 Javascript
JavaScript实现SHA-1加密算法的方法
2015/03/11 Javascript
EasyUi combotree 实现动态加载树节点
2016/04/01 Javascript
AngularJS入门教程之更多模板详解
2016/08/19 Javascript
ES6所改良的javascript“缺陷”问题
2016/08/23 Javascript
浅谈javascript中遇到的字符串对象处理
2016/11/18 Javascript
微信小程序 PHP生成带参数二维码
2017/02/21 Javascript
js canvas实现放大镜查看图片功能
2017/06/08 Javascript
彻底搞懂JavaScript中的apply和call方法(必看)
2017/09/18 Javascript
vue项目优化之通过keep-alive数据缓存的方法
2017/12/11 Javascript
通过 JS 判断页面是否有滚动条的实现方法
2018/04/05 Javascript
vue自定义filters过滤器
2018/04/26 Javascript
Vue filter格式化时间戳时间成标准日期格式的方法
2018/09/16 Javascript
python应用程序在windows下不出现cmd窗口的办法
2014/05/29 Python
Python中使用PDB库调试程序
2015/04/05 Python
详解python实现识别手写MNIST数字集的程序
2018/08/03 Python
python制作简单五子棋游戏
2019/06/18 Python
Python for循环搭配else常见问题解决
2020/02/11 Python
优瑞自动咖啡机官网:Jura
2018/09/29 全球购物
英国知名小木屋定制网站:Tiger Sheds
2020/03/06 全球购物
倡导文明标语
2014/06/16 职场文书
硕士生找工作求职信
2014/07/05 职场文书
党员对照检查材料思想汇报(党的群众路线)
2014/09/24 职场文书
受资助学生感谢信
2015/01/21 职场文书
复兴之路观后感3000字
2015/06/02 职场文书
《大禹治水》教学反思
2016/02/22 职场文书
Redis 配置文件重要属性的具体使用
2021/05/20 Redis
mysql如何配置白名单访问
2021/06/30 MySQL
分析ZooKeeper分布式锁的实现
2021/06/30 Java/Android