2017-11-16 16 views
0

は私がPHPをサポートしてnginxの走る以下docker-compose.ymlのファイルがあります。docker-composeで別のコンテナにリンクされたコンテナでLinuxデーモンを実行するには?

version: '3' 
services: 
    nginx: 
    container_name: my-app-nginx 
    image: nginx:1.13.6 
    ports: 
     - 8080:80 
    volumes: 
     - ./nginx-default.conf:/etc/nginx/conf.d/default.conf 
     - ./my-app:/var/www/my-app 
    restart: always 
    depends_on: 
     - php 
    php: 
    container_name: my-app-php 
    image: php:7.1-fpm 
    volumes: 
     - ./my-app:/var/www/my-app 
    restart: always 

PHPアプリケーション/var/www/my-app内部のニーズLinuxのデーモンと通信するために(のはそれmyappdを呼びましょう)。

私はそれを参照してください方法は、私はどちらかを行う必要があります。

  1. chmod +xと、それが実行可能にし、/usr/local/binnginx容器にmyappdをコピーし、バックグラウンドで実行します。
  2. myappd/usr/local/binをコピーし、chmod +xで実行可能にしてフォアグラウンドで実行します。

私はDockerを初めて使っていて、これについて研究して学んでいますが、私がDocker Composerを使用していることを考えれば、おそらくオプション2はお勧めですか? Dockerに関する私の限られた知識を考えると、このバイナリを実行するには、このコンテナにLinuxベースのイメージ(Ubuntuなど)が必要であると推測する必要があります。だから、おそらくオプション1が好まれるだろうか?あるいは、オプション2は最小限のUbuntuイメージで可能でしょうか、そういうイメージなしでも可能でしょうか?

いずれにしても、作曲者ファイルでどのように実装すればいいのか分かりません。特にオプション2では、PHPアプリケーションはどのように別のコンテナ内のデーモンと通信しますか?私はnginx/phpサービスのためにやったようにボリューム(バイナリがある場所)を "共有"するだけで十分でしょうか?それとも何か他のものが必要ですか?

答えて

1

簡単な答えは、docker-compose.ymlのphpサービスにcommandのエントリを追加しています。

myappdがホストマシンと/ var/www/my-app /に./my-app/にあるとすれば、更新されたdocker-compose.ymlは次のようなものです。

version: '3' 
services: 
    nginx: 
    container_name: my-app-nginx 
    image: nginx:1.13.6 
    ports: 
     - 8080:80 
    volumes: 
     - ./nginx-default.conf:/etc/nginx/conf.d/default.conf 
     - ./my-app:/var/www/my-app 
    restart: always 
    depends_on: 
     - php 
    php: 
    container_name: my-app-php 
    image: php:7.1-fpm 
    volumes: 
     - ./my-app:/var/www/my-app 
    restart: always 
    command: ["/bin/sh", "/var/www/my-app/mappd", "&&", "php-fpm"] 

より良い答えは、Linuxのデーモンを実行し第三の容器を作成することです。

新しいDockerfileは次のようなものです。

FROM debian:jessie 

COPY ./myappd /usr/src/app/ 

EXPOSE 44444 

ENTRYPOINT ['/bin/sh'] 
CMD ['/usr/src/app/myappd'] 

ビルドイメージと名前はmyapp/myappdです。

更新docker-compose.ymlは次のようなものです。

version: '3' 
services: 
    nginx: 
    container_name: my-app-nginx 
    image: nginx:1.13.6 
    ports: 
     - 8080:80 
    volumes: 
     - ./nginx-default.conf:/etc/nginx/conf.d/default.conf 
     - ./my-app:/var/www/my-app 
    restart: always 
    depends_on: 
     - php 
    php: 
    container_name: my-app-php 
    image: php:7.1-fpm 
    volumes: 
     - ./my-app:/var/www/my-app 
    restart: always 
    networks: 
     - network1 
    depends_on: 
     - daemon 
    daemon: 
    container_name: my-app-daemon 
    image: myapp/myappd 
    restart: always 
    networks: 
     - network1 
networks: 
    network1: 

あなたはphp内側からホスト名daemonでリクエストを送信することができます。 Dockerコンテナには、同じネットワーク内の別のコンテナのホスト名を解決する機能があります。

+0

あなたの質問は私の元々の質問です。それは私がする方法を知る必要があるものです。 –

+0

私はmyappdをどこに置くべきかを言いませんが、どこにオリジナルのmyappdがあるのか​​を尋ねます。ホストマシンで? –

+0

はい、ホストマシンにありますので、コンテナにコピーしてバックグラウンドで実行する必要があります。 –

関連する問題