Docker : 여러 컨테이너에 대해 혼란스러워합니다.


0

여러 컴퓨터에서 개발 환경을 복제하고 싶습니다. Docker가 좋은 도구가 될 수 있다고 생각했지만 막혔습니다.

나는 사용하는 애플 리케이션이있다 :

  • 확장 기능이있는 아파치
  • PHP FPM
  • MySQL
  • 작곡가
  • Compass (SASS 파일을 재 컴파일)
  • Grunt & amp; 나무 그늘

모든 파일은 호스트 시스템에 남아 있어야하며 서비스에서 사용할 수 있어야합니다.

그래서 아파치를 설정하고 시작하는 Dockerfile을 만들었습니다. 큰!

불행히도 나는 여기서부터 어떻게 진행해야 하는지를 알 수 없다.

PHP FPM, MySQL 및 Compass를 어떻게 구성 할 수 있습니까? 나는 각각의 프로세스를 별도의 컨테이너에서 실행하고 이들을 서로 연결한다는 것을 이해한다 (동일한 컨테이너 내에서 여러 서비스를 시작하는 것과 반대).

본능적으로 필자는 각 서비스마다 하나씩 몇 개의 Dockerfiles를 작성한 다음 각각의 docker-compose로 시작할 것입니다. 그러나 이것은 갈 길이 아닌 것처럼 보이고 올바른 생각이 무엇인지 알 수 없습니다.

나는 커스텀 이미지를 많이 발견했지만, 개인적으로 모든 컨 테이 너를 내 자신의 컨피규레이션으로 생성하는 것을 강하게 선호한다. 이것이 가능한가?

아니면 Vagrant 나 VirtualBox에서 직접 전체 VM을 프로비저닝하고 실행하는 것이 좋습니다.

감사!


왜 당신은 docker-compose가 올바른 접근법이 아니라고 생각합니까?
jmreicha

답변:


1

Docker Compose는 단일 Docker Image에 덤프 된 하나의 큰 모 놀리 식 응용 프로그램 대신 작은 마이크로 서비스가있는 시나리오에서 항상 훌륭한 도구였습니다. Dockerfile이 많지 않으려면 필요한 포장재로 Docker 이미지를 만들어서 간단하게 만들 수 있습니다.

예 : 공식 Ubuntu Docker Image를 가져 오는 대신 필요한 패키징을 사용하여 Ubuntu Docker Image를 빌드 할 수 있습니다. 이렇게하면 Dockerfile을 많이 사용하는 혼란을 줄일 수 있습니다. 그러나 개발 환경에 권장되지 않는 변경 사항을 원할 때마다 새로운 Docker Image를 빌드 할 때 오버 헤드가 발생합니다.

다음은 docker-compose.yml 파일의 스 니펫입니다. 매우 이해하기 쉬운 링크는 개별 Dockerfile을 보유하지 않으며 요구 사항에 따라 쉽게 사용자 정의 할 수 있습니다.

 version: '3'
services:
    web:
        image: nginx
        volumes:
            - "./etc/nginx/default.conf:/etc/nginx/conf.d/default.conf"
            - "./etc/ssl:/etc/ssl"
            - "./web:/var/www/html"
            - "./etc/nginx/default.template.conf:/etc/nginx/conf.d/default.template"
        ports:
            - "8000:80"
            - "3000:443"
        environment:
            - NGINX_HOST=${NGINX_HOST}
        command: /bin/bash -c "envsubst '$$NGINX_HOST' < /etc/nginx/conf.d/default.template > /etc/nginx/conf.d/default.conf && nginx -g 'daemon off;'"
        restart: always
        depends_on:
            - php
            - mysqldb
    php:
        image: nanoninja/php-fpm
        restart: always
        volumes:
            - "./etc/php/php.ini:/usr/local/etc/php/conf.d/php.ini"
            - "./web:/var/www/html"
    composer:
        image: "composer"
        volumes:
            - "./web/app:/app"
        command: install
    myadmin:
        image: phpmyadmin/phpmyadmin
        container_name: phpmyadmin
        ports:
            - "8080:80"
        environment:
            - PMA_ARBITRARY=1
            - PMA_HOST=${MYSQL_HOST}
        restart: always
        depends_on:
            - mysqldb
    mysqldb:
        image: mysql
        container_name: ${MYSQL_HOST}
        restart: always
        env_file:
            - ".env"
        environment:
            - MYSQL_DATABASE=${MYSQL_DATABASE}
            - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
            - MYSQL_USER=${MYSQL_USER}
            - MYSQL_PASSWORD=${MYSQL_PASSWORD}
        ports:
            - "8989:3306"
        volumes:
            - "./data/db/mysql:/var/lib/mysql"

0

당신은 확실히 바른 길을 가고 있습니다. 도커 작성 당신이 원하는 것입니다.

각 "서비스"는 Docker 이미지이거나 빌드 된 로컬 Dockerfile입니다. 작성 파일에 다른 파일 경로와 파일 이름을 지정하여보다 쉽게 ​​작업을 수행 할 수 있습니다. 그런 다음 Docker 링크를 사용하여 모든 컨테이너를 묶습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.