Dockerfile
准备开始,我们创建一个 Dockerfile —— Dockerfile 包含如何创建所需镜像的指令。
FROM :6MAINTAINER Mike Ebinum, hello@seedtech.io使用 Cent OS 6.x告知 Docker 使用官方社区最新版本的 CentOS 6.x 可用镜像。
更新镜像
安装所有最新版本的包更新,并且把 Red Hat EPEL 的仓库加入可用的仓库列表。
RUN yum update -y >/dev/null && yum install -y http://ftp.riken.jp/Linux/fedora/epel/6/i386/epel-release-6-8.noarch.rpm && curl -L -o /etc/yum.repos.d/hop5.repo "http://www.hop5.in/yum/el6/hop5.repo"安装包
安装 supervisord —— 我们将使用这个配置和控制运行在容器中的进程 - 、 、 php 、一些 PHP 的开发包以及 Facebook 的 hhvm 。
RUN yum install -y python-meld3 http://dl.fedoraproject.org/pub/epel/6/i386/supervisor-2.1-8.el6.noarch.rpmRUN ["yum", "-y", "install", "nginx", "php", "php-", "php-devel", "php-gd", "php-pecl-memcache", "php-pspell", "php-snmp", "php-xmlrpc", "php-xml","hhvm"]配置 Nginx 、 HHVM 和 Supervisord
为 nginx 创建目录,并且把 index.php 文件加入 nginx 来展现。
RUN mkdir -p /var/www/html && chmod a+r /var/www/html && echo "<?php phpinfo(); ?>" > /var/www/html/index.php
下一组指令是:
为 HHVM 添加一个配置文件,然后重启我们的 HHVM 服务
为 Supervisord 添加一个配置文件,然后启动 Nginx 和 HHVM
ADD config.hdf /etc/hhvm/config.hdf RUN service hhvm restart ADD nginx.conf /etc/nginx/conf.d/default.conf ADD supervisord.conf /etc/supervisord.conf RUN chkconfig supervisord on && chkconfig nginx on
添加一个 shell 脚本 /run.sh ,在 Docker 容器运行时启动。
run.sh
#!/bin/bashset -e -xecho "starting supervisor in foreground"supervisord -n ADD scripts/run.sh /run.sh RUN chmod a+x /run.sh EXPOSE 22 80 ENTRYPOINT ["/run.sh"]
构建容器,并且打 tag
build -t centos-nginx-php5-hhvm .
现在我们有一个全功能的容器,我们可以像下面这样运行:
docker run -d -p 80:80 centos-nginx-php5-hhvm
如果你已经有本地的服务已经在运行并且占用了 80 端口,你能很容易的的改变容器的对外端口。
docker registry 提供这个 Docker 镜像的可用版本。
Dockerfile
完整的 Dockerfile 如下
# DOCKER-VERSION 1.0.0FROM centos:centos6MAINTAINER Mike Ebinum, hello@seedtech.io# Install dependencies for HHVM# yum update -y >/dev/null &&RUN yum install -y http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm && curl -L -o /etc/yum.repos.d/hop5.repo "http://www.hop5.in/yum/el6/hop5.repo"# Install supervisorRUN yum install -y python-meld3 http://dl.fedoraproject.org/pub/epel/6/i386/supervisor-2.1-8.el6.noarch.rpm#install nginx, php, mysql, hhvmRUN ["yum", "-y", "install", "nginx", "php", "php-mysql", "php-devel", "php-gd", "php-pecl-memcache", "php-pspell", "php-snmp", "php-xmlrpc", "php-xml","hhvm"]# Create folder for server and add index.php file to for nginxRUN mkdir -p /var/www/html && chmod a+r /var/www/html && echo "<?php phpinfo(); ?>" > /var/www/html/index.php#Setup hhvm - add config for hhvmADD config.hdf /etc/hhvm/config.hdfRUN service hhvm restart# ADD Nginx configADD nginx.conf /etc/nginx/conf.d/default.conf# ADD supervisord config with hhvm setupADD supervisord.conf /etc/supervisord.conf#set to start automatically - supervisord, nginx and mysqlRUN chkconfig supervisord on && chkconfig nginx onADD scripts/run.sh /run.shRUN chmod a+x /run.shEXPOSE 22 80#Start supervisord (which will start hhvm), nginxENTRYPOINT ["/run.sh"]