De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.


Criando imagens Docker com Dockerfile

Colaboração: Rafael Gomes

Data de Publicação: 07 de abril de 2015

No artigo anterior sobre Docker, eu expliquei como modificar uma imagem docker usando COMMIT, mas propositalmente não comentei que essa não é a melhor prática :) Evitei tocar nesse assunto para não frustrar o aprendizado, pois é necessário aprender como funciona o COMMIT, com DIFF e afins.

A melhor forma de modificar uma imagem Docker é recriando-a, ou seja, modificando seu Dockerfile, ou criando um Dockerfile novo tendo a imagem escolhida como base e nesse artigo falaremos sobre tudo isso.

Dockerfile

Dockerfile é um arquivo, que contém um conjunto de instruções necessárias para se criar uma imagem Docker, ou seja, com posse do Dockerfile de uma determinada imagem, basta modificar o que deseja e recriar a imagem "do zero", isso pode demorar um pouco mais, mas essa imagem será muito mais "enxuta" e você terá controle total do seu estado, o que seria bem mais difícil no modelo de efetuar commit de um container.

Caso não tenha o Dockerfile, você pode usar uma imagem a sua escolha como base e então criar a sua imagem como uma camada acima.

Sintaxes básicas

  • FROM : É a imagem base. Normalmente é usada com nome de distribuição (Debian, Ubuntu e afins), pois não precisaremos criar toda estrutura, certo?
  • MAINTAINER : É onde se especifica o autor da imagem.
  • RUN : São as instruções que serão executadas para criação da imagem em questão.
  • ENTRYPOINT : Especifica o que o que será executado ao iniciar o container. Ele age como precedente a sintaxe CMD, ou seja, caso o ENTRYPOINT seja "top", o CMD pode ser "-b" que nesse caso ele executaria o top em modo batch. Uma vez que o ENTRYPOINT não seja especificado, e um CMD seja usado, o ENTRYPOINT padrão é "/bin/sh -c".
  • EXPOSE : Usado para informar qual porta o container docker irá "escutar". Docker usa essa informação para interconexão entre containers, ao utilizar links. EXPOSE não define qual porta será exposta para o hospedeiro ou tornar possível o acesso externo para portas do container em questão. Para expor essas portas utilize em tempo de inicialização da imagem a flag -p ou -P.

Para explicação mais exaustiva das sintaxes já explanadas e outras novas, acesse essa documentação.

Exemplo

Crie uma pasta com o comando abaixo:

  # mkdir nginx

Entre nessa pasta:

  # cd nginx

E então crie um arquivo chamado "Dockerfile" com o seguinte conteúdo:

  FROM debian
  MAINTAINER Rafael Gomes < gomex@riseup.net>
  RUN apt-get update
  RUN apt-get install -y nginx
  ENTRYPOINT ["/usr/sbin/nginx"]
  EXPOSE 80

Com esse Dockerfile, temos:

  • Uma imagem com base na imagem do Debian, ou seja, não precisamos nos preocupar com o sistema básico.
  • O autor dessa imagem sou eu :)
  • Primeiro eu atualizo a base do apt-get e então instalo o nginx.
  • Ao iniciar essa imagem ela executará o nginx automaticamente.
  • A porta exposta para possível interconexão entre containers é a porta 80.

Nesse link tem um ótimo documento explicando as boas práticas na criação de um Dockerfile.

Criando a imagem

Com o Dockerfile preenchido, execute o comando abaixo para criar sua imagem:

  # docker build -t=gomex/nginx .

No lugar de "gomex" coloque o seu usuário da nuvem pública do docker e no lugar de "nginx" o nome da sua imagem.

Ao terminar, pode efetuar o push para a nuvem pública e assim proporcionar a distribuição da sua imagem:

  # docker push gomex/nginx

Pronto! Agora já tem sua imagem prontinha, totalmente "enxuta" e disponível para que outra pessoa possa baixar e utilizar.

Por hoje é só pessoal, logo teremos mais artigos sobre Docker. Fiquem atentos.

Adicionar comentário

* Campos obrigatórios
5000
Powered by Commentics

Comentários

Nenhum comentário ainda. Seja o primeiro!


Veja a relação completa dos artigos de Rafael Gomes