AAAbel Aguiar
← Voltar para o blog
dockerdocker-compose

Localhost com docker

Usando docker no seu ambiente de desenvolvimento

Abel Aguiar·
Localhost com docker

Porque docker?

Docker é uma ferramenta de virtualização que usa recursos nativos do linux (LXC), não emulando o S.O. de forma completa, mas sim alguns recursos, assim ficando mais simples e leve de funcionar nos servidores. Nos dias de hoje temos que lidar com vários tipos de aplicações que funcionam com tecnologias distintas, assim a configuração dessas máquinas fica cada vez mais complexa e aí onde o docker entra para resolver esse problema, permitindo criar scripts que automatizam esses processos, fazendo com que no seu servidor precise apenas do docker e por ele todo o trabalho é feito.

Empacotamento

Com docker podemos empacotar todos os serviços que precisamos e criar containers, que por sua vez são isolados e tem sua própria rede, fazendo a separação dos recursos e usados de forma mais leve e de acordo com a necessidade.

Portátil

Dentro do desenvolvimento de software o docker se torna ainda mais prático, pela forma como novos desenvolvedores podem entrar no projeto sem se preocupar com configurações de máquina e requisitos do projeto, assim executando alguns scripts do docker a aplicação funciona sem restrições com o mesmo ambiente do servidor.

Comparação entre virtualização comum e com docker

Na virtualização comum temos um sistema operacional sendo instalado e recursos de hardware sendo reservados para ele, tendo isolamento de rede e software. No final temos uma máquina completa, que consome recursos e espaço em disco maior do que com docker.

No docker temos uma virtualização de recursos usando LXC do linux, container é o foco, assim temos serviços como o apache2 ou nginx, assim como seus módulos. O sistema operacional linux é a própria base usada pelo docker, assim temos compartilhamento de recursos e S.O. e isso fornece leveza em bytes e rapidez na hora de levantar o serviço, diferente de uma máquina virtual completa, que demanda mais espaço e processamento.

Aplicando de forma simples em seu projeto

Primeiro você deve ter uma máquina linux e nela instalar docker, tendo feito esse processo fica mais fácil, execute no seu terminal o seguinte comando para criar seu primeiro container.

docker run hello-world

Ele irá baixar a imagem referente ao nome fornecido no comando. Existe containers e imagens dentro do docker: a imagem seria os arquivos do seu recurso instalado e o container seria a instância do sistema para executar a tarefa a partir da imagem.

Docker compose

É uma ferramenta que automatiza a execução de todos os scripts do seu projeto, assim através de um simples comando poderá subir todos os containers sem a necessidade de subir cada um. Como ele é um plus do docker também precisa ser instalado, antes de continuarmos instale na sua máquina.

O projeto que vamos trabalhar nesse post é com tecnologias para a web:

Primeiro passo é criar um arquivo chamado docker-compose.yml dentro do seu projeto e nele colocar as seguintes informações:

version: '2'

services:
  app:
    build:
      context: ./docker/app
    volumes:
      - .:/var/www/html
    ports:
      - 8080:80
    depends_on:
      - database

  database:
    image: mysql:5.7
    ports:
      - 3306:3306
    environment:
      - MYSQL_USER=project
      - MYSQL_PASSWORD=project
      - MYSQL_ROOT_PASSWORD=project
      - MYSQL_DATABASE=project

Nesse arquivo temos APP e DATABASE com suas respectivas configurações, portas, apontamentos e variáveis de ambiente. No início do arquivo temos a versão do docker-compose utilizado. O serviço APP usa um build que faz referência a uma imagem configurada em um Dockerfile dentro da pasta docker/app, com o conteúdo abaixo:

FROM php:7.1-apache

MAINTAINER Abel Aguiar <abelaguiarce@gmail.com>

RUN apt update \
    && apt install -y \
        curl \
        git \
        vim \
        openssl \
        libpq-dev \
        libxml2-dev \
        libicu-dev \
        libmcrypt-dev \
        locales \
        libmagickwand-dev --no-install-recommends \
        libfreetype6-dev \
        libjpeg62-turbo-dev \
        libpng-dev \
    && a2enmod rewrite

RUN docker-php-ext-configure intl \
    && pecl install imagick \
    && docker-php-ext-enable imagick

RUN docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/

RUN docker-php-ext-install -j$(nproc) \
        ctype dom iconv intl json mbstring opcache pdo_mysql mysqli \
        session simplexml tokenizer xml gd

RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/bin --filename=composer \
    && echo 'error_reporting = E_ALL' >> /usr/local/etc/php/conf.d/php-error-reporting.conf \
    && echo 'display_errors = On' >> /usr/local/etc/php/conf.d/php-error-reporting.conf

ADD 000-default.conf /etc/apache2/sites-available/000-default.conf

Também precisará de um arquivo chamado 000-default.conf, nele será configurado nosso host virtual:

<VirtualHost *:80>
    DocumentRoot /var/www/html/public
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Como os containers são isolados da rede, temos que apontar uma porta externa da máquina para uma porta dentro do container: no docker-compose 8080:80 significa que internamente no container a porta usada é a 80 e a de acesso externamente será a 8080, assim poderíamos acessar a aplicação pelo link http://localhost:8080.

Volume é quando temos que pegar arquivos fora do container para utilização dentro dele, assim todo o código produzido pode ser acessado dentro do container. depends_on faz que a execução e construção do container dependa de outro serviço, que no nosso caso é o database.

Tendo todos esses arquivos dentro do seu projeto e com docker e docker-compose instalados no seu linux, é só executar o comando abaixo dentro do terminal:

docker-compose up -d

Up para criar os containers e -d para que eles fiquem em segundo plano. Execute o comando abaixo para conferir se ocorreu tudo bem:

docker ps -a

Obrigado a todos que leram até aqui, quero dar uma introdução para quem quer iniciar com docker, assim como reforçar um pouco meus conhecimentos sobre o assunto.

Posts relacionados