Tempo de leitura estimado: 3 minutos
Maior parte dos ficheiros Docker a partir de uma imagem dos pais. Se precisar de controlar completamente o conteúdo da sua imagem, poderá ter de criar uma imagem de base em vez disso. Aqui está a diferença:
-
Uma imagem pai é a imagem em que se baseia a sua peregrinação. Refere-se ao conteúdo da directiva
FROM
noDockerfile. Cada declaração subsequente no Dockerfile modifica esta parentimage. A maioria dos Dockerfiles começa a partir de uma imagem pai, em vez de uma imagem base. No entanto, os termos são por vezes utilizados alternadamente. -
Uma imagem base tem
FROM scratch
no seu Dockerfile.
Este tópico mostra várias formas de criar uma imagem base. O processo específico dependerá muito da distribuição Linux que pretende empacotar. Temos alguns exemplos abaixo, e encorajamo-lo a submeter pedidos para contribuir com newones.
Criar uma imagem completa usando tar
Em geral, comece com uma máquina a funcionar que esteja a executar a distribuição que gostaria de empacotar como imagem de base, embora isso não seja necessário para algumas ferramentas como o Debian’sDebootstrap, que também pode construir imagens Ubuntu.
Pode ser tão simples como isto criar uma imagem pai Ubuntu:
$ sudo debootstrap xenial xenial > /dev/null$ sudo tar -C xenial -c . | docker import - xeniala29c15f1bf7a$ docker run xenial cat /etc/lsb-releaseDISTRIB_ID=UbuntuDISTRIB_RELEASE=16.04DISTRIB_CODENAME=xenialDISTRIB_DESCRIPTION="Ubuntu 16.04 LTS"
Há mais exemplos de scripts para criar imagens pai no repositório DockerGitHub.
Criar uma imagem pai simples usando scratch
P>Pode usar a imagem mínima reservada do Docker, scratch
, como ponto de partida para a construção de contentores. Usando o scratch
“imagem” sinaliza para o processo de construção que deseja que o próximo comando no Dockerfile
seja a primeira camada do sistema de ficheiros na sua imagem.
enquanto scratch
aparece no repositório do Docker no centro, não pode puxá-lo, executá-lo, ou marcar qualquer imagem com o nome scratch
. Em vez disso, pode referir-se a ela no seu Dockerfile
. Por exemplo, para criar um recipiente mínimo usandoscratch
:
FROM scratchADD hello /CMD
Assumindo que construiu o exemplo executável “olá”, seguindo as instruções em https://github.com/docker-library/hello-world/,e compilou-o com o comando -static
bandeira, pode construir esta Dockerimage usando este comando docker build
:
docker build --tag hello .
Não se esqueça do carácter .
no final, que define o contexto de construção para o directório actual.
Nota: Porque o Docker Desktop para Mac e o Docker Desktop para Windows utilizam um VM Linux, é necessário um binário Linux, em vez de um binário Mac ou Windows.Pode usar um recipiente Docker para o construir:
$ docker run --rm -it -v $PWD:/build ubuntu:16.04container# apt-get update && apt-get install build-essentialcontainer# cd /buildcontainer# gcc -o hello -static -nostartfiles hello.c
Para executar a sua nova imagem, use o comando docker run
:
docker run --rm hello
Este exemplo cria a imagem hello-world utilizada nos tutoriais.Se quiser testá-lo, pode clonar a imagem repo.
Mais recursos
Há muitos recursos disponíveis para o ajudar a escrever o seu Dockerfile
.