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]