ewe22 发表于 2015-2-10 07:54:45

api管理docker Container的lnmp操作



1.环境准备

1).说明

192.168.1.104 python api机器

192.168.1.105 docker容器

2)docker环境部署

http://blog.angryfox.com/?p=2701

3.开通socket通信修改自启动服务文件,支持远程TCP接口与本地SOCK连接;

# vi /etc/init.d/docker
$exec -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock -d &>> $logfile &
#service docker restart

2.创建镜像

1、获取最新的centos镜像

# docker pull centos:latest

2、编写Dockerfile(支持apache+ssh服务)

# mkdir /home/Dockerfile/webserver

# cd /home/Dockerfile/webserver

# vi Dockerfile

# This is a base comment
FROM centos:latest
MAINTAINER

#yum install Package
RUN yum -y install net-tools
RUN yum -y install iputilsiproutemanvim-minimalopenssh-serveropenssh-clients
RUN yum -y install httpd
RUN yum -y install python-setuptools
RUN easy_install supervisor

#set sshd
RUN ssh-keygen -q -N "" -t dsa -f /etc/ssh/ssh_host_dsa_key
RUN ssh-keygen -q -N "" -t rsa -f /etc/ssh/ssh_host_rsa_key
RUN ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N ""
RUN sed -ri 's/session    required   pam_loginuid.so/#session    required   pam_loginuid.so/g' /etc/pam.d/sshd
RUN mkdir -p /root/.ssh && chown root.root /root && chmod 700 /root/.ssh
RUN echo 'root:Ksjhg34TDju' | chpasswd

#set supervisor
RUN mkdir -p /var/log/supervisor
ADD supervisord.conf /etc/supervisord.conf

#set port
EXPOSE 22
EXPOSE 80

#set ENV
ENV LANG en_US.UTF-8
ENV LC_ALL en_US.UTF-8

#run supervisor
CMD ["/usr/bin/supervisord -c /etc/supervisord.conf"]

通过supervisord来维护Docker容器中服务进程,编写supervisord.conf

# vi supervisord.conf
view plainprint?

nodaemon=true


command=/usr/sbin/sshd -D


command=/usr/sbin/httpd -DFOREGROUND

创建镜像,运行:# docker build -t yorko/webserver:v1 . 注:最后有一个“.”,别遗漏。

镜像生成完毕后运行docker images查看

3.编写操作API

登陆 192.168.1.104

# mkdir /home/test/docker-py

# cd /home/test/docker-py

1)、安装docker-py

# wget https://github.com/docker/docker-py/archive/master.zip

# unzip master

# cd docker-py-master/

# python setup.py install

如正常导入模块(import docker)说明安装成功。

2)、创建容器docker_create.py

import docker

c = docker.Client(base_url='tcp://192.168.1.105:2375',version='1.13',timeout=10)
c.create_container(image="yorko/webserver:v1",stdin_open=True,tty=True,command="/usr/bin/supervisord -c /etc/supervisord.conf",volumes=['/data'],ports=,name="webserver12")
#print str(r)
print 'Hello'

3)运行容器docker_start.py

import docker

c = docker.Client(base_url='tcp://192.168.1.105:2375',version='1.13',timeout=10)
r=c.start(container='webserver12', binds={'/data':{'bind': '/data','ro': False}}, port_bindings={80:80,22:2022}, lxc_conf=None,
      publish_all_ports=True, links=None, privileged=False,
      dns=None, dns_search=None, volumes_from=None, network_mode=None,
      restart_policy=None, cap_add=None, cap_drop=None)
#print str(r)
print 'start'

4)、运行

# python docker_create.py

# python docker_start.py

更多API参考https://github.com/docker/docker-py

5)、在Docker主机观察结果 docker ps -l

3.检查

1)校验SSH服务

ssh root@192.168.1.105 -p 2022

2) 校验WEB服务

浏览器访问: 192.168.1.105

3)检查数据卷

df


页: [1]
查看完整版本: api管理docker Container的lnmp操作