Docker - Algumas coisas que podem ser feitas além do "Hello world"

Oi pessoal!:) Quero começar este post agradecendo mais uma vez por estarem prestigiando o conteúdo do blog. Esta é uma pequena iniciativa para disseminar conhecimento, trocar experiências e também aprender com vocês, então vamos seguir!

A ideia deste post é falar um pouco mais de Docker e algumas coisas que podem ser feitas além do "hello world".

Quando comecei a usar Docker apenas tinha em mente ter uma aplicação rodando em background e pronto, tela preta e um serviço rodando (postgres, wildfly e outros). Descobrir que Docker vai além disso é muito interessante e instigante, dá para fazer muitas coisas bem legais.

Esses dias queria fazer uma api em php utilizando o Slim Framework, porém tinha que instalar todo o ambiente na minha máquina para desenvolvê-la. Será que isso vale a pena, quando somente pretende-se "brincar" com um framework? Bom, acredito que não, então o que fiz:

web:
  image: tutum/apache-php
  hostname: web
  links:
   - mysql
  ports:
   - 80:80
  volumes:
   - .:/app

mysql:
  image: mysql
  hostname: mysql
  environment:
   - MYSQL_ROOT_PASSWORD=root 

Nessa parte é feito o link do container apache-php com o container do mysql.

links:
 - mysql

Aqui está sendo feito a parte mais importante desse docker-compose,

volumes:
 - .:/app

Esse volume basicamente serve para mapear um diretório no local onde está sendo executado o docker-compose com a pasta app do container. Ao criar um arquivo nessa pasta, será adicionado ao apache, com isso não é preciso configurar todo o ambiente do php para conseguir "brincar" com o Slim Framework, isso possibilita fazer inúmeras coisas como: compartilhar entre a máquina e o container, .jar, .war, .js, .html e etc.

Outra funcionalidade muito importante do volume é fazer backup de dados, como por exemplo: criar um volume com o banco de dados do postgres e toda vez que subir um container do postgres, apontar para o volume criado, com isso não seria perdido os dados do banco de dados, às vezes isso é bem útil, ainda mais quando utilizado docker em produção :).

Mas você deve está se perguntando: - Ainda é uma interface preta que está apenas rodando um serviço! Então vamos ver uma coisa legal :).

E se agora eu não tivesse mais interesse em instalar o Google chrome na minha máquina, então bastaria executar o seguinte comando:

docker run -it --net host --cpuset-cpus 0  -m 512mb -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=unix$DISPLAY -v /dev/snd:/dev/snd --privileged --name chrome jess/chrome

E com isso temos:

É possível compartilhar placa de som, USB e etc com um container, isso possibilita fazer muitas coisas, por exemplo: não precisar instalar o ambiente do Android na máquina, para executar testes em app Android, mas isso fica para um próximo post! Até breve.