O que é docker e pra que ele serve ?
Docker é um conjunto de produtos e plataforma na qual oferece um serviço de virtualização a nivel de sistema operacional porem com algumas vantagens em relação aos seus concorrentes como por exemplo o virtual box e vmware, e uma das principais caracteristicas é o fato dele isolar a aplicação em um container, com isso não é necessario subir uma maquina do zero usando uma imagem iso.
Como o docker ele utiliza container para rodar as aplicações isso torna mais facil de gerenciar, ter controle de versão, é de facil implantação e etc. Com issso é possivel em poucos minutos provisionar aplicações que dependeriam de varias maquinas em pucos minutos.
Esse foi um pequeno resumo sobre oque é o docker e como ele funciona, caso queira saber mais, acesse o site official do Docker.

O que é container docker ?
O container é um ambiente fechado/isolado, onde é construido a partir de uma imagem, os containers forncem um ambiente onde todas as dependencias necessarias para o funcionameto da aplicação estão isoladas, minimizando os problemas de dependencias durante o desenvolvimento, melhorando versionamento, trazendo maior facilidade de implantação e gerenciamento por conta da facilidade de criar, destruir e parar um serviço em poucos segundos.
Caso queira saber mais sobre o funcionamento do container clique aqui
.
O que é uma imagem docker ?
Como falei do paragrafo acima, as imagens são crucias para o funcionamento dos containers pois o containers são consdtruidos para rodar essas imagens. As imagens do docker podem ser baixadas por meio do registry oficial do docker, o docker hub: https://hub.docker.com/
Por meio do docker hub você pode estar baixando e acessando a documentação das imagens, e por meio das imagens disponiveis você pode estar constuindo sua propria imagem docker.
Construindo uma imagem docker.
Neste exemplo abaixo vou demostrar como estar construindo uma imagem docker na qual utiliza o ubuntu 16.04, e dentro do ubuntu vamos realizar a instalação e configuração do apache2.
Para estar construindo uma imagem docker, é necessario que você crie um arquivo chamado "Dockerfile", é por meio dele onde vamos definir a imagem base e os comandos necessarios para instalação do apache2.
Repare que ao criarmos o arquivo no visual studio code ele já reconhece e adiciona uma "flag" com o icone do docker.
Após criar o arquivo Dockerfile, digite o codigo abaixo dentro do arqivo e salve-o:
# através do comando FROM indicamos a imagem e versão FROM ubuntu:16.04 # executa a atualização dos pacotes RUN apt update && apt upgrade -y # instala o apache no container RUN apt install apache2 -y # remove o arquivo default gerado pelo apache2 RUN rm /var/www/html/index.html # cria um novo arquivo index.html RUN echo " meu primeiro container docker
" >> /var/www/html/index.html # inicia o serviço ao rodar o container CMD ["-D", "FOREGROUND"] ENTRYPOINT ["apachectl"] # expõe a porta 80 do container EXPOSE 80
Após inserir o codigo no arquivo, e salvar vamos buildar(construir) a imagem docker, para isso utilizamos o comando:
docker build -t [nome-da-imagem] .
nesse caso eu nomeei a imagem como "ubuntu/apache2-webserver" como no exemplo abaixo:
Após executar o comando acima para buildar a imagem, podemos localizar a imagem criada por meio do comando:
docker images
Rodando um container docker.
Após criar a imagem docker, vamos utilizar ela para rodar o primeiro o container, para isso vamos vamos utilizar o seguinte comando:
docker run -d -P ubuntu/apache2-webserver
Através do comando: docker ps você verifica os containers em execução em sua maquina, nesse caso vemos que o container que acabei de executar, esta utilizando a porta "49154" da maquina para fornecer acesso ao container.
Para acessar o container basta localizar a porta do container como foi realizado acima através do comando "docker ps" como no meu caso a porta é a "49154", vou acessar o container por meio de meu navegador dessa forma:
http://localhost:49154/
Acima vemos a aplicação web gerada pelo apache2 que esta dentro do container gerado.
Conclusão.
O docker é uma ferramenta incrivel neste artigo eu procurei trazer algo basico, e espero que de facil entendimento.
Caso tenha duvidas ou queira baixar o codigo utilizado você pode acessar esse projeto por meio do meu github, clicando aqui:
Link do projeto