杰网资源 Design By www.escxy.com
实现将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
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。如有错误或未考虑完全的地方,望不吝赐教。
杰网资源 Design By www.escxy.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
杰网资源 Design By www.escxy.com
暂无评论...
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。



