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


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:



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

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.


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


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 .

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.