歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux教程

Docker創建一個運行PHP,bgubx和hhvm的鏡像

對於Docker, 我感到非常的興奮,作為一個開發人員,在早些時候,我花費了太多的時間陷入了 .NET 工作中我不喜歡的幾件事情中,如在不同的環境中部署和測試。部署一個 web 應用程序的過程絕對是一個噩夢般的經歷。並且甚至在那之後,我遷移到基於 UNIX 平台開發,然後使用開源的工具/語言,如 Node, Java, Scala, PHP 等等,我發現同樣的部署問題一次又一次的發生。

使用如 Docker 這樣的工具,你可以讓你開發環境的配置精確的如生產環境的鏡像一樣。部署一個你的 web 應用程序的容器,任何東西都被配置了,你再也不用太擔心關於部署的那些麻煩事。

如果你是一個 Docker 的新手,並且不是十分確定它是什麼,以下這些文章能給你一個完美的學習綱要,去吧,讀完它們,我等著。
  • Docker Lightweight linux containers for consistent development and deployment
  • Docker: Using Linux Containers to Support Portable Application deployment

作為一個懶惰的程序員,我的夢想成真了,只要做一次,然後你再也不用為它操心了(在一定程度上),無論如何你都不會來到這裡對我咆哮,在這篇文章中,我將向你展示,為你開發環境基於以下怎樣創建並且運行一個 Docker 容器。
  • CentOS
  • Nginx web server
  • PHP with Hip Hop VM (HHVM)

Dockerfile
准備開始,我們創建一個 Dockerfile - 一個 Dockerfile 中包含怎樣創建你想要的鏡像的指令。
FROM    centos:centos6
MAINTAINER Mike Ebinum, [email protected]

使用 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 - 我們將使用這個配置和控制運行在容器中的進程 -, nginx, php, 一些 PHP 的開發包以及 Facebook 的 hhvm
RUN yum install -y python-meld3 http://dl.fedoraproject.org/pub/epel/6/i386/supervisor-2.1-8.el6.noarch.rpm
RUN ["yum", "-y", "install", "nginx", "php", "php-mysql", "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/bash

set -e -x
echo "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
docker build -t centos-nginx-php5-hhvm .

現在我們有一個全功能的容器,我們可以像下面這樣運行他:
docker run -d -p 80:80 centos-nginx-php5-hhvm

如果你已經有本地的服務已經在運行並且占用了 80 端口,你能很容易的的改變容器的對外端口。

這個 Docker 鏡像在 docker registry 的可用版本。

Dockerfile
完整的 Dockerfile 如下
# DOCKER-VERSION 1.0.0

FROM    centos:centos6

MAINTAINER Mike Ebinum, [email protected]

# 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 supervisor
RUN yum install -y python-meld3 http://dl.fedoraproject.org/pub/epel/6/i386/supervisor-2.1-8.el6.noarch.rpm

#install nginx, php, mysql, hhvm
RUN ["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 nginx
RUN mkdir -p /var/www/html && chmod a+r /var/www/html && echo "<?php phpinfo(); ?>" > /var/www/html/index.php

#Setup hhvm - add config for hhvm
ADD config.hdf /etc/hhvm/config.hdf 

RUN service hhvm restart

# ADD Nginx config
ADD nginx.conf /etc/nginx/conf.d/default.conf

# ADD supervisord config with hhvm setup
ADD supervisord.conf /etc/supervisord.conf

#set to start automatically - supervisord, nginx and mysql
RUN chkconfig supervisord on && chkconfig nginx on

ADD scripts/run.sh /run.sh

RUN chmod a+x /run.sh 


EXPOSE 22 80
#Start supervisord (which will start hhvm), nginx 
ENTRYPOINT ["/run.sh"]
在這篇文章中提到的其他的可用文件在Github上。
Copyright © Linux教程網 All Rights Reserved