Como personalizar imagens do Docker com Dockerfiles

Como personalizar imagens do Docker com Dockerfiles

Este artigo mostra como personalizar imagens do docker usando um arquivo de descrição chamado Dockerfile. Você verá como estender as imagens existentes, personalizando -as para suas necessidades e também como publicar a imagem resultante no Docker Hub.

Neste tutorial, você aprenderá:

  • Como personalizar uma imagem com um Dockerfile.
  • Como publicar a imagem resultante no Docker Hub.
HTTPS está ativado.

Requisitos de software e convenções usadas

Requisitos de software e convenções de linha de comando Linux
Categoria Requisitos, convenções ou versão de software usada
Sistema Ubuntu 18.04 Bionic Beaver
Programas Docker
Outro Acesso privilegiado ao seu sistema Linux como raiz ou através do sudo comando.
Convenções # - requer que os comandos Linux sejam executados com privilégios root diretamente como usuário root ou por uso de sudo comando
$ - Requer que os comandos do Linux sejam executados como um usuário não privilegiado regular

Introdução



Os artigos anteriores apresentaram conceitos do Docker e alguns comandos básicos do Docker. Neste artigo, você verá como personalizar e estender uma imagem do Docker existente, descrevendo as modificações em um Dockerfile e publicando a imagem em um registro.

O Dockerfile

No artigo anterior, você fez modificações em um contêiner em execução e cometeu as alterações no cache da imagem local. Embora seja um recurso útil para situações específicas, é recomendável que as personalizações sejam feitas de uma maneira mais documentada, para que a imagem possa ser implantada para outros hosts. A maneira recomendada é escrever um Dockerfile.

O Dockerfile é um arquivo YAML, que é um arquivo de texto com alguma sintaxe: as relações são expressas usando o indentação (espaços) e cada linha é composta por pares de chave e valor.

Vamos começar com um simples DockerFile que instala o pacote adereços (contém comandos htop e ps) para uma imagem do Debian.

Crie um novo diretório, entre nele e salve o arquivo abaixo com o nome Dockerfile (Capital D):

De Debian Run Apt-Get Update && \ apt-get -y install procps 
cópia de

Este Dockerfile afirma que a imagem base é chamada Debian (DE cláusula). Se não existir localmente, será baixado do Docker Hub. O CORRER O comando é executado apt-get duas vezes. Observe o uso de uma barra de barragem (\) para quebrar uma linha e o uso de -y para pular o prompt de confirmação de instalação apt-get.

O próximo passo é construir a imagem com Docker Build.



$ docker build -t mydebian . Enviando contexto de construção para Docker Daemon 2.048KB Etapa 1/2: De Debian ---> be2868Bababa Etapa 2/2: Execute APT-Get Update && apt-get -y install procps ---> em execução em 52a16b346afc… Removendo o contêiner intermediário 52A16B346AFC ---> F21A05A599996666666b346fc- F21A05A59966 marcou com sucesso Mydebian: mais recente 
cópia de

A bandeira -t Mydebian está nomeando a nova imagem. O ponto (.) diz a Docker para usar o diretório atual para procurar um Dockerfile. Observe que novas camadas são criadas e removidas à medida que as linhas do Dockerfile são interpretadas.

Deve haver uma nova imagem no cache local.

$ Docker Images Repositório Tag ID Imagem criada tamanho Mydebian F21A05A59966 8 minutos atrás 119 MB Debian mais recente BE2868BEBABA 7 semanas atrás 101MB 
cópia de

Um recipiente desta imagem pode ser criado.

$ Docker Run -it --Name mydebian_container mydebian root@ef9eb174874a:/# ps -ef uid pid ppid c stime tty time cmd raiz 1 0 0 02:43 pts/0 00:00 raiz Bash 9 1 02:43 PTS/0 00:00:00 PS -EF 
cópia de

A partir de agora, você pode criar contêineres executando o Debian com o Procps pacote e os comandos htop e ps já será instalado.

Agora vamos criar um Dockerfile para ter o Apache e o PHP instalados no tempo de construção da imagem, para alcançar os mesmos objetivos do artigo anterior, quando os comandos foram executados dentro do contêiner.

De Debian Run Apt-Get Update && \ apt-get -y install Procps libapache2-mod-php cmd Service Apache 2 
cópia de

Nós adicionamos libapache2-mod-php na linha 3 e um Cmd comando na linha 4 para iniciar o Apache. Quando o contêiner é iniciado, o Cmd O comando é executado. Só pode existir um Cmd comando por dockerfile. Quando o Cmd O comando é especificado, ele substitui o Cmd Comando da imagem que você está estendendo. Se o Cmd O comando é omitido, o da imagem base será executado (se houver). Como você deve ter adivinhado, o Dockerfile da imagem da base do Debian tem um Cmd Comando para executar o Bash. Você pode verificar isso no hub do documento.



$ docker run -d --name mydebian_container2 -d -p 8000:80 -v "$PWD":/var/www/html mydebian ad325685b738464c49bff40b65c6824160105ab5c285282efefbc4ddeec20ba2 roger@slash:~/LinuxConfig/04 Dockerfile$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS Nomes de portas ad325685b738 mydebian "/bin/sh -c 'serviço…" 11 segundos atrás de 5 segundos 0.0.0.0: 8000-> 80/tcp mydebian_container2 
cópia de

Desta vez, iniciamos o contêiner usando o -d mudar porque queremos que seja destacado do terminal.

Comandos importantes do Dockerfile

O Dockerfile tem outros comandos além DE, CORRER, e Cmd.

Comando Env é usado para definir variáveis ​​de ambiente na imagem, como proxy HTTP, por exemplo. Muitas imagens usam variáveis ​​de ambiente para passar parâmetros para o novo contêiner. Para exemplos, verifique as imagens de bancos de dados como MySQL e PostgreSQL no Docker Hub.

Comando CÓPIA DE Copia arquivos e diretórios do host para a imagem no horário de construção. O caminho da fonte (primeiro argumento) é relativo ao diretório atual.

Comando ADICIONAR é similar a CÓPIA DE, Com a diferença de que, se a fonte for um arquivo alcatrão compactado, ele será automaticamente descomprimido no diretório de destino dentro da imagem. Exceto por esse uso, Docker recomenda o uso do CÓPIA DE comando sempre que possível.

Comando EXPOR indica quais portas da imagem podem ser expostas pelo Docker. Durante a criação de contêineres, essas portas podem ser mapeadas para hospedar portas, se desejado.

Comando Workdir Define o diretório que o Docker usará quando os comandos forem executados dentro do contêiner com Docker Exec.

Criando uma imagem com https habilitado

Agora, estenderemos a imagem oficial do PHP Apache para ativar o SSL com um certificado gerado automaticamente para exemplar como usar os comandos mencionados. Em um novo diretório, crie o seguinte Dockerfile.



De Php: 7 -Apache Run OpenSSL Req -x509 -Nodes -Days 365 -NewKey RSA: 2048 -Keyout/etc/ssl/private/ssl -cert -snakeoil.chave --out/etc/ssl/certs/ssl-cert-snakeoil.PEM -SUBJ "/C = BR/ST = Rio Grande do Sul/L = Porto Alegre/O = Segurança/OU = Desenvolvimento/CN = Exemplo.com "run a2enmod rewrite run a2ensite default-ssl run a2enmod ssl exponha 443 cópia ./html/var/www/html workdir/var/www/html 
cópia de

Na linha 3, criamos um certificado. Linhas 5 - 7 Ativar mod_rewrite e SSL. A linha 9 expõe a porta 443 (a porta 80 já está exposta pela imagem a montante). A linha 11 adiciona o diretório de aplicativos ao contêiner. Finalmente, a linha 13 define o diretório de trabalho como o diretório de trabalho do Apache. Todos os comandos executados por Docker Exec usará este diretório como base por padrão.

Agora, crie um diretório nomeado html e um arquivo nomeado phpinfo.php com este conteúdo.

 
cópia de

Vamos agora construir e executar o contêiner.

Docker Build -t App_image . Docker Run -d - -rm -p 80:80 -p 443: 443 -NAME APP_CONTAINER APP_IMAGE 
cópia de

Agora, você pode acessar phpinfo.php script através de ambos, http e https.

http: // localhost/phpinfo.php https: // localhost/phpinfo.php 
cópia de HTTPS está ativado.

No HTTPS, o navegador reclamará da segurança do certificado, pois isso é auto-si mesmo, mas o aviso pode ser ignorado.

Publicação de imagens para o hub do documento



As imagens criadas existem apenas localmente, no cache local de Docker. Você pode compartilhá -los com outros anfitriões do Docker, ou com colegas de equipe, ou até torná -los públicos ao mundo. De qualquer forma, você deseja publicar suas imagens em um registro do Docker. Eles podem ser publicados em um registro baseado em nuvem, como o Docker Hub, que, a propósito, é o padrão se você não especificar explicitamente o registro. Primeiro, crie um ID do docker gratuito e depois login:

$ Docker Login Login com seu Docker ID para empurrar e puxar imagens do Docker Hub. Se você não tiver um Docker ID, vá para https: // hub.Docker.com criar um. Nome de usuário: Senha do Infroger: Login foi bem -sucedido 
cópia de

Em seguida, marque a imagem com o nome do repositório (infroger), nome da imagem e tag (versão da imagem).

$ Docker Tag App_image Infroger/App_image: 1 $ Docker Images Repository Tag Id Criado Tamanho Criado Infroger/App_image 1 C093151FC68F 14 horas atrás 381MB APP3_IMAGE mais recente C093151FC68F 14 horas atrás 381MB 
cópia de

Em seguida, empurre a imagem para o repositório.

$ Docker Push Infroger/App_Image: 1 O empurrão refere -se ao repositório [Docker.io/infroger/app_image] 27f7f2b01c49: Pushed 81b08cd5fe07: Pushed d1c23d198f84: Pushed e66392ad9b85: Pushed a71f63e3a00f: Pushed 9c58778f21dd: Pushed 973719bed9b7: Pushed 8f5090ef2ac0: Pushed fbdafdbe3319: Pushed a5c4801ecf39: Pushed e9ba112d38b9: Pushed 25ba5230dadf: Pushed f2907ce42b47: Pushed e31bf34cfab9: Pushed 9066d03e98e0: Pushed 96db4ce698ad: Pushed abae6a338e5c: Pushed 4572a80a7a5e: Pushed ef68f6734aa4: Pushed 1: digest: sha256:2e7e53fcdf800ad0c4837cd70014170cc869d36de5c301f2e2ced318803bf963 size: 4279 
cópia de

Agora vá para o Docker Hub e verifique se a imagem está lá:



https: // hub.Docker.com/r/infroger/app_image 

No Docker Hub com registro gratuito, você pode ter um repositório privado, com repositórios públicos ilimitados. Caso contrário, convém executar seu próprio registro do Docker, que pode ser feito com um comando:

Docker Run -d -p 5000: 5000 - -RESTART = sempre -Nome Registry Registry: 2 

A vantagem de ter um registro privado é privacidade. Mas você tem o ônus de gerenciar segurança, alta disponibilidade, requisitos de armazenamento, controle de acesso etc.

Conclusão

Neste artigo, abordamos como estender as imagens existentes e personalizá -las para suas necessidades usando um DockerFile. Também vimos como publicar as imagens em um registro do Docker. Você pode fazer muito até agora, mas estamos apenas arranhando o mundo do Docker. No próximo artigo, veremos uma forma muito simples de orquestração local de contêineres com o Docker Compose.

Mais nesta série de artigos do docker

  • Uma introdução prática aos recipientes do Docker
  • Como interagir com os contêineres do Docker

Tutoriais do Linux relacionados:

  • Coisas para instalar no Ubuntu 20.04
  • Coisas para fazer depois de instalar o Ubuntu 20.04 fossa focal linux
  • Uma introdução à automação, ferramentas e técnicas do Linux
  • Coisas para fazer depois de instalar o Ubuntu 22.04 Jellyfish…
  • Arquivos de configuração do Linux: os 30 primeiros mais importantes
  • Coisas para instalar no Ubuntu 22.04
  • Mint 20: Melhor que o Ubuntu e o Microsoft Windows?
  • Como montar a imagem ISO no Linux
  • Como fazer bota dupla kali linux e windows 10
  • Ubuntu 20.04 Guia