p5平台包含:admin、desktop、api、wx、wap总共5个需要部署到Linux服务器上的后台服务程序。所以容器化,也就是将其封装成由容器引导运行!这里边涉及的主要由:容器本身的配置(build dockerfile),容器实例化(创建新实例,删除新实例),实力的管理(启动,重启,关闭);不容容器集群的建立。
p5webpy作为p5平台运行的基础容器存在,通过不同的实例可以其不同的作用。
p5webpy dockerfile
FROM w3.fengsitech.com:5000/centos:7
MAINTAINER Hao Luo, luohao.brian@gmail.com
LABEL name="Webpy Image" \
vendor="Fensitech" \
license="GPLv2" \
build-date="2016-05-19"
# Install all prerequisite RPM packages
RUN rm -rf /etc/yum.repos.d/*
ADD base.repo /etc/yum.repos.d/base.repo
ADD epel.repo /etc/yum.repos.d/epel.repo
RUN yum -y update && \
yum install -y python-pip libffi-devel python-devel python-setuptools \
gcc swig libxml2-devel libxslt-devel libjpeg-turbo-devel \
openssl-devel && \
yum clean all
# Install all prerequisite python packages
RUN pip install --upgrade pip -i https://pypi.douban.com/simple
RUN SWIG_FEATURES="-cpperraswarn -includeall -I/usr/include/openssl" pip install \
python-magic==0.4.6 \
pyOpenSSL \
m2crypto==0.22.3 \
web.py==0.37 \
peewee==2.5.1 \
cryptography==0.9 \
pycurl==7.19.0 \
beautifulsoup4 \
qrcode \
poster \
uwsgi \
redis \
Pillow \
lxml \
PyMySQL \
-i https://pypi.douban.com/simple
# init
ADD dumb-init_1.0.0_amd64 /sbin/dumb-init
RUN chmod +x /sbin/dumb-init
# startup script
ADD startup.sh /sbin/startup.sh
RUN chmod +x /sbin/startup.sh
# upload dir
RUN mkdir /code
RUN mkdir /var/log/code
VOLUME ["/code", "/var/log/code"]
EXPOSE 3031
ENV DB_HOST "mysql"
ENV DB_PASSWORD "root"
ENV DB_USER "root"
ENV DB_NAME "phonecms2015"
ENV REDIS_HOST "redis"
ENV REDIS_PORT "6379"
ENV REDIS_DB "0"
CMD ["/sbin/dumb-init", "/sbin/startup.sh"]
1、查看镜像列表
docker images
2、删除镜像
docker rmi p5webpy
3、创建新镜像
docker build --force-rm=true -t p5webpy .
1、查看实例列表
docker ps
2、删除实例
docker rm p5admin
3、创建实例
后面主要是实例化p5平台各个后台程序。
docker run -d --name p5admin -v /home/webapps/p5/admin:/code -v /home/webapps/p5/log:/var/log/code --link mysql:mysql-ln --link redis:redis-ln p5webpy
4、查看运行的实例
docker ps -a
关于容器间的关联,由于关联是有依赖性的,所以,必须先实例化(实例化完成会自动运行)被依赖的容器:这里nginx作为web服务器,他需要管理admin,所以先实例化admin,在实例化nginx
# 实例化MySQL容器
docker run --name mysql -e MYSQL_ROOT_PASSWORD=root -e MYSQL_ALLOW_EMPTY_PASSWORD=yes -p 3306:3306 --volumes-from=mysql-data -d mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
# 实例化redis容器
docker run --name redis -v /home/docker/data/redis:/data -d w3.fengsitech.com:5000/redis redis-server --appendonly yes
# 实例化webpy:admin
docker run -d --name p5admin -v /home/webapps/p5/admin:/code -v /home/webapps/p5/log:/var/log/code --link mysql:mysql-ln --link redis:redis-ln p5webpy
# 实例化webpy:desktop
docker run -d --name p5desktop -v /home/webapps/p5/desktop:/code -v /home/webapps/p5/log:/var/log/code --link mysql:mysql-ln --link redis:redis-ln p5webpy
# 实例化webpy:weixin
docker run -d --name p5weixin -v /home/webapps/p5/weixin:/code -v /home/webapps/p5/log:/var/log/code --link mysql:mysql-ln --link redis:redis-ln p5webpy
# 实例化webpy:wap
docker run -d --name p5wap -v /home/webapps/p5/wap:/code -v /home/webapps/p5/log:/var/log/code --link mysql:mysql-ln --link redis:redis-ln p5webpy
# 实例化webpy:api
docker run -d --name p5api -v /home/webapps/p5/api:/code -v /home/webapps/p5/log:/var/log/code --link mysql:mysql-ln p5webpy
#实例化一个nginx容器:nginx
docker run -d -p 80:80 -p 443:443 --name nginx --link wiki:wiki-ln --link p5admin:p5admin-ln --link bugzilla:bugzilla-ln --link cgit:cgit-ln -v /home/docker/data/nginx/conf.d:/etc/nginx/conf.d -v /home/docker/data/nginx/log:/var/log/nginx -v /home/docker/data/nginx/html:/var/www/html w3.fengsitech.com:5000/nginx:1.9