saltstack与docker结合构建高可用和自动发现服务
#!/usr/bin/env python# coding:utf-8
import sys
import docker
import redis
import subprocess
import re
cli = docker.Client(base_url='unix://var/run/docker.sock')
conn = redis.StrictRedis(host='192.168.79.55', port=2001)# 根据实际情况修改
def delete_redis(key):
conn.delete(key)
def insert_redis(key,value):
conn.set(key,value)
def get_ip():
out = subprocess.Popen(
'/sbin/ip addr show eth0',
shell=True,
close_fds=True,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT).communicate()
info = re.compile(r'inet\s*(.*?)/\d+\s*brd\s*').search(out)
ip = info.group(1)
return ip
def get_info(container):
info = cli.inspect_container(container)
ip = get_ip()
port = info['NetworkSettings']['Ports']['80/tcp']['HostPort']
name = info['Name']
return name,ip+':'+port
def stop_container(container):
name,value = get_info(container)
cli.stop(container)
delete_redis(name)
def start_container(container):
cli.start(container,publish_all_ports=True)
name,value = get_info(container)
insert_redis(name,value)
def create_container(image):
container_id = cli.create_container(image=image)
start_container(container_id)
def check_args():
if len(sys.argv) != 3 or sys.argv not in ['run','start','stop']:
print '\nUsage: %s run <image name>:<version>' % sys.argv
print ' %s start <container name or id>'% sys.argv
print ' %s stop <container name or id>\n' % sys.argv
sys.exit(1)
def main():
check_args()
if sys.argv == 'run':
create_container(sys.argv)
elif sys.argv == 'stop':
stop_container(sys.argv)
elif sys.argv == 'start':
start_container(sys.argv)
else:
check_args()
if __name__ == "__main__":
main()
页:
[1]