原文來自於:http://open.daocloud.io/ru-he-zhi-zuo-yi-ge-ding-zhi-de-php-ji-chu-docker-jing-xiang/php
目標:準備一個定製的 PHP 基礎鏡像。基礎鏡像,一般爲含最小功能的系統鏡像,以後的應用鏡像都以此爲基礎。html
本項目代碼維護在 DaoCloud/php-apache-image 項目中。mysql
選擇 Ubuntu 官方的 14.04 版本爲咱們依賴的系統鏡像。git
FROM ubuntu:trusty
因全部官方鏡像均位於境外服務器,爲了確保全部示例能正常運行,DaoCloud 提供了一套境內鏡像源,並與官方源保持同步。若是使用 DaoCloud 的鏡像源,則指向:
FROM daocloud.io/ubuntu:trusty
github
設置鏡像的維護者,至關於鏡像的做者或發行方。sql
MAINTAINER Captain Dao <support@daocloud.io>
用 RUN 命令調用 apt-get 包管理器安裝 PHP 環境所依賴的程序包。docker
安裝依賴包相對比較固定,所以該動做應該儘可能提早,這樣作有助於提升鏡像層的複用率。apache
RUN apt-get update \ && apt-get -y install \ curl \ wget \ apache2 \ libapache2-mod-php5 \ php5-mysql \ php5-sqlite \ php5-gd \ php5-curl \ php-pear \ php-apc \
用 RUN 命令調用 Linux 命令對 Apache 服務和 PHP 參數進行配置。ubuntu
RUN echo "ServerName localhost" >> /etc/apache2/apache2.conf \
用 RUN 命令調用 mkdir 來準備一個乾淨的放置代碼的目錄。bash
RUN mkdir -p /app && rm -rf /var/www/html && ln -s /app /var/www/html
將本地的代碼添加到目錄,並指定其爲當前的工做目錄。
COPY . /app WORKDIR /app
設置啓動腳本的權限,指定暴露的容器內端口地址。
最後指定容器啓動的進程。
RUN chmod 755 ./start.sh EXPOSE 80 CMD ["./start.sh"]
至此一個 PHP 的基礎鏡像製做完畢,你能夠在本地運行 docker build -t my-php-base .
來構建出這個鏡像並命名爲 my-php-base
。
因爲網絡環境的特殊狀況,在本地運行
docker build
的時間會很長,而且有可能失敗。推薦使用 DaoCloud 加速器 和 DaoCloud 的雲端 代碼構建 功能。
# Ubuntu 14.04,Trusty Tahr(可靠的塔爾羊)發行版 FROM ubuntu:trusty # 道客船長榮譽出品 MAINTAINER Captain Dao <support@daocloud.io> # APT 自動安裝 PHP 相關的依賴包,如需其餘依賴包在此添加 RUN apt-get update \ && apt-get -y install \ curl \ wget \ apache2 \ libapache2-mod-php5 \ php5-mysql \ php5-sqlite \ php5-gd \ php5-curl \ php-pear \ php-apc \ # 用完包管理器後安排打掃衛生能夠顯著的減小鏡像大小 && apt-get clean \ && apt-get autoclean \ && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* \ # 安裝 Composer,此物是 PHP 用來管理依賴關係的工具 # Laravel Symfony 等時髦的框架會依賴它 && curl -sS https://getcomposer.org/installer \ | php -- --install-dir=/usr/local/bin --filename=composer # Apache 2 配置文件:/etc/apache2/apache2.conf # 給 Apache 2 設置一個默認服務名,避免啓動時給個提示讓人緊張. RUN echo "ServerName localhost" >> /etc/apache2/apache2.conf \ # PHP 配置文件:/etc/php5/apache2/php.ini # 調整 PHP 處理 Request 裏變量提交值的順序,解析順序從左到右,後解析新值覆蓋舊值 # 默認設定爲 EGPCS(ENV/GET/POST/COOKIE/SERVER) && sed -i 's/variables_order.*/variables_order = "EGPCS"/g' \ /etc/php5/apache2/php.ini # 配置默認放置 App 的目錄 RUN mkdir -p /app && rm -rf /var/www/html && ln -s /app /var/www/html COPY . /app WORKDIR /app RUN chmod 755 ./start.sh EXPOSE 80 CMD ["./start.sh"]