Docker: confuso sobre vários contêineres

0

Eu gostaria de poder replicar um ambiente de desenvolvimento em vários computadores. Eu pensei que o Docker poderia ser uma boa ferramenta para fazer isso, mas eu fiquei preso.

Eu tenho um aplicativo que usa:

  • apache com algumas extensões
  • PHP FPM
  • MySQL
  • Compositor
  • Compass (para recompilar arquivos SASS)
  • Grunt & Bower

Todos os arquivos devem permanecer na máquina host e disponibilizados para os serviços.

Então eu criei um Dockerfile, que configura e inicia o Apache. Ótimo!

Infelizmente, não consigo descobrir como proceder daqui.

Como posso configurar o PHP FPM, MySQL e Compass? Entendo que devo executar cada um desses processos em um contêiner separado e vinculá-los (em vez de iniciar vários serviços dentro do mesmo contêiner).

Instintivamente, criaria vários Dockerfiles, um para cada serviço, e começaria cada um com o docker-compose. Mas parece que esse não é o caminho a seguir e não consegui descobrir qual é a idéia correta.

Encontrei muitas imagens personalizadas, mas eu preferiria criar pessoalmente cada contêiner com minha própria configuração. Isso é possível?

Ou eu estou melhor apenas provisionando e executando uma VM completa, no Vagrant ou diretamente no VirtualBox?

Obrigado!

    
por Palantir 24.10.2015 / 16:51

2 respostas

1

O Docker Compose sempre foi uma ótima ferramenta nesse cenário em que você tem pequenos microsserviços em vez de um grande aplicativo monolítico despejado em uma única imagem do Docker. Se você não quer ter um grande número de Dockerfile, você sempre pode criar sua própria Docker Image com a embalagem necessária para simplificar.

Exemplo: Em vez de usar o Ubuntu Docker Image oficial, você pode criar sua própria imagem do Docker do Ubuntu com o pacote necessário. Isto irá reduzir a sua confusão em torno de ter um grande número de Dockerfile. Mas esteja ciente de que isso irá sobrecarregar a construção de novas imagens do Docker sempre que você quiser fazer alterações e algo que não seja recomendado para o ambiente de desenvolvimento.

Aqui está o snippet do arquivo docker-compose.yml do este link , que é muito simples para entender, não possui Dockerfile individual e pode ser facilmente customizado com base em sua necessidade:

 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"
    
por 09.11.2017 / 01:56
0

Você está definitivamente no caminho certo. O Docker-compose é o que você quer.

Cada "serviço" seria uma imagem do Docker ou um Dockerfile local criado. Você pode especificar diferentes caminhos de arquivos e nomes de arquivos em seu arquivo de composição para facilitar as coisas. Em seguida, use os links do Docker para amarrar todos os contêineres juntos.

    
por 25.10.2015 / 05:47

Tags