Como já sabemos, imagens prontas podem ser encontradas em repositórios e podem ser baixadas e usadas conforme a nossa necessidade. O Docker Hub é um exemplo disso.
Acontece que nem sempre a imagem que queremos usar está pronta do jeito que queremos, e, muitas vezes teremos que ter uma imagem customizada a partir da imagem que já existe. Para isso, temos que construir nossas próprias imagens.
O Docker é capaz de construir imagens automaticamente lendo as intruções a partir de um arquivo texto chamado Dockerfile
.
O dockerfile é um arquivo texto com instruções, comandos e passos que é executado através do comando build
para gerar uma imagem.
Podemos pensar no Dockerfile como um arquivo de lote que contém instruções com uma sintaxe definida (INSTRUÇÃO argumento) que devemos seguir para que uma imagem seja criada.
Exemplo
Vamos criar uma imagem a partir do debian 8 que instale e inicie o servidor nginx
- Definir uma imagem base
- Definir informações para a imagem
- Executar comandos para instalar e iniciar o nginx
- Expor qual porta o servidor vai atender (no contêiner)
- Definir o ponto de entrada da aplicação
- Definir a execução de um comando para inicializar o servidor nginx
Criar Dockerfile
FROM debian:8
LABEL version="1.0" description="Debin/Nginx"
RUN apt-get update && apt-get install -y nginx && apt-get clean
EXPOSE 80
ENTRYPOINT [ "/usr/sbin/nginx" ]
CMD ["-g" "daemon off;"]
Buildar Dockerfile
docker build -t yuripeixinho/img:1.0 .
-
docker build
: o comando que constrói a imagem -
-t
: usado para informar que a imagem pertence ao meu usuário -
yuripeixinho/img:1.0
: nome da imagem e a tag atribuída à imagem -
.
: significa diretório atual
Criar e rodar container
Agora é necessário executar o comando para criar o container da imagem criada
docker run -d -p 8080:80 --name=ws1 yuripeixinho/img:1.0
-
docker run
: comando para criar e rodar um novo contêiner. -
d
(detached mode): O contêiner será executado em segundo plano (background), sem bloquear o terminal. -
p 8080:80
(port binding)Mapeia a porta 8080 do host para a porta 80 do contêiner. Isso significa que se um serviço (como o Nginx) estiver rodando no contêiner na porta 80, ele poderá ser acessado no host através da porta 8080 (
http://localhost:8080
). -name=ws1
: Define um nome para o contêiner (ws1
), facilitando a sua identificação e manipulação sem precisar usar o ID gerado automaticamente.yuripeixinho/img:1.0
: Nome e tag da imagem a ser usada para criar o contêiner. A imagemyuripeixinho/img
(versão1.0
) será baixada do repositório local ou do Docker Hub, caso não exista localmente.
Top comments (0)