Docker-compose.ymlファイルを設定していますが、elastic、redis、symfony、composerを含むPHPスタックを実行したいです。今私が持っている問題は、composerのいくつかの機能がPHPといくつかの拡張機能を必要とするため、ドッカーでcomposer=を使用する方法がわからない。新しいイメージをビルドしてnginxとphpおよびcomposerをインストールし、その上にphpを拡張したいのですが、すべてのイメージを異なるイメージにしたくありません。これまでこれを試しました:
version : '2'
services:
nginx:
image: tutum/nginx
ports:
- "80:80"
volumes:
- ./nginx/default:/etc/nginx/sites-available/default
- ./nginx/default:/etc/nginx/sites-enabled/default
- ./logs/nginx-error.log:/var/log/nginx/error.log
- ./logs/nginx-access.log:/var/log/nginx/access.log
- ./app:/usr/share/nginx/html
phpfpm:
image: php:fpm
ports:
- 9000:9000
volumes:
- ./app:/usr/share/nginx/html
composer:
image: composer/composer:php7
command: install
volumes:
- ./app:/app
elastic2.4.4:
image: elasticsearch:2.4.4
ports:
- 9200:9200
volumes:
- ./esdata1:/usr/share/elasticsearch/data
redis:
image: redis:3.2
ports:
- 6379:6379
しかし、これは依存関係をインストールしません。
composer/composer:php7
Dockerfile
を見ると、php:7.0-Alpine
に基づいており、fpm
が含まれていないように見えます。したがって、composer/composer:php7
をベースイメージとして使用して、その上にphp-fpm
をインストールできます。
したがって、3つのコンテナすべてでプロジェクトのマッピングを行うため、1つのコンテナでcomposer install
を実行すると、3つのコンテナすべてで変更が表示されます。
個人的には、PHPとnginxを2つの異なるコンテナに分離することには意味がありません。1つは別のコンテナに非常に依存しているためです。 。だから私はnginx + php Dockerイメージの公開ビルドを自分で管理しています。 here を確認してください。より多くのフレーバーを持つビルドがあります。そして、すべてcomposer内部。
docker-compose.yml
ファイルを設定して、1つのdockerインスタンスがcomposer/composer
イメージを使用し、共有コンテナー内でcomposer install
を実行するようにしました。他のすべてのイメージは、composer created。)ベンダーディレクトリにアクセスできます。トリッキーな部分は、composer/composer
イメージがcomposer.json
ファイルが/app
ディレクトリにあるため、代わりにworking_dir
として共有コンテナを指定して、この動作をオーバーライドする必要がありました。
version: '3'
services:
#=====================#
# nginx proxy service #
#=====================#
nginx_proxy:
image: nginx:Alpine
networks:
- test_network
ports:
- "80:80"
- "443:443"
volumes:
# self-signed testing wildcard ssl certificate
- "./certs:/certs"
# proxy needs access to static files
- "./site1/public:/site1/public"
- "./site2/public:/site2/public"
# proxy needs nginx configuration files
- "./site1/site1.test.conf:/etc/nginx/conf.d/site1.test.conf"
- "./site2/site2.test.conf:/etc/nginx/conf.d/site2.test.conf"
container_name: nginx_proxy
#===============#
# composer.test #
#===============#
composer.test:
image: composer/composer
networks:
- test_network
ports:
- "9001:9000"
volumes:
- "./composer:/composer"
container_name: composer.test
working_dir: /composer
command: install
#============#
# site1.test #
#============#
site1.test:
build: ./site1
networks:
- test_network
ports:
- "9002:9000"
environment:
- "VIRTUAL_Host=site1.test"
volumes:
- "./composer:/composer"
- "./site1:/site1"
container_name: site1.test
#============#
# site2.test #
#============#
site2.test:
build: ./site2
networks:
- test_network
ports:
- "9003:9000"
environment:
- "VIRTUAL_Host=site2.test"
volumes:
- "./composer:/composer"
- "./site2:/site2"
container_name: site2.test
# networks
networks:
test_network:
ディレクトリ構造は次のようになります。
certs
test.crt
test.key
composer
composer.json
site1
app
public
Dockerfile
site1.test.conf
site2
app
public
Dockerfile
site2.test.conf
docker-compose.yml