Anotações — Aprendendo Docker

O objetivo é compartilhar o meu aprendizado do uso do Docker.

Filipe M. Silva
Aug 26, 2017 · 3 min read

Para ajudar outros e para servir de fácil consulta resolvi fazer algumas anotações das buscas que faço sobre docker. Não tem muita revisão e também pode haver alguns erros, se você observar algum me avise. É um texto de aprendiz, não de especialista. :)

Essas notas serão quebradas em outras partes, mas sempre com um objetivo em mente definido como um PROJETO


PROJETO — Ter uma imagem do Wordpress usando Docker.

O QUE É Docker roda aplicações isoladas no mesmo servidor. Usa diversas técnicas de virtualização.

DOCKER IMAGES

Cada Docker Container é uma instancia de um Docker Image. Uma image é uma instalação minima do Linux, com o necessário para rodar a aplicação. Isso permite rodar uma outra distro dentro de um Ubuntu.

Docker images podem ser compartilhadas através do Docker Hub que é mantido pelo time de Docker.

COMUNICAÇÃO ENTRE DOCKER IMAGES

Docker images são isoladas da máquina local por padrão e a comunicação ocorrer através de três formas:

  • Variáveis de ambientes

A aplicação rodam dentro da image checa essas vari avies de tempos em tempos.

  • Docker data volume

Esta forma pode acontecer de duas formas, internamente ou compartilhada. Internamente o dado persiste mesmo quando o container especificado for apagado. Um data volume compartilhado, transforma uma pasta interna da image em uma pasta compartilhada com a máquina local, facilitando o compartilhamento de arquivos entre ambos.

  • Via rede

Essa maneira permite criar links entre images usando as respectivas portas, exemplo você pode ter uma image usando um banco de dados e acessar essa image através de outra image usando o encaminhamento das portas.

Os conceitos de Docker Images e comunicação de ente Images, ajuda a entender o Docker Compose a função do docker compose, já que ele facilita na administração de múltiplos containers.

INSTALAÇÃO

  • DOCKER

A forma mais simples para fazer a instalação do Docker é usar o script criado pelo time do Docker. Basta usar o seguinte comando no terminal.

$ wget -qO- https://get.docker.com/ | sh

Será solicitado senha durante a instalação.

  • DOCKER COMPOSE

Será necessário ter o python-pyp rodando para instalar o Docker Compose

$ sudo apt-get -y install python-pip
$ sudo pip install docker-compose
  • RODANDO UM CONTAINER COM DOCKER COMPOSE

Primeiro precisamos ter um arquivo com a extensão .yml, você pode criar esse arquivo em qualquer pasta que espera ter a sua aplicação.

No arquivo de .yml cria o nome da image na primeira linha e na segunda linha especifica em que image ela é baseada.

# docker-compose.ymlprimeira-image:
image: hello-world

Agora basta rodar com o comando

$ docker-compose up
  • COMANDOS DO DOCKER COMPOSE E OUTROS

Usando a opção -d a roda em background e a opção ps mostra os processos, no campo state mostra se o está rodando quando mostra Up e exit para quando houver saída do processo.

O comando rm ajuda a começar um container sem informações antigas.

Quando se usa uma image que tem a execução é persistente podemos usar o comando docker exec para acessar o terminal do container.

Para isso basta usar da seguinte maneira

$ docker exec -it [imageId] /bin/bash

Usar só o wordpress isolado na nossa image causa erros, por isso vamos colocar no nosso .yml file o link para outra imagem que também será declarado no mesmo arquivo.

wordpress:
image: wordpress
links:
- wordpress_db:mysql
wordpress_db
image: mariadb

Dentro na image wordpress temos o links que referencia para a imagem do wordpress_db e usamos a image do mariadb para a base de dados.

Dentro do wordpress_db precisamos das variáveis de ambiente com a senha e para isso vamos usar a key enviroments.

Na key enviroments você pode precisa declarar uma senha usando a key MYSQL_ROOT_PASSWORD.

E dentro da image wordpress podemos ter a key ports para linkar a porta do host com a porta do container.

Neste momento o docker-compose.yml deve estar assim

# dmirame-image:
image: wordpress
links:
- wordpress_db:mysql
ports:
- 8080:80
wordpress_db:
image: mariadb
environment:
MYSQL_ROOT_PASSWORD: suasenha

)

Filipe M. Silva

Written by

Javascript developer que viu com esperanças do lançamento do IE8 e torceu para o fim do Flash. Um dos 7 masters de Node.js do iMasters.