Android

Como criar imagens do docker com o dockerfile

Demo #31 - Aula sobre como criar a sua própria Imagem no Docker !

Demo #31 - Aula sobre como criar a sua própria Imagem no Docker !

Índice:

Anonim

Uma imagem do Docker é o modelo dos contêineres do Docker que contém o aplicativo e tudo o que você precisa para executar o aplicativo. Um contêiner é uma instância de tempo de execução de uma imagem.

Neste tutorial, explicaremos o que é o Dockerfile, como criar um e como criar uma imagem do Docker com o Dockerfile.

O que é o Dockerfile

Um Dockerfile é um arquivo de texto que contém todos os comandos que um usuário pode executar na linha de comando para criar uma imagem. Inclui todas as instruções necessárias pelo Docker para criar a imagem.

As imagens do Docker são compostas por uma série de camadas do sistema de arquivos que representam instruções no Dockerfile da imagem que compõe um aplicativo de software executável.

O arquivo do Docker tem o seguinte formato:

# Comment INSTRUCTION arguments

INSTRUCTION não INSTRUCTION maiúsculas de minúsculas, mas a convenção é usar MAIÚSCULAS para seus nomes.

Abaixo está a lista com uma breve descrição de algumas das instruções mais usadas do Dockerfile:

  • ARG - Esta instrução permite definir variáveis ​​que podem ser passadas no momento da construção. Você também pode definir um valor padrão. FROM - A imagem base para criar uma nova imagem. Esta instrução deve ser a primeira instrução sem comentários no Dockerfile. A única exceção desta regra é quando você deseja usar uma variável no argumento FROM . Nesse caso, FROM pode ser precedido por uma ou mais instruções ARG . LABEL - Usado para adicionar metadados a uma imagem, como descrição, versão, autor..etc. Você pode especificar mais de um LABEL e cada instrução LABEL é um par de valores-chave. EXECUTAR - Os comandos especificados nesta instrução serão executados durante o processo de construção. Cada instrução RUN cria uma nova camada em cima da imagem atual. ADICIONAR - Usado para copiar arquivos e diretórios da fonte especificada para o destino especificado na imagem do Docker. A fonte pode ser arquivos ou diretórios locais ou uma URL. Se a origem for um arquivo tar local, será descompactado automaticamente na imagem do Docker. COPIAR - Semelhante ao ADD mas a fonte pode ser apenas um arquivo ou diretório local. ENV - Esta instrução permite definir uma variável de ambiente. CMD - Usado para especificar um comando que será executado quando você executar um contêiner. Você pode usar apenas uma instrução CMD no seu Dockerfile. ENTRYPOINT - Semelhante ao CMD , esta instrução define qual comando será executado ao executar um contêiner. WORKDIR - Esta diretiva define o diretório de trabalho atual para as instruções RUN , CMD , ENTRYPOINT , COPY e ADD . USUÁRIO - Defina o nome de usuário ou o UID a ser usado ao executar qualquer instrução RUN , CMD , ENTRYPOINT , COPY e ADD seguir. VOLUME - Permite montar um diretório de máquinas host no contêiner. EXPOSE - Usado para especificar a porta na qual o contêiner escuta em tempo de execução.

Para impedir que arquivos e diretórios sejam adicionados à imagem, crie um arquivo .dockerignore no diretório de contexto. A sintaxe do .dockerignore é semelhante à do arquivo .gitignore do Git.

Para obter uma referência completa e uma explicação detalhada das instruções do Dockerfile, consulte a página de referência oficial do Dockerfile.

Criar um arquivo Docker

O cenário mais comum ao criar imagens do Docker é extrair uma imagem existente de um registro (geralmente no Docker Hub) e especificar as alterações que você deseja fazer na imagem base. A imagem base mais usada ao criar imagens do Docker é Alpine, pois é pequena e otimizada para ser executada na RAM.

O Docker Hub é um serviço de registro baseado em nuvem que, entre outras funcionalidades, é usado para manter as imagens do Docker em um repositório público ou privado.

Neste exemplo, criaremos uma imagem do Docker para o servidor Redis. Usaremos o ubuntu 18.04 mais recente como imagem de base.

Primeiro, crie um diretório que conterá o Dockerfile e todos os arquivos necessários:

mkdir ~/redis_docker

Navegue para o diretório e crie o seguinte Dockerfile:

cd ~/redis_docker nano Dockerfile Dockerfile

FROM ubuntu:18.04 RUN apt-get update && \ apt-get install -y redis-server && \ apt-get clean EXPOSE 6379 CMD

Vamos explicar o significado de cada uma das linhas no Dockerfile:

  • Na linha 1 , estamos definindo a imagem base. A instrução RUN que inicia na linha 3 atualizará o índice apt, instalará o pacote "redis-server" e limpará o cache do apt. Os comandos usados ​​nas instruções são os mesmos que você usaria para instalar o redis no servidor EXPOSE instrução EXPOSE define a porta na qual o servidor redis escuta.Na última linha, estamos usando a instrução CMD para definir o comando padrão isso será executado quando o contêiner for executado.

Salve o arquivo e feche o editor.

Construindo a imagem

O próximo passo é construir a imagem. Para fazer isso, execute o seguinte comando no diretório em que o Dockerfile está localizado:

docker build -t linuxize/redis.

A opção -t especifica o nome da imagem e, opcionalmente, um nome de usuário e marca no formato 'nome de usuário / nome da imagem: marca'.

A saída do processo de construção será mais ou menos assim:

Sending build context to Docker daemon 3.584kB Step 1/4: FROM ubuntu:18.04 ---> 7698f282e524 Step 2/4: RUN apt-get update && apt-get install -y gosu redis-server && apt-get clean ---> Running in e80d4dd69263… Removing intermediate container e80d4dd69263 ---> e19fb7653fca Step 3/4: EXPOSE 6379 ---> Running in 8b2a45f457cc Removing intermediate container 8b2a45f457cc ---> 13b92565c201 Step 4/4: CMD ---> Running in a67ec50c7048 Removing intermediate container a67ec50c7048 ---> d8acc14d9b6b Successfully built d8acc14d9b6b Successfully tagged linuxize/redis:latest

Quando o processo de compilação for concluído, a nova imagem será listada na lista de imagens:

docker image ls

REPOSITORY TAG IMAGE ID CREATED SIZE linuxize/redis latest d8acc14d9b6b 4 minutes ago 100MB ubuntu 18.04 7698f282e524 5 days ago 69.9MB

Executando um contêiner

Agora que a imagem foi criada, você executa um contêiner executando:

docker run -d -p 6379:6379 --name redis linuxize/redis

As opções -d dizem ao Docker para executar o contêiner no modo desanexado, a opção -p 6379:6379 publicará a porta 6379 na máquina host e a opção --name redis especifica o nome do contêiner. O último argumento linuxize/redis é o nome da imagem, usada para executar o contêiner.

Quando o contêiner iniciar, use o seguinte comando para listar todos os contêineres em execução:

docker container ls

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6b7d424cd915 linuxize/redis:v0.0.1 "redis-server '--pro…" 5 minutes ago Up 5 minutes 0.0.0.0:6379->6379/tcp redis

Para verificar se tudo funciona como deveria, use o redis-cli para conectar-se ao contêiner do docker:

redis-cli ping

O servidor redis deve responder com PONG .

Conclusão

Este tutorial abordou apenas o básico do uso de Dockerfiles para criar imagens. Para saber mais sobre como escrever Dockerfiles e as práticas recomendadas, consulte Práticas recomendadas para escrever Dockerfiles.

estivador