DEV Community

loading...
Cover image for Postila de docker

Postila de docker

Neni
hjkl > wasd
Updated on ・4 min read

Esse artigo são anotações sobre meu aprendizado e utilização de docker como dev, espero que seja útil para outras pessoas.

🚧 Post em constante desenvolvimento 🚧

Docker

Comandos

Utilizando Docker Compose, dentro do projeto com o arquivo docker-compose.yml criado:

  • docker-compose up -d Cria os containers sem travar o terminal
    • docker-compose up -d --build Cria os containers mas rebuildando as imagens. Útil quando o Dockerfile foi modificado e deve ser relido.
  • docker-compose down Para e apaga todos containers criados
  • docker-compose exec <service-name> <comando> <param1> <param2>... Executa um comando dentro do container, usos mais comuns:
    • docker-compose exec app composer install Instala as dependências do composer
    • docker-compose exec app composer test Executa script test do composer
    • docker-compose exec app bash Acessa "terminal" do container do service app

docker-compose.yml

É uma "receita" para criar containers (especificando ordem e dependência) configurando instruções adicionais antes das criações das imagens

Glossário

  • version Compatibilidade do Docker Compose
  • services Serviços (containers) que serão criados
    • Evite usar container_name, pois com o Docker Compose, dentro do projeto, podemos executar comandos pelo nome do serviço como: docker-compose exec <service-name> <command>
  • build Usado ao invés de image, especifica local onde está o Dockerfile existente. Se estiver na mesma pasta que o docker-compose.yml utilize .
  • image Usado ao invés de build, especifica imagem, igual ao FROM do Dockerfile
  • volumes Lista de volumes que serão espelhados da sua "máquina" (HOST) para o container
    • Exemplo: para .:/var/www/html significa que o projeto da pasta do docker-compose.yml é refletido em /var/www/html, onde que cada arquivo adicional criado/modificado em um é replicado em outro
  • ports Lista de espelhamentos de portas de um container em outro
    • Exemplo: para 8081:80 requisições na porta 8081 da máquina local (HOST) são direcionadas para a porta 80 de dentro do container
  • command Comando que será executado ao iniciar o container. Normalmente usado para iniciar o servidor
  • environment Variáveis de ambiente para serem utilizadas na imagem e/ou container. Sua utilização varia muito de imagem para imagem
  • working_dir Diretório padrão do container. Quando for acessado é nessa pasta que iremos, o comum é deixar no espelhamento do volume

Exemplos

version: "3.3"

services:
  app:
    build: docker/centos
    volumes:
      - .:/var/www/html
    working_dir: /var/www/html
    ports:
      - '8081:80'
    command: /usr/sbin/httpd -DFOREGROUND
Enter fullscreen mode Exit fullscreen mode
version: "3.3"

services:
  db:
    restart: always
    image: postgres
    environment:
      POSTGRES_DB: dbname
      POSTGRES_USER: dbuser
      POSTGRES_PASSWORD: dbpwd
    ports:
      - "5432:5432"
    volumes:
      - ./docker/psql/init.sql:/docker-entrypoint-initdb.d/init.sql

  app:
    build: docker/php
    volumes:
      - .:/var/www/html
    working_dir: /var/www/html
    links:
      - db:db
    ports:
      - '8080:80'
    depends_on:
      - db
Enter fullscreen mode Exit fullscreen mode

Dockerfile

É uma "receita" para criar uma imagem e, a partir da dessa, criar um container. Deve iniciar de uma imagem existente (FROM) e depois customizá-la.

Glossário

Especificação das instruções

  • FROM Imagem que vai ser usada como ponto de partida
  • ENV Variável de ambiente que pode ser utilizada em scripts, instruções ou configurações de ambiente
  • RUN Comando que vai ser executado no "terminal". Novas linhas devem utilizar \ e comandos diferentes devem ser usados com && para serem executados na mesma instrução de RUN
    • Evite utilizar mútiplos RUN, o ideal é aglutinar em uma mesma instrução o máximo possível
    • Lembre de atualizar os pacotes na primeira instrução RUN
  • ADD Copia arquivos, diretórios ou remotos para um local

Exemplos

FROM centos:centos7

ENV PHALCON_VERSION phalcon-v1.3.4
ENV PATH="/opt/remi/php54/root/bin:${PATH}"

RUN yum -y update && \
    yum -y install \
        gcc \
        make \
        epel-release \
        httpd \
        unzip

ADD https://packages.microsoft.com/config/rhel/7/prod.repo /etc/yum.repos.d/mssql-release.repo

RUN yum -y install http://rpms.remirepo.net/enterprise/remi-release-7.rpm && \
        yum-config-manager --enable remi-php54 && \
        ACCEPT_EULA=Y yum -y install \
        php54-php \
        php54-php-common \
        php54-php-devel \
        php54-php-mysqlnd \
        php54-php-mbstring \
        php54-php-soap \
        php54-php-gd \
        php54-php-ldap \
        php54-php-pdo \
        php54-php-intl \
        php54-php-xml \
        php54-php-sqlsrv \
        php54-php-pear && \
        yum clean all;

ADD https://github.com/phalcon/cphalcon/archive/$PHALCON_VERSION.tar.gz ./phalcon.tar.gz

RUN rm -rf /var/cache/yum && \
        tar -xzf {PWD}/phalcon.tar.gz && \
        cd cphalcon-$PHALCON_VERSION/build && \
        ./install && \
        rm -rf /phalcon && \
        echo 'extension=phalcon.so' \
        | tee /opt/remi/php54/root/etc/php.d/30-phalcon.ini;

RUN curl -sS https://getcomposer.org/installer \
        | php -- --install-dir=/usr/local/bin --filename=composer;
Enter fullscreen mode Exit fullscreen mode
FROM php:7.4-apache

RUN a2enmod rewrite

RUN cp /usr/local/etc/php/php.ini-development /usr/local/etc/php/php.ini

# THANKS: https://github.com/docker-library/php/issues/221#issuecomment-601129850
RUN apt-get update; \
    apt-get install -y libpq5 libpq-dev libzip-dev zip; \
    docker-php-ext-install pdo pdo_pgsql zip; \
    apt-get autoremove --purge -y libpq-dev; \
    apt-get clean; \
    rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/doc/*

RUN curl -sS https://getcomposer.org/installer \
        | php -- --install-dir=/usr/local/bin --filename=composer;
Enter fullscreen mode Exit fullscreen mode

Discussion (0)