gpt4 book ai didi

python 如何把docker-compose.yaml导入到数据库相关条目里

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章python 如何把docker-compose.yaml导入到数据库相关条目里由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

实现将docker-compose.yaml导入相关的数据库条目的功能,利用python脚本,yaml、sqlalchemy、json等模块实现.

docker-compose.yaml 。

?
1
2
3
4
5
6
7
8
_version: "1"
services:
   webapp:
    build:
     context: ./dir
     dockerfile: Dockerfile-alternate
     args:
      buildno: 1

python deme文件.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#!/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的编写 。

当我们打包好了镜像的时候,一个一个区整理的时候,也是很浪费功夫,尤其是我们修改了一些代码的时候 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我。如有错误或未考虑完全的地方,望不吝赐教.

原文链接:https://blog.csdn.net/qq_35462323/article/details/109723934 。

最后此篇关于python 如何把docker-compose.yaml导入到数据库相关条目里的文章就讲到这里了,如果你想了解更多关于python 如何把docker-compose.yaml导入到数据库相关条目里的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com