您不想將多個圖像旋轉到一個容器中。有可能你甚至不需要docker文件(但是對於PHP,你可能會這樣做)。
關於碼頭工人通常的口頭禪是「每個容器中的一個過程」,並與它一起工作了幾個月之後,我覺得這是很好的建議,即使它並不總是可以實現的。對於PHP應用程序,無論是交響樂,蛋糕,Laravel,Wordpress等等,這都是我的方式。我使用apache,聽起來你可能更熟悉apache。如果需要,你可以很容易地用官方的nginx容器替換我的例子。
- 一個容器中運行PHP-FPM
- 一個容器中運行的Apache(httpd的)
- 如果你需要一個數據庫,爲MySQL
- 可選的,作曲家的容器一個容器。
- 搬運工-組成編排所有這些容器
我通常使用official httpd container,the official mysql container,我程度offical php fpm container如所描述的,包括我需要的器官功能障礙綜合徵。下面是在可能需要爲自己的應用一些外部庫增加了一個PHP-FPM dockerfile的例子:
FROM php:5.5-fpm
RUN apt-get update && apt-get install -y \
php5-mysql \
php5-curl \
php5-common \
php5-gd \
php5-imagick \
php5-intl \
php5-dev \
php5-sqlite \
php5-xdebug \
php5-memcached \
\
libmemcached-dev \
libmcrypt-dev \
libfreetype6-dev \
libxml2-dev \
libmagickwand-dev \
libjpeg62-turbo-dev \
libpng-dev && \
\
docker-php-ext-install pdo pdo_mysql && \
docker-php-ext-install soap && \
docker-php-ext-configure gd --with-jpeg-dir=/usr/include/ && \
docker-php-ext-install gd && \
docker-php-ext-install iconv mcrypt && \
\
pecl install imagick && \
docker-php-ext-enable imagick && \
pecl install memcached && \
docker-php-ext-enable memcached && \
\
pecl install xdebug && \
docker-php-ext-enable xdebug && \
\
mkdir -p /app/content && \
mkdir -p /app/usr/local/apache2 && \
cd /app/usr/local/apache2 && \
ln -s ../../../content htdocs
COPY copy/xdebug.ini /usr/local/etc/php/conf.d/xdebug.ini
這將構建我實際用於開發的圖像。除了安裝的依賴性,它副本XDebug的一個配置,並設置文件夾結構,以保持我的應用程序。
您將建立此容器是這樣的:
docker build -f nameoffile.Dockerfile -t myhubaccount/myphpcontainer \ ./path/to/folder/where/dockerfile/is
這將構建標記爲myhubaccount/myphpcontainer
你的機器上的圖像,你可以參考它在你撰寫的文件。
基本撰寫文件,告訴這些容器如何互相交談可能是這個樣子:
泊塢窗,compose.yml
version: '2'
services:
httpd:
image: httpd:latest
volumes:
- ./docker_conf/httpd.conf:/usr/local/apache2/conf/httpd.conf
- ./webroot:/usr/local/apache2/htdocs
ports:
- "80:80"
links:
- fpm
logging:
options:
max-size: "0"
database:
image: mysql
ports:
- "3306:3306"
volumes:
- ./schema.sql:/docker-entrypoint-initdb.d/schema.sql
environment:
MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
MYSQL_DATABASE: development
logging:
options:
max-size: "5k"
fpm:
image: myhubaccount/myphpcontainer
volumes:
- ./webroot:/app/content
links:
- database
logging:
options:
max-size: "50k"
我認爲這是有益的突出幾個部分這個文件的。首先,對於php-fpm,你需要設置apache來與fpm服務器通信。 httpd下的links
對象告訴容器有一個域名爲「fpm」的另一個容器,並且docker知道如何解析該名稱,所以任何與fpm服務器的通信都可以使用該名稱。我們必須在httpd容器中裝入(在卷下)apache配置。它看起來像默認的配置,但這個部分加入到容納PHP-FPM:
ProxyTimeout 30
<FilesMatch ".*\.php$">
SetHandler "proxy:fcgi://fpm:9000"
</FilesMatch>
這告訴Apache對於PHP文件請求轉發到服務器FPM和服務的結果。
ports
條目導致容器的端口80被轉發到碼頭工機器的端口80。這是linux上的本地主機,或者Mac和Windows上的docker-machine ip。你可以用控制檯命令docker-machine ip
找到這個IP地址。
我們在mysql容器上做同樣的事情,以便我們直接使用Mysql Workbench這樣的工具訪問mysql。你可以閱讀官方mysql容器允許的環境變量以及它們的功能。
對於fpm我們有links
,如果需要與數據庫交談。在這種情況下,數據庫的主機名只是「數據庫」。
logging
項目不是必需的,只是個人偏好讓日誌輸出變得過度。
將所有這些設置好後,您就可以用docker-compose up
調出環境。如果您想查看容器的外觀,可以在運行容器上使用docker-compose exec fpm bash
獲得外殼,將「fpm」替換爲您要查看的容器的名稱。需要注意的是容器必須包含bash
二進制文件。所有這些在這裏都有,但有些容器沒有。
我希望這給出了足夠的PHP特定的示例來幫助您圍繞Docker類型的作品進行包裝。我會建議重新閱讀Docker和Docker Compose的文檔。如果您有興趣構建自己的容器,我還建議閱讀Dockerfiles官方圖片。 The docs有鏈接到Docker團隊認爲是示例的Dockerfiles。
你最好打賭的是通過一些教程來工作,並回到這裏帶着你遇到的具體問題或問題。請參閱:https://docs.docker.com/engine/getstarted/和其他地方。 – ldg