IntroducaoDepois de muito tempo tentando apenas entender o que e o Docker, achei melhor aprender colocando a mao na massa: Fazer um projeto que usa PHP e PostgreSQL rodar no Docker.O projeto escolhido foi o SiGE, um Sistema de Gerencia de Eventos utilizado principalmente na organizacao do COMSOLiD (evento realizado por alunos e ex-alunos do IFCE Campus Maracanau).O que e o Docker? Segundo o siteDocker e uma plataforma de codigo aberto para construcao, implantacao e execucao de aplicacoes distribuidas. Ele oferece a programadores, equipes de desenvolvimento e engenheiros um conjunto de ferramentas comum para tirar vantagem da natureza distribuida e em rede de aplicacoes modernas.Ou seja, ao montar um ambiente de desenvolvimento fica mais facil imitar o ambiente de producao e testes. Imagine o seguinte cenario:O servidor de producao possui o PHP 5.4 instalado juntamente com o PostgreSQL 9.3. Voce, desenvolvedor, tem o PHP 5.5 e o PostgreSQL 9.4. Ao realizar uma tarefa voce percebe que o codigo usado so funciona na versao 5.5 do PHP e que na 5.4, versao do servidor, nao existe essa funcionalidade ainda. O que acontece e que voce so vai perceber o erro quando o servidor estiver em producao, o que com certeza ira causar uma dor de cabeca.Usando Docker voce e capaz de usar exatamente as mesmas versoes das ferramentas, tanto no servidor quanto local, sem que elas causem conflitos em sua maquina. O Docker utiliza uma tecnologia chamada LXC ou Linux Containers (na verdade essa e a tecnologia padrao, mas existem outras).Podemos pensar no LXC como uma maquina virtual leve, isso porque diferente da maquina virtual que sobe uma instancia do sistema, o LXC usa o mesmo kernel da maquina host com a vantagem do Kernel namespaces - Componentes virtuais: ipc, uts, mount, pid, network e user.Instalacao No Linux: http://docs.docker.com/linux/step_one/Alem do Docker e ideal instalar tambem o Docker Compose http://docs.docker.com/compose/install/Utilizacao Obervacao: Abaixo estao apenas os passos importantes para entender a ferramenta, veja o codigo completo no codigo-fonte.As configuracoes de uma imagem do Docker devem ser feitas em um arquivo de texto, por padrao chamado de Dockerfile.O SiGE precisa inicialmente do PHP. Optei por utilizar a imagem nmcteam/php56, ou seja, PHP 5.6.Para utilizar a imagem basta colocar no seu Dockerfile:FROM nmcteam/php56COPY . /usr/share/nginx/html/siteWORKDIR /usr/share/nginx/html/siteRUN php -r "readfile('https://getcomposer.org/installer');" | phpRUN ["/bin/bash", "-c", "php composer.phar install"] O arquivo acima mostra que nossa imagem vai ser criada a partir de nmcteam/php56 (FROM). Tudo que estiver no diretorio atual (.) deve ser colocado em /usr/share/nginx/html/site (COPY). Ao executar comandos, execute a partir de /usr/share/nginx/html/site (WORKDIR). Em seguida o SIGE utiliza o composer do PHP (Nao confundir com o Docker Compose!), para isso e preciso instala-lo (RUN).No final das contas esse arquivo e como um script bash que executa alguns comandos para configurar o sistema.Para fazer o build da imagem execute:docker build -t main/sige . A opcao -t e o nome da sua imagem, de o nome adequado.Arquivo completo com outros comandos necessarios somente para o SiGE:https://github.com/comsolid/sige/blob/master/DockerfileEm seguida criei um Dockerfile separado para o PostgreSQL. Quando usar o Docker tente sempre separar os componentes do sistema em pequenos servicos que