[英]Symfony environment in Docker container
我想從Docker容器中運行我的Symfony3應用程序。 據我所知,我可以使用docker安裝/創建多個圖像,並將它們旋轉到一個容納我的應用程序的容器中。
我一直在Docker的一些碼頭上看看我是怎么做到的,我看到我可以有一個碼頭圖像,例如:
但我仍然覺得很難理解將多個圖像旋轉到一個容器中的概念。
我還看到了一個名為DockerFile的東西,它顯然可以將我的開發環境構建到一個我也可以使用的容器中。
問題1:有人可以澄清整個過程我仍然覺得很難繞過它。
問題2:如何構建DockerFile以及它是什么?
您不希望將多個圖像旋轉到一個容器中。 您可能甚至不需要docker文件(但對於PHP,您可能會這樣做)。
關於碼頭工人的常見口號是“每個容器一個過程”,在使用它幾個月后,我發現這是一個很好的建議,即使它並不總是可以實現。 對於PHP應用程序,無論是交響樂,蛋糕,Laravel,Wordpress等等,我都是這樣做的。 我使用apache,聽起來你也可能更熟悉apache。 如果需要,您可以輕松替換官方nginx容器,並對我的示例進行微小更改。
我通常使用官方的httpd容器 , 官方的mysql容器 ,並按照描述包含我需要的mod的官方php fpm容器 。 下面是一個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文件中引用它。
告訴這些容器如何相互通信的基本撰寫文件可能如下所示:
泊塢窗,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被轉發到docker機器的端口80。 這是linux上的localhost,或Mac和Windows上的docker-machine ip。 你可以使用console命令docker-machine ip
找到這個docker-machine ip
。
我們在mysql容器上做同樣的事情,以便我們使用Mysql Workbench之類的工具直接訪問mysql。 您可以閱讀官方mysql容器允許的環境變量及其功能。
如果需要與數據庫通信,我們有fpm的links
。 在這種情況下,數據庫的主機名只是“數據庫”。
logging
項不是必需的,只是個人偏好以保持日志輸出變得過多。
一旦掌握了所有這些,就可以通過docker-compose up
環境。 如果你想看看容器的樣子,你可以在一個正在運行的容器上使用docker-compose exec fpm bash
獲取一個shell,用你要查看的容器名稱替換“fpm”。 這里需要注意的是容器實際上必須包含bash
二進制文件。 所有這些都在這里,但有些容器沒有。
我希望這能提供足夠的特定於php的示例來幫助您了解docker類型的工作方式。 我建議重新閱讀文檔,以免困擾Docker和Docker Compose。 如果您有興趣構建自己的容器,我還建議您閱讀Dockerfiles以獲取官方圖片。 這些文檔具有Docker團隊認為具有示范性的Dockerfiles鏈接。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.