Como posso fazer minha própria imagem de base para o Docker?

97

De acordo com a documentação do Docker , para construir sua própria imagem, você deve sempre especificar uma imagem de base usando a FROMinstrução.

Obviamente, há muitas imagens para escolher no índice do Docker , mas e se eu quisesse criar o meu próprio? Isso é possível?

A imagem baseé construída a partir do Ubuntu, se bem entendi, e quero experimentar uma imagem Debian. Além disso, quero realmente entender como o Docker funciona, e a baseimagem ainda é uma caixa preta para mim.


Editar: documentação oficial sobre a criação de uma imagem de base

Flimm
fonte
Não importa. :-) As perguntas aqui ainda precisam ser sobre o assunto de acordo com as diretrizes do site. Eles são abordados na Central de Ajuda e nas páginas do tour . (O link também parece pertencer a desenvolvedores de contêineres do Docker.) Se você está perguntando sobre sua própria imagem de contêiner, há uma ferramenta para isso no site deles
Ken White
@KenWhite: meta pergunta relevante: meta.stackexchange.com/questions/179249/…
Flimm
:-) Meta resposta relevante neste momento, que é a resposta logo acima da sua. (Veja especialmente o segundo comentário à resposta que vinculei, sobre a clareza do que sua pergunta está perguntando.)
Ken White
9
@Ken White: a questão é como 'fazer' uma imagem de base, não como implantar uma 'imagem'. Flimm está tentando programar algo que possa ser implantado posteriormente, por ele ou por outros. O Amazon EC2 está relacionado à implantação, mas acho que eles ainda têm alguns programadores programando coisas de programação :). A criação de imagens de base é um exemplo de programação, eu diria.
qkrijger
@qkrijger: Isso está sendo discutido na meta questão vinculada. Uma vez que a discussão está aberta, poste qualquer discussão sobre a atualidade lá (onde o consenso parece ser, não é um tópico de "material programático").
Ken White

Respostas:

38

Você pode dar uma olhada em como as imagens de base são criadas e continuar a partir daí.

Você pode encontrá-los aqui: https://github.com/dotcloud/docker/tree/master/contrib . Há mkimage-busybox.sh, mkimage-unittest.sh, mkimage-debian.sh

rangido
fonte
1
Os scripts mkimage- * foram movidos e renomeados (assim como o
repositório
32

Citando Solomon Hykes :

Você pode criar facilmente um novo contêiner a partir de qualquer tarball com "importação docker". Por exemplo:

debootstrap raring ./rootfs
tar -C ./rootfs -c . | docker import - flimm/mybase
Flimm
fonte
Talvez poste a edição / atualização em um comentário para que outras pessoas possam ver e talvez alguém possa reenviar a edição.
Bdoserror
1
@Flimm Por que eu precisaria usar o sudo neste caso? Execute esses comandos em seu diretório de usuário e não haverá motivo para elevação de privilégios. Você está criando uma imagem, não instalando.
rancidfishbreath
Nem precisa de root para uso normal do Docker; basta adicionar-se ao dockergrupo.
tekknolagi
1
Mas o hífen no comando import, recomendado por Flimm, é necessário: em docker import - flimm/mybasevez dedocker import flimm/mybase
Daniel Alder
A propriedade dos arquivos no tar será afetada pelo fato de você estar executando como root ou não. Se não como root, então debootstrape tardeve pelo menos ser executado sob fakeroot.
clacke
21

(crédito para fatherlinux) Obtenha informações em http://developerblog.redhat.com/2014/05/15/practical-introduction-to-docker-containers/ , que explica melhor

  1. Crie os arquivos tar para o seu sistema de arquivos, simplesmente pode ser

    tar --numeric-owner --exclude=/proc --exclude=/sys -cvf centos6-base.tar /
    
  2. Transfira o arquivo tar para outro sistema de janela de encaixe se não for instalado localmente e importque

    cat centos6-base.tar | docker import - centos6-base
    
  3. Agora você pode verificar executando-o.

    docker run -i -t centos6-base cat /etc/redhat-release
    

Os scripts do dotcloud combinam as duas primeiras etapas, o que me deixa confuso e parece complicado no início.

A diretriz oficial do docker usando debootstraptambém tenta limpar o sistema de arquivos.

Você pode julgar por si mesmo como realizar a etapa 1.

Larry Cai
fonte
14

Para começar a construir sua própria imagem do zero, você pode usar a scratchimagem.

Usar a “imagem” de rascunho sinaliza para o processo de construção que você deseja que o próximo comando no Dockerfile seja a primeira camada do sistema de arquivos em sua imagem.

FROM scratch
ADD hello /
CMD ["/hello"]

http://docs.docker.com/engine/articles/baseimages/#creating-a-simple-base-image-using-scratch

Mike
fonte
1
Este plus importde um arquivo tar são as duas respostas canônicas, e esse link é o recurso canônico.
clacke
7

Se você quiser fazer sua própria imagem de base, primeiro daria uma olhada nas Imagens Oficiais , especificamente stackbrewdentro desse repositório.

Caso contrário, existem algumas ótimas referências para imagens mínimas de SO no próprio docker repo .

Por exemplo, aqui está um script para fazer uma imagem de arco mínimo e há mais aqui .

Jessie Frazelle
fonte