‫Vamos mergulhar no Dockerfile, que é realmente uma receita para criar sua imagem.
‫Até agora, todas as imagens do Docker que usamos foram criadas a partir do Dockerfiles, onde você pode ir
‫para o Docker Hub.
‫Se você clonou meu repositório dos recursos listados na primeira seção, você deve ver um diretório do arquivo de amostra
‫docker 1, e lá, devemos ter apenas um arquivo. Um Dockerfile.
‫Nós iremos linha a linha e falamos sobre essas diferentes estrofes. Um Dockerfile parece ser um script de
‫shell, mas não é.
‫Não é um arquivo em lotes, não é um script de shell. padrão é Dockerfile com um D. principal.
‫É um idioma totalmente diferente do arquivo exclusivo do Docker e o nome
‫Mas, a partir da linha de comando, sempre que você precisa lidar com um Dockerfile usando
‫o comando docker, você pode realmente usar o dash f. O que é realmente comum entre muitas ferramentas com o Docker,
‫você pode usar o dash f para especificar um arquivo diferente do padrão.
‫Então, primeiro é o comando from. O comando from está em cada Dockerfile. É necessário estar lá.
‫Normalmente, é uma distribuição mínima.
‫Neste caso, é Debian.
‫Mas muitas vezes hoje em dia será Alpine.
‫E realmente, a razão pela qual você usaria estes é salvar seu tempo e sua dor. Como essas distribuições mínimas são realmente muito menores
‫do que os CDs que você usaria para instalar uma máquina virtual deles.
‫Por exemplo, o Ubuntu nem sequer possui cURL, e, obviamente, se você instalou uma instalação
‫completa do Ubuntu em uma VM, teria cURL e muitos outros comandos já instalados.
‫Como todas essas distribuições são imagens oficiais, isso significa que elas estarão sempre atualizadas
‫com os últimos patches de segurança e você pode depender e confiar neles.
‫E um dos principais benefícios para usá-los em contêineres é usar seus sistemas de distribuição de pacotes para instalar
‫o software que você precisa em seu pacote.
‫Neste caso, estamos realmente usando o lançamento de Jessie, que é o que vem depois do cólon.
‫E, como você se lembra da conversa do Docker Hub, há muitas opções diferentes que você pode
‫especificar aqui para o repositório Debian.
‫Em seguida, temos a estância ENV e ENV é para variáveis ​​de ambiente.
‫É uma maneira de definir variáveis ​​de ambiente, que são realmente muito importantes em contêineres, porque
‫elas são a principal maneira de configurar chaves e valores para a construção de contêineres e para a execução de contêineres.
‫Nesse caso, está realmente configurando a versão do Nginx que gostaria de instalar e esta variável
‫de ambiente será configurada para que qualquer linha subsequente possa usá-la.
‫Agora, como lembrete de palestras anteriores, cada uma dessas estrofes é uma camada real na nossa
‫imagem Docker.
‫Então, a ordem deles realmente importa, porque funciona de cima para baixo.
‫Como você verá por este comando de execução relativamente longa aqui para o próximo. Você verá que parece um
‫longo comando.
‫O que está fazendo é realmente apenas executar comandos de shell dentro desse contêiner, pois está construindo
‫isso.
‫repositório de pacotes ou precisar fazer algum descompactado ou algumas edições de arquivos dentro do próprio contêiner.
‫Você geralmente verá comandos de execução quando precisar instalar o software com um
‫Os comandos de execução também podem executar scripts de shell que você copiou anteriormente no arquivo ou quaisquer
‫comandos que você possa acessar
‫dentro do contêiner nesse momento no arquivo.
‫Uma vez que estamos vindo do Debian, esse comando de execução tem acesso a todos os comandos e binários
‫que teriam sido instalados com essa versão.
‫E nisto para o Nginx, esta lista de comandos é mais ou menos adicionando uma chave ao repositório
‫onde você pode obter o pacote para instalar o Nginx mais recente do repositório Nginx oficial.
‫Existem algumas coisas aqui que são realmente fundamentais para fazer bons Dockerfiles e, na verdade, falaremos mais
‫sobre isso em uma seção posterior, onde falamos sobre as melhores práticas.
‫Mas duas coisas a observar.
‫A razão pela qual estamos adicionando todos esses comandos com o e comercial duplo aqui, para que eles
‫sejam acorrentados um após o outro, é porque, se você se lembra, cada estroma é sua própria camada.
‫O que isso faz é garantir que todos esses comandos se encaixem em uma única camada.
‫Isso nos poupa um pouco de tempo.
‫Isso nos poupa espaço. E é tão comum que você provavelmente irá vê-lo em cada Dockerfile no Docker Hub.
‫Ok, na linha 27, temos outro comando de corrida.
‫Este é tudo sobre apontar nossos arquivos de log para o stdout
‫e para o stderr.
‫Veremos mais adiante, a maneira correta de fazer o login dentro de um contêiner é não fazer logon em um arquivo de log. E não há nenhum syslogd ou
‫qualquer outro serviço syslog dentro
‫de um contêiner. Docker realmente lida com todos os nossos logs para nós. Tudo o que temos a fazer
‫dentro do recipiente é ter certeza de que tudo o que queremos ser capturados nos logs é spit para stdout
‫e stderr e docker irão lidar com o resto.
‫Na verdade, há drivers de log que podemos usar no próprio Docker Engine para controlar todos os logs
‫para todos os contêineres em nosso host.
‫E então é mesmo o que você quer fazer com eles.
‫Ele adiciona mais complexidade ao seu aplicativo se o seu aplicativo estiver realmente fazendo o próprio log.
‫E então, se você tiver que lidar com arquivos em cada um dos contêineres, agora você tem um
‫problema de como você consegue esses arquivos e pode ser pesquisado e acessível. Aqui, estamos tomando os logs Nginx padrão e
‫estamos realmente ligando-os ao stdout.
‫Então, o Docker pode capturá-los.
‫Também temos um comando de exposição.
‫Por padrão, nenhuma porta TCP ou UDP está
‫aberta dentro de um contêiner. Não expõe nada do contêiner a uma rede virtual, a menos que
‫a incluamos aqui.
‫E, claro, porque isso é uma Web e um servidor proxy, ele vai expor 80 e 443.
‫Agora, este comando de exposição não significa que essas portas serão abertas automaticamente em nosso host.
‫Isso é o que o comando Pash P é sempre que usamos o docker executar.
‫Por fim, temos o CMD aqui. ou toda vez que você reiniciar um recipiente parado.
‫O CMD é um parâmetro obrigatório que é o comando final que será executado sempre que você iniciar um novo contêiner da imagem,
‫Há uma documentação realmente excelente em todas essas estrofes, além de muito mais, que vamos entrar mais tarde, no site de
‫documentação do Docker em documentos. docker. com, que
‫você pode encontrar nos recursos desta palestra.
‫Ok, então estes são o básico, certo? Essas cinco estrofes diferentes são bastante normais em cada Dockerfile.
‫Alguns deles são obrigatórios.
‫Alguns deles, como a corrida, o ENV e a exposição, são opcionais, mas são bastante típicos para a maioria dos recipientes
‫para os quais você vai criar imagens.