2017-11-16 10 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 내부의 요구 리눅스 데몬과 통신하기를 (의이 myappd를 부르 자).

  1. 복사 /usr/local/binnginx 용기에 myappdchmod +x으로 실행 가능하고 백그라운드에서 실행 :

    내가 볼때

    은, 나도 할 필요가있다.
  2. 다른 컨테이너를 만들고 myappd에서 /usr/local/bin까지 복사하고 chmod +x으로 실행 가능하도록 만들고 포 그라운드에서 실행하십시오.

이제 Docker를 처음 접했고 그것에 대해 연구하고 배우고 있지만 Docker Composer를 사용하고 있다는 가정하에 최선의 추측은 옵션 2가 아마도 권장 사항일까요? Docker에 대한 제한된 지식을 감안할 때이 컨테이너가이 바이너리를 실행하기 위해 Linux 기반 이미지 (예 : Ubuntu 또는 기타)를 필요로한다고 생각해야합니다. 그래서 아마도 옵션 1이 선호 될까요? 또는 아마도 최소한의 우분투 이미지로 옵션 2가 가능합니까 아니면 그러한 이미지없이 가능할 수 있습니까?

어느 쪽이든, 나는 작곡가 파일에서 어떻게 구현할 것인지 잘 모릅니다. 특히 옵션 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"] 

더 나은 대답은 리눅스 데몬을 실행하는 세 번째 컨테이너를 만드는 것입니다.

새로운 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

예, 호스트 시스템에 있습니다. 컨테이너에 복사하고 백그라운드에서 실행해야합니다. –

관련 문제