Este projeto segue as especificações requeridas do repositório -> Sistemas para Internet - SecDevOps.
Primeiro, tenha certeza que o Docker esteja instalado corretamente.
Para saber a versão instalada, no terminal:
docker -v
Iremos Buildar uma Imagem:
docker build . -t frontend-php:0.0.1
- docker build é um comando CLI do Docker para gerarmos containers.
- -t significa Tag, portanto conseguimos futuramente identifica-lo melhor.
- frontend-php é o nome do projeto que estamos dando (é de sua escolha).
- :0.0.1 é a versão que estamos dando ao projeto.
Uma imagem Docker são blocos de containers em execução. Para executar um container é preciso construir a imagem inicialmente.
Dockerfile é um arquivo com o padrão Docker onde nós colocamos nossos comandos para podermos automatizar deploys. Nele podemos buildar uma imagem do Docker e executar instâncias de containers. É de extrema importancia a ordem em que iremos colocar os códigos, o Dockerfile é lido de baixo para cima.
FROM php:7.2-apache
- Esta dizendo qual imagem você escolheu com sua versão respectivamente. A imagem vem do DockerHub, existem diversas imagens prontas... É possível criar sua própria imagem e subir ela para sua necessidade.
RUN docker-php-ext-install mysqli
- Podemos instalar extensões, neste caso é uma extensão que liga o PHP com MySql.
WORKDIR /var/www/html/
- Diretório de execução.
COPY . /var/www/html/
- Copia todo o conteúdo.
docker images
Você pode observar detalhes de outras imagens que você já criou utilizando este comando.
Para executarmos nosso Container com nossa aplicação:
docker run -d -p 80:80 --rm --name frontend frontend-php:0.0.1
- docker run comando CLI do Docker.
- -d deixa o container executando em segundo plano.
- -p define a porta utilizada, seguida de porta base para porta destino("x":"x").
- --rm --name nome do container.
Utilize um comando CLI do Docker:
docker ps
Ele irá mapear todos os containers que estão rodando.
Iremos utilizar o terminal e o Docker CLI para pegarmos as imagens do PHP com Apache e MySQL.
Tenha certeza que esteja no diretório do Back-end para executar estes comandos:
docker pull php:7.2-apache
- Estamos pegando o PHP com Apache.
docker pull mysql:5.1
- E agora o MySQL na versão 5.1.
docker build -t db:0.0.1
- -t significa Tag, portanto conseguimos futuramente identifica-lo melhor.
- :0.0.1 é a versão que estamos dando ao projeto.
docker images
Você pode observar detalhes de outras imagens que você já criou utilizando este comando.
Para executarmos nosso Container com nossa aplicação:
docker run -d -e MYSQL_DATABASE=demo -e MYSQL_ALLOW_EMPTY_PASSWORD=yes --name backend db:0.0.1
- docker run comando CLI do Docker.
- -d deixa o container executando em segundo plano.
- -e é o uso da nossa variável.
- MYSQL_DATABASE=demo nome do nosso banco de dados.
- MYSQL_ALLOW_EMPTY_PASSWORD=yes permite o uso de senha vazia.
- --name nome do container.
docker exec -ti backend mysql -u root -p
- docker exec executa a função.
- -ti backend mysql especifica qual projeto e qual tecnologia.
- -u root -p utiliza o padrão de portas para conectar o banco.
FROM mysql:5.7
- Esta dizendo qual imagem você escolheu com sua versão respectivamente. A imagem vem do DockerHub, existem diversas imagens prontas... É possível criar sua própria imagem e subir ela para sua necessidade.
COPY ./demo.sql /docker-entrypoint-initdb.d/
- Esta dizendo qual pasta que iremos copiar os arquivos.
Por fim, linkamos nossos dois projetos que estão sendo executados em containers:
docker run -d -p 80:80 --name frontend --link backend frontend:0.0.1
- --link conecta dois containers, fazendo uma ligação entre os dois.
- Criamos um Container de um projeto, entendemos como eles funcionam e como executamos.
- Utilizamos imagens para a construção de Containers utilizando DockerHub, dando asas para criar infinitos projetos com imagens de lá.
- Linkamos os projetos de Containers diferentes e agora tudo faz sentido, tá tudo junto e funcionando em sincronia
- Subimos um projeto completo em Docker! pera... É isso mesmo? Olocoo meu! :D
Sério que você curtiu? Que foda! ^^
A Documentação do Docker tem muita coisa maneira!
◔ ⌣ ◔