Dockerfile reference
Docker can build images automatically by reading the instructions from a Dockerfile
. A Dockerfile
is a text document that contains all the commands a user could call on the command line to assemble an image. Using docker build
users can create an automated build that executes several command-line instructions in succession.
USAGE
The docker build command builds an image from a Dockerfile
and a context. The build’s context is the set of files at a specified location PATH
or URL
. The PATH
is a directory on your local filesystem. The URL
is a Git repository location.
A context is processed recursively. So, a PATH
includes any subdirectories and the URL
includes the repository and its submodules. This example shows a build command that uses the current directory as context:
docker build --tag nomedaimagem:tag .
No directório com o trabalho apresentado em "[IDS] Estrutura do ambiente de desenvolvimento: rplotter", é criado o Dockerfile com o editor VIM:
FROM alpine:3.7
MAINTAINER Guilherme Marcello
LABEL description="Imagem com os exemplos dos artigos do Blogger"
WORKDIR aib/
WORKDIR blogger/
COPY . .
Para gravar o ficheiro :x
home@marcello:~$ ls
development Dockerfile
Fazemos a build da imagem com o nome aib2021marcello/blogger e a tag rplotter:
home@marcello:~$ docker build --tag aib2021marcello/blogger:rplotter .
...
...
Successfully built 80d3e5712bee
Successfully tagged aib2021marcello/blogger:rplotter
Perfeito! A nossa imagem foi criada e tem o id 80d3e5712bee! Para verificar as imagens que existem localmente usamos o seguinte comando:
home@marcello:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
aib2021marcello/blogger rplotter 80d3e5712bee 0 minutes ago 4.21MB
alpine 3.7 6d1ef012b567 20 months ago 4.21MB
Sim, criamos uma "distribuição" do alpine linux personalizada com um tamanho de 4.21MB para os projectos no blogger de AIB!
Para corrermos a "distribuição" em container com o nome primeirocontainer e de forma interativa (iniciamos uma sessão em shell do container) usamos o comando:
home@marcello:~$ docker run --name primeirocontainer -it aib2021marcello/blogger:rplotter
/aib/blogger$ ls
Dockerfile development
/aib/blogger$ exit
home@marcello:~$
O que isso significa? QUALQUER pessoa com a imagem que fizemos vai ter o mesmo sistema a correr!
E então...? QUALQUER pessoa com a imagem vai ter o mesmo ambiente, com as mesmas definições!
Sim...e? QUALQUER pessoa com a imagem vai correr os projectos da MESMA forma!
Problemas do tipo "preciso da versão X do java para compilar e fazer a build do projecto da empresa YYY...que chatice!" deixam de existir e assim temos maior agilidade no desenvolvimento, debug e deploy!
Mas tenho a minha imagem gravada localmente, como alguém pode descarregar a minha imagem e correr um container? Fazemos um push para um registry no Docker Hub, por exemplo. No Docker Hub criei uma conta com o username aib2021marcello e criei um repositório público (qualquer pessoa com docker pode fazer pull da minha imagem) com o nome blogger (sim, o mesmo nome da imagem que fizemos, aib2021marcello/blogger). Assim, podemos fazer o push da nossa imagem para o Docker Hub! 1. Primeiro é preciso fazer o login (autenticação) com a nossa conta do Docker Hub (com as mesmas credenciais):
home@marcello:~$ docker login
...
...
Login Succeeded
2. Depois fazemos o push da nossa imagem:
home@marcello:~$ docker push aib2021marcello/blogger:rplotter
3. Verificar se a imagem está no Docker Hub:
4. Fazer pull da imagem no registry (poderia ser feito em qualquer computador com docker, sem precisar da autenticação, uma vez que o repositório é público):
home@marcello:~$ docker pull aib2021marcello/blogger:rplotter
5. Começar a dockerizar o que quiser!