m
este vídeo, vou te ensinar todos os principais conceitos do docker,
ncluindo obter sua primeira experiência prática com ele.
ntão, se você precisar usar o docker no trabalho,
u se você precisar aprender docker para aprimorar suas habilidades de engenharia e precisar obter
omecei rápido e entendi todos os principais conceitos e
prenda noções básicas de como trabalhar com o Docker,
ste curso intensivo é exatamente ideal para você. Primeiro, começaremos por
o que fazer
por isso que foi criado basicamente,
uais problemas ele resolve em engenharia e como
juda no processo de desenvolvimento e implantação de software.
ntão você entenderá exatamente por que fazer
um grande negócio e é por isso que se tornou tão popular e amplamente utilizado em projetos de TI
como parte de uma solução de virtualização, doer
endo uma melhoria em relação às máquinas virtuais ou a próxima etapa de evolução,
ambém explicarei a diferença entre máquina virtual e máquina mais escura,
quais são as vantagens do
azedor nesta comparação.
epois de entendermos por que queremos usar do
m primeiro lugar, vamos instalar
aça e aprenda como realmente trabalhar com ele. Aprenderemos os conceitos de
magens de fazedores, contêineres, mais escuras
egistro, registros públicos e privados,
executaremos contêineres localmente com base em algumas das imagens disponíveis no Docker
egistro público chamado Docker Hub.
ambém aprenderemos o conceito de criar suas próprias imagens
aprendendo sobre o esquema de imagem do docker chamado Docker File.
, claro,
eremos tudo isso em ação e aprenderemos todos os comandos do docker para extrair imagens,
xecutando contêineres, criando sua própria imagem docker, etc.
ambém aprenderemos sobre o controle de versão de imagens com texto de imagem e, finalmente,
epois de aprender a trabalhar com o Docker,
ambém explicarei com animações gráficas como fazer
e encaixa no panorama geral do processo de desenvolvimento e implantação de software.
ntão, no final deste vídeo,
ocê se sentirá muito mais confiante sobre seu conhecimento e compreensão em
oador
pode facilmente desenvolver esse conhecimento básico
ara se tornar um usuário avançado do docker, se quiser.
sob a descrição do vídeo,
ou fornecer alguns recursos para aprender ainda mais sobre o Docker
torne-se mais avançado nele. Mas antes de começarmos,
arece que muitos de vocês estão assistindo ao
ídeos em nosso canal ainda não estão inscritos,
ntão, se você está obtendo algum valor do
utoriais gratuitos que eu coloco regularmente neste canal,
ão se esqueça de se inscrever em nenhum vídeo ou tutorial futuro.
u também ficaria feliz em me conectar com você em minhas outras contas de mídia social,
nde eu posto conteúdo de bastidores, atualizações semanais e assim por diante.
ntão, espero me conectar a você lá também.
em, estou super empolgada em ensinar tudo isso a vocês, então vamos começar.
amos começar com a pergunta mais importante. O que é fazer?
or que foi criado? E qual problema isso resolve?
m palavras simples, o Docker é um software de virtualização
sso torna o desenvolvimento e a implantação de aplicativos muito fácil,
muito mais fácil em comparação com a forma como era feito antes da introdução do Docker.
o Docker faz isso empacotando um aplicativo
m algo chamado contêiner que tem
udo o que o aplicativo precisa para ser executado,
omo o próprio código do aplicativo, suas bibliotecas e dependências,
mas também o tempo de execução e a configuração do ambiente.
ortanto, o aplicativo e seu ambiente de execução são
mbos empacotados em um único pacote docker,
ue você pode compartilhar e distribuir facilmente.
gora, por que isso é tão importante,
como os aplicativos foram realmente desenvolvidos
implantado antes da introdução do Docker.
amos ver isso para entender os benefícios do Docker com mais clareza.
ntão, como desenvolvemos aplicativos antes dos contêineres?
ormalmente, quando você tem uma equipe de desenvolvedores trabalhando em algum aplicativo,
les teriam que instalar todos os serviços.
sse aplicativo
epende de nossas necessidades, como serviços de banco de dados,
t cetera diretamente em seu sistema operacional.
erto.
or exemplo, se você estiver desenvolvendo um aplicativo JavaScript e precisar de uma postagem
anco de dados SQL,
alvez você precise
por trocar mosquitos por mensagens. Por exemplo, se você tivesse um aplicativo de microsserviço.
gora você precisa de todos esses serviços localmente em seu ambiente de desenvolvimento
ara que você possa realmente desenvolver e testar o aplicativo corretamente,
cada desenvolvedor da equipe teria então que instalar todos esses serviços,
onfigurá-los e executá-los em seu ambiente de desenvolvimento local
dependendo do sistema operacional que eles estão usando,
processo de instalação será diferente
orque instalando uma postagem
anco de dados QL em
u
sistema operacional é diferente de instalá-lo em uma máquina Windows, por exemplo,
utra coisa com a instalação de serviços diretamente no
m sistema operacional seguindo algum guia de instalação
que geralmente têm várias etapas de instalação,
, em seguida, configuração do serviço.
ntão, com vários comandos que você precisa executar para instalar,
onfigurar e configurar o serviço,
s chances de algo dar errado e ocorrer um erro são, na verdade, muito altas.
essa abordagem,
u esse processo de configuração de um ambiente de desenvolvimento para um desenvolvedor,
ode realmente ser muito entediante, dependendo da complexidade do seu aplicativo.
or exemplo, se você tiver 10 serviços que seu aplicativo está usando,
ntão você teria que fazer essa instalação 10 vezes para cada serviço.
novamente,
erá diferente dentro da equipe com base em
ual sistema operacional cada desenvolvedor está usando.
gora vamos ver como os contêineres resolvem alguns desses problemas
om contêineres.
ocê realmente não precisa instalar nenhum
os serviços diretamente em seu sistema operacional,
orque com o Docker você tem esse serviço empacotado em um ambiente isolado.
ntão você tem
ôsteres QL com uma versão específica empacotada com toda a sua configuração
entro de um contêiner.
ntão, como desenvolvedor, você não precisa procurar alguns binários
ara baixar e instalar em sua máquina.
as, em vez disso, basta ir em frente e iniciar esse serviço
omo um contêiner docker usando um único comando docker,
ue busca o pacote do contêiner da Internet
inicia no seu computador
o comando docker será o mesmo
ndependentemente do sistema operacional em que você está,
também será o mesmo, independentemente do serviço que você está instalando.
ntão, se você tiver 10 serviços dos quais seu aplicativo JavaScript depende,
ocê só precisaria executar 10 comandos docker para cada contêiner, e pronto.
ntão, como você vê as padronizações do docker,
processo de execução de qualquer serviço em seu desenvolvimento
mbiente e torna todo o processo muito mais fácil.
ntão, você pode basicamente se concentrar e trabalhar mais no desenvolvimento
e tentar instalar e configurar serviços em sua máquina.
isso obviamente faz com que você configure seu ambiente de desenvolvimento local
uito mais rápido e fácil do que
opção sem contêineres.
lém disso, com o Docker,
ocê pode até ter versões diferentes do mesmo aplicativo
odando em seu ambiente local sem nenhum conflito,
que é muito difícil de fazer
e você estiver instalando o mesmo aplicativo com
ersões diferentes diretamente no seu sistema operacional,
, na verdade, veremos tudo isso em ação na parte de demonstração deste vídeo.
gora vamos ver como os contêineres podem melhorar o processo de implantação de aplicativos
ntes dos contêineres. Um processo de implantação tradicional seria assim
equipe de desenvolvimento produziria um artefato de aplicativo ou um pacote
unto com um conjunto de instruções de como realmente
nstale e configure esse pacote de aplicativos no servidor.
ntão você teria algo como um arquivo jar para o trabalho
plicativo ou algo semelhante, dependendo da linguagem de programação usada.
, além disso, é claro,
ocê teria algum tipo de serviço de banco de dados
u alguns outros serviços que seu aplicativo precisava,
ambém com um conjunto de instruções de como configurar
configure-o no servidor para que o aplicativo possa se conectar a ele e usá-lo.
ntão, a equipe de desenvolvimento forneceria esse aplicativo
rtefato ou pacote para a equipe de operações,
a equipe de operações
uidaria da instalação
configurando o aplicativo
todos os seus serviços de inquilino, como banco de dados, por exemplo.
gora, o problema com esse tipo de abordagem é que, antes de tudo,
ocê precisa configurar tudo e instalar tudo
ovamente diretamente no sistema operacional, que mencionei
o contexto de desenvolvimento que, na verdade, é muito propenso a erros,
você pode ter vários problemas diferentes durante o processo de configuração.
ocê também pode ter conflitos com versões de dependência em que
ois serviços dependem da mesma biblioteca,
or exemplo, mas com versões diferentes.
quando isso acontece,
sso tornará o processo de configuração muito mais difícil e complexo.
ntão, basicamente, muitas coisas podem dar errado durante as operações
equipe está instalando e configurando aplicativos e serviços em um servidor.
utro problema que pode surgir desse tipo de processo é
uando há uma falha de comunicação entre
equipe de desenvolvimento e a equipe de operações.
orque como tudo está em um guia textual,
omo uma lista de instruções de como configurar e executar o aplicativo,
u talvez algum tipo de lista de verificação,
ode haver casos em que os desenvolvedores esqueçam
ara mencionar algumas etapas importantes sobre a configuração.
quando essa parte falha,
equipe de operações precisa voltar aos desenvolvedores e pedir mais detalhes e sugestões.
isso pode levar a alguma comunicação de ida e volta
té que o aplicativo seja implantado com sucesso no servidor.
ntão, basicamente, você tem essa sobrecarga de comunicação adicional onde
s desenvolvedores precisam se comunicar em algum tipo de texto
ráfico em qualquer formato,
omo o aplicativo deve ser executado,
, como mencionei, isso pode levar a problemas e falhas de comunicação
om contêineres. Esse processo é, na verdade, simplificado porque
gora os desenvolvedores criam um pacote de aplicativos
sso não inclui apenas o código em si,
mas também todas as dependências e a configuração do aplicativo.
ntão, em vez de ter que escrever isso em algum formato e documento textual,
les basicamente apenas empacotam tudo isso dentro do artefato do aplicativo.
como já está encapsulado em um ambiente,
s pessoas de operações não precisam configurar nenhuma
essas coisas diretamente no servidor.
ntão, isso torna todo o processo muito mais fácil.
há menos espaço para problemas que mencionei anteriormente.
ntão, a única coisa agora que a equipe de operações precisa fazer neste caso
executar um comando docker que obtém o pacote de contêiner criado pelos desenvolvedores
o executa no servidor.
a mesma forma que a equipe de operações executará um serviço
ue o aplicativo também precisa de contêineres docker,
isso torna o processo de implantação muito mais fácil no lado da operação.
gora, é claro,
equipe de operações terá que instalar e configurar o docker run
ez no servidor antes que eles possam executar contêineres.
as isso é apenas um esforço de tempo para um serviço ou uma tecnologia.
depois de instalar o docker runtime,
ocê pode simplesmente executar contêineres docker nesse servidor
gora. No começo, mencionei que o docker é uma ferramenta de virtualização
ssim como uma máquina virtual, e as máquinas virtuais existem há muito tempo.
ntão, por que o escuro se tornou tão amplamente adotado?
uais são as vantagens que ele tem sobre as máquinas virtuais,
qual é a diferença entre os dois?
ara isso, precisamos ver um pouco de como fazer
rabalha em um nível técnico.
u também disse isso com o Docker,
ocê não precisa instalar serviços diretamente no sistema operacional.
as
esse caso, como o Docker executa seus contêineres em um sistema operacional?
gora, para entender tudo isso,
amos primeiro ver como um sistema operacional é composto.
s sistemas operacionais têm duas camadas principais.
ocê tem o kernel do sistema operacional
os aplicativos do sistema operacional. Camada
o kernel é a parte que se comunica com os componentes de hardware, como CPU,
rmazenamento de memória, etc.
ntão, quando você tem uma máquina física
om todos esses recursos e você instala o sistema operacional
aquela máquina física,
kernel do sistema operacional realmente será
eja quem está falando com os componentes de hardware
ara alocar recursos como armazenamento de memória da CPU, etc.,
ara os aplicativos, depois executados nesse sistema operacional.
esses aplicativos fazem parte da camada de aplicativos,
eles são executados em cima da camada do kernel.
ntão, o kernel é uma espécie de intermediário entre os aplicativos que você vê
uando você interage com seu computador
o hardware subjacente do seu computador.
agora, como o Docker e a Máquina Virtual são ferramentas de virtualização,
questão é
ue parte do sistema operacional eles realmente virtualizam?
é aí que a principal diferença
ntre docker e máquinas virtuais, na verdade, como
ara que o docker virtualize a camada de aplicativos.
sso significa que quando você executa um contêiner docker,
na verdade, contém a camada de aplicativos
o sistema operacional e alguns outros aplicativos
nstalado na parte superior dessa camada de aplicativo.
ode ser um tempo de execução de java ou python ou qualquer outra coisa,
usa o kernel do host porque não tem seu próprio kernel.
máquina virtual, por outro lado,
em a camada de aplicativos e seu próprio kernel.
ntão, ele virtualiza o sistema operacional completo,
o que significa que quando você baixa uma imagem de máquina virtual em seu host.
le não usa o kernel hosts. Na verdade, ele se inicializa sozinho.
ntão, o que realmente significa essa diferença entre máquina virtual e mais escura?
m primeiro lugar, o tamanho dos pacotes ou imagens mais escuros é muito menor
orque eles só precisam implementar uma camada
o sistema operacional
ntão imagens mais escuras geralmente têm alguns megabytes.
magens grandes de máquinas virtuais, por outro lado, podem ter alguns gigabytes.
sso significa que, ao trabalhar com o Docker, você realmente economiza muito espaço em disco.
ocê pode executar e iniciar contêineres docker muito mais rápido do que máquinas virtuais,
orque a máquina virtual precisa criar um kernel toda vez que é iniciada,
nquanto o contêiner docker apenas é reutilizado
kernel do host e ele apenas inicia a camada de aplicativo em cima dele.
ortanto, embora a máquina virtual precise de alguns minutos para inicializar,
ontêineres docker geralmente iniciam em um
lguns milissegundos.
terceira diferença é a compatibilidade,
ara que você possa executar a imagem virtual de qualquer sistema operacional em qualquer outro
ost do sistema operacional.
ntão, em uma máquina Windows, você pode executar uma máquina virtual Linux, por exemplo.
as você não pode fazer isso com o Docker, pelo menos não diretamente, então qual é o problema aqui?
igamos que você tenha um sistema operacional Windows com Windows Kernel
sua camada de aplicativo, e você deseja executar um Linux
om base na imagem do docker diretamente nesse host Windows. O problema aqui é que o Linux
imagem Docker baseada em 00:15:40.299 não pode usar o kernel do Windows. Seria necessário um kernel Linux para ser executado
orque você pode executar uma camada de aplicativo Linux em um Windows Kern.
ntão, isso é um tipo de problema com o Docker.
o entanto,
uando você está desenvolvendo no Windows ou Me
S,
ocê deseja executar vários serviços porque a maioria dos contêineres usa os serviços populares
ão, na verdade, baseados em Linux.
ambém é interessante saber que o Docker foi originalmente escrito e construído para Linux
as depois
ealmente fez uma atualização e desenvolveu o que é
hamado de desktop Docker para Windows e Mac,
que tornou isso possível
ara executar contêineres baseados em Linux também em computadores Windows e Mac.
ntão, a maneira como funciona é que uma área de trabalho mais escura usa uma camada de hipervisor
om um Linux leve
istribuição em cima dela
ara fornecer o kernel Linux necessário
, desta forma, faça com que o Linux seja executado
ontêineres baseados são possíveis nos sistemas operacionais Windows e Mac.
, a propósito,
e você quiser entender mais sobre virtualização e como as máquinas virtuais funcionam.
o que é um hipervisor, por exemplo.
ocê pode assistir ao meu outro vídeo, onde eu explico tudo isso em detalhes.
ntão, isso significa para o desenvolvimento local.
omo engenheiro, você instalaria uma área de trabalho mais escura em seu Windows ou Mac
omputador com sistema operacional
ara executar o Linux
magens baseadas, que, como mencionei a maioria dos bancos de dados de serviços populares,
tc. são principalmente baseados em Linux.
ntão você precisaria disso,
isso nos leva ao
nstalação de
azedor.
ara fazer algumas demonstrações e aprender docker na prática,
ocê primeiro precisaria instalá-lo.
ntão, para instalar o Docker,
asta acessar a página oficial para obter o guia de instalação
siga as etapas.
omo o Docker é atualizado o tempo todo, a instalação muda.
ntão, em vez de eu apenas dar alguns comentários que
ode funcionar agora, mas será atualizado no futuro,
ocê deve sempre consultar as últimas
ocumentação para o guia de instalação de qualquer ferramenta.
ntão, se procurarmos o Docker Desktop
nstalação
clique em um desses links, como instalar no Windows, então isso é
desktop Docker,
ferramenta que mencionei
esolveu esse problema de executar imagens baseadas em Linux em um sistema operacional diferente,
mas na verdade inclui muitas outras coisas quando você o instala.
ntão, o que você está exatamente instalando com o Docker Desktop?
você vê exatamente o que está incluído lá.
ntão, basicamente, obtenha o próprio serviço Docker. É chamado Docker
otor.
ssa é a parte principal do docker que torna essa virtualização possível.
as quando temos um serviço, precisamos nos comunicar com ele, certo,
ntão, precisamos de um cliente
ue podem falar com esse serviço.
ntão, o Docker Desktop realmente vem com um cliente de interface de linha de comando,
o que significa que podemos executar comandos mais escuros em uma linha de comando
ara iniciar contêineres para criar contêineres, começar a pará-los, removê-los etc.,
faça todos os tipos de coisas. E também vem com um cliente de interface gráfica de usuário.
ntão, se você não se sentir confortável trabalhando com a linha de comando,
ocê pode realmente usar a interface gráfica do usuário, onde você pode fazer todas essas coisas.
as em uma interface de usuário agradável e fácil de usar,
ntão, você obtém todas essas coisas ao instalar o Docker desktop,
asicamente tudo o que você precisa para começar a usar o Docker
, claro, dependendo do sistema operacional em que você está,
ocê vai escolher aquele Mac Windows ou Linux.
ntão, vamos clicar em um desses e basicamente seguir as instruções.
ocê tem alguns requisitos de sistema. Você tem que verificar
oisas como a versão do seu Mac OS,
uantos recursos você vai precisar.
você também tem as opções para Mac com Intel ou Mac
om Apple Silicon para que você possa alternar entre eles e, basicamente,
asta escolher o guia que corresponde às especificações do seu computador.
uma vez que você tenha isso, verifique os requisitos do sistema,
á em frente e clique em um desses.
o meu caso, eu tenho Mac com Intel
hip, então eu clicaria neste,
esse é, na verdade, o instalador de desktop do Docker.
ntão, se eu clicar, ele vai baixar este DMG
magem. E depois de baixado, você basicamente segue
s etapas descritas aqui,
erto? Você clica duas vezes nele, abre o aplicativo
assim por diante.
o mesmo para o Windows. Se for sua janela, você basicamente clica nesta
baixe o Docker desktop para Windows
certifique-se de verificar os requisitos do sistema
meio que prepare tudo
ocê precisa para iniciar o Docker.
eralmente para as versões mais recentes do Windows, Mac ou qualquer sistema operacional.
eve ser muito fácil e simples instalar o Docker.
ntão vá em frente e faça isso.
epois de concluir a instalação,
ocê pode simplesmente iniciar o serviço pesquisando no Docker.
se eu clicar nele,
ocê verá aqui
ue na verdade é
niciando. Serviço Docker para o motor Docker
aí está,
stá funcionando,
esta visão aqui que você está vendo esta janela é
a verdade, a interface gráfica do usuário do Docker que mencionei.
ntão, esse é o cliente que você pode usar para interagir com o mecanismo docker.
ntão você tem uma lista de contêineres em execução atualmente, então não há nenhuma lista,
mesmo com imagens. Se eu mudar para imagens, limpei meu ambiente.
ntão, estou começando do zero com o estado vazio, assim como você.
ntão, estamos prontos para começar a usar mais escuro.
as primeiro você pode estar se perguntando o que são imagens,
é isso que vou explicar a seguir,
orque é um conceito muito importante no escuro
gora significa que o Docker permite empacotar o aplicativo com seu ambiente
onfiguração neste pacote que você pode compartilhar e distribuir facilmente.
ntão, assim como um arquivo de artefato de aplicativo,
omo quando criamos um arquivo zip ou tar ou um arquivo jar,
ue você pode enviar para um armazenamento de artefatos e depois
aixe no servidor ou localmente sempre que precisar.
esse pacote ou artefato que produzimos com o Docker é chamado de imagem do docker.
ntão, é basicamente um artefato de aplicativo
mas diferente do arquivo Jar
u de outros artefatos de aplicativos.
le não tem apenas o código do aplicativo compilado,
mas também tem informações sobre
configuração do ambiente.
em a camada de aplicativo do sistema operacional, como mencionei,
ais as ferramentas como node N, PM ou Java Run Time
nstalado nisso,
ependendo da linguagem de programação em que seu aplicativo foi escrito.
or exemplo, se você tiver um aplicativo JavaScript,
ocê precisaria de nós Js e N PM para executar seu aplicativo corretamente,
ntão, na imagem mais escura, você já teria o node e o N PM instalados.
ocê também pode adicionar variáveis de ambiente de que seu aplicativo precisa. Por exemplo,
ocê pode criar diretórios.
ocê pode criar arquivos ou qualquer outro ambiente
onfigure tudo o que você precisa em seu aplicativo.
ntão, todas essas informações são empacotadas na imagem do docker,
unto com o código do aplicativo,
essa é a grande vantagem do Docker sobre a qual falamos.
, como eu disse, o pacote é chamado de imagem.
ntão, se isso é uma imagem, o que é um contêiner, então?
em, precisamos iniciar esse pacote de aplicativos em algum lugar, certo?
ntão, quando pegamos esse pacote ou imagem e baixamos
para um servidor ou laptop de seu computador local,
ueremos executá-lo no computador.
aplicativo precisa realmente ser executado.
quando executamos essa imagem em um sistema operacional
o aplicativo interno começa no pré
mbiente configurado que nos fornece um contêiner.
ortanto, uma instância em execução de uma imagem é um contêiner.
ortanto, um contêiner é basicamente uma instância em execução de uma imagem e
a mesma imagem de uma imagem, você pode executar vários contêineres,
ue é um caso de uso legítimo se você precisar executar
árias instâncias do mesmo aplicativo para aumentar o desempenho,
or exemplo, e isso é exatamente o que estávamos vendo aqui.
ntão, temos as imagens. Esses são os pacotes de aplicativos, basicamente,
, a partir dessas imagens, podemos começar
ontêineres que veremos listados aqui,
ue estão executando instâncias dessas imagens.
eu também disse que
lém da interface gráfica do usuário,
btemos um cliente de interface de linha de comando do cliente que pode conversar com do
otor.
esde que instalamos o Docker Desktop,
evemos ter essa CLI do docker também disponível localmente,
o que significa que se você abrir seu terminal, poderá executar comandos docker
documentos. Nós podemos fazer qualquer coisa.
or exemplo, podemos verificar quais imagens temos disponíveis localmente.
ntão, se eu fizer imagens do docker, isso me dará uma lista de imagens que eu tenho localmente,
ue, neste caso, não tenho nenhum que vimos na interface gráfica do usuário.
também posso verificar os contêineres usando um docker de comando,
S
novamente,
inda não tenho nenhum contêiner em execução.
gora, antes de continuar, quero dar uma mensagem para a Net
opper. Os mais novos
lataforma de nuvem, chamada
os governadores
perações de aplicativos oferecem uma maneira fácil para as equipes de DevOps fornecerem, gerenciarem
tualize, conecte, proteja e monitore aplicativos em um ou mais kits
lusters.
om esta plataforma, eles basicamente criam essa camada de rede virtual
ue conecta vários ambientes.
or exemplo, se você tiver várias plataformas de nuvem e várias
lusters, até mesmo o seu próprio data center local,
nde seu aplicativo é implantado,
ocê pode conectar tudo isso em uma rede virtual para poder implantar e operar
s cargas de trabalho da sua comunidade como se estivessem em
m cluster ou um ambiente de infraestrutura e o get
abordagem centrada no topo que eles usam oferece a visibilidade de saber quem
ez o que e quando para sua infraestrutura e aplicativo.
ortanto, com o Net Hopper, as empresas podem automatizar suas operações.
em vez de construir uma plataforma própria,
quipes de devops podem se concentrar no que é mais importante,
que está lançando mais recursos de aplicativos com mais rapidez.
ntão, dê uma olhada. Você pode realmente se inscrever em uma conta gratuita e dar uma volta nela
ara ver se o Net Hopper é a solução certa para você.
gora está claro que obtemos contêineres executando imagens,
as como obtemos imagens para executar contêineres?
igamos que queremos correr
m contêiner de banco de dados ou
u algum contêiner de serviço de coletor de fechaduras. Como obtemos suas imagens mais escuras
em, é aí que entram os registros do docker.
ortanto, há imagens docker prontas disponíveis online em um armazenamento ou registro de imagens.
ntão, basicamente, este é um armazenamento específico para artefatos de imagens mais escuras,
, geralmente, as empresas que desenvolvem esses serviços
omo pronto
etc., assim como o Docker.
própria comunidade criará o que é chamado de imagens oficiais. Então você conhece esse mongo
imagem foi realmente criada por
m si ou na comunidade Docker.
ntão, você sabe, é uma imagem oficial verificada do próprio Docker.
o próprio Docker oferece o maior registro do docker
hamado Docker Hub,
nde você pode encontrar qualquer uma dessas imagens oficiais e muitas outras
magens de diferentes empresas ou indivíduos
esenvolvedores criaram e enviaram lá.
ntão, se procurarmos o dark Hub
qui, você vê a biblioteca Doctor Hub Container Image.
assim que parece.
você realmente não precisa se registrar ou assinar
cesse o Dock Hub para encontrar essas imagens oficiais.
ortanto, qualquer pessoa pode acessar este site e basicamente navegar pelas imagens do contêiner.
aqui na barra de pesquisa,
ocê pode digitar qualquer serviço que estiver procurando. Por exemplo, pronto
ue mencionei.
se eu apertar enter,
ocê basicamente verá um
ista de várias imagens relacionadas prontas, bem como o próprio serviço pronto
omo uma imagem mais escura.
aqui você tem esse lote ou rótulo que diz uma imagem oficial mais escura, por exemplo,
ara a imagem mais vermelha que vamos escolher aqui,
ocê vê que ele é realmente mantido pela comunidade Docker.
forma como funciona é que o Docker tem uma equipe dedicada que é responsável
ara revisar e publicar todo o conteúdo nas imagens oficiais mais escuras.
essa equipe trabalha em colaboração com os criadores de tecnologia,
u mantenedores, bem como especialistas em segurança
ara criar e gerenciar essas imagens oficiais mais escuras.
essa forma, é garantido que não apenas o
riadores de tecnologia estão envolvidos na criação oficial da imagem,
mas também toda a segurança mais obscura, melhores práticas e produção.
s melhores práticas também são consideradas na criação de imagens,
essa é basicamente a página de descrição com todas as
nformações sobre como usar essa imagem mais escura,
que inclui, etc.
, novamente, como eu disse, o Docker Hub é o maior registro de imagens do docker,
ara que você possa encontrar imagens para qualquer serviço que você
eseja usar no Docker Hub.
gora, é claro,
udanças tecnológicas e há atualizações nos aplicativos dessas tecnologias.
ntão você tem uma nova versão do vermelho
u manga para B,
, nesse caso, um novo
imagem do executor será criada,
ntão as imagens também são versões,
são chamadas de tags de imagem.
na página de cada imagem você realmente
em a lista de versões ou tags dessa imagem
istado aqui.
ntão, isso é para
se eu pesquisar um Post,
or exemplo,
ocê verá diferentes tags de imagem para
magens de resolução também estão listadas aqui.
ntão, quando você está usando uma tecnologia e precisa de uma versão específica, você pode escolher
ma imagem mais escura que tem essa versão da tecnologia.
há uma tag especial que todas as imagens têm
igaram pela última vez. Então, aqui você vê esta última tag
u aqui também no texto recente.
ortanto, a tag latest é basicamente a última, a última imagem que foi construída.
ntão, se você não especificar ou escolher uma versão explicitamente,
ocê basicamente obtém a imagem mais recente do hub do Docker.
gora vimos o que são imagens
onde você pode obtê-los.
ntão agora a questão é,
omo podemos realmente obter a imagem do Docker Hub e baixá-la
ocalmente em nosso computador para que possamos iniciar um contêiner a partir dessa imagem.
ntão, primeiro localizamos a imagem que queremos executar como um contêiner localmente para nossa demonstração.
ou usar um motor
magem. Então vá em frente e procure por Engine,
ue é basicamente um servidor Web simples e tem uma UI.
ntão, poderemos acessar nosso contêiner a partir de
navegador para validar O contêiner foi iniciado com sucesso.
por isso que estou escolhendo o motor,
aqui você tem um monte de tags de imagem
ue você pode escolher.
ortanto, a segunda etapa após localizar a imagem é escolher uma tecnologia de imagem específica
observe que selecionar
ma versão específica da imagem é a melhor prática na maioria dos casos.
digamos que escolhemos a versão 1.23.
ntão, estamos escolhendo essa tag aqui e fazendo o download de uma imagem.
oltamos ao nosso terminal e executamos o docker
uxe o comando e especificamos o nome da imagem,
ue é
otor X.
ntão você também tem todo esse comando aqui,
ntão esse é basicamente o nome da imagem que você escreveu aqui.
ntão isso é NGX.
então
specificamos a tag da imagem separando-a com dois pontos
depois a versão
,23. Foi isso que escolhemos.
sse é o comando completo. Então, o Docker Client entrará em contato com
ub e vou dizer, eu quero pegar
motor
magem com esta tag específica e baixe-a localmente. Então, vamos executar.
aqui vemos que ele está puxando a imagem de
hub Docker de registro de imagens.
a razão pela qual não precisamos dizer ao Docker
escobrir que a imagem no Docker Hub é porque o Docker Hub é na verdade o padrão
ocal em que o Docker procurará todas as imagens que especificarmos aqui.
ortanto, é configurado automaticamente como um local para
aixando as imagens e o download aconteceu.
agora, se executarmos o comando docker images novamente, como fizemos aqui,
na verdade, devemos ver uma imagem agora localmente, que é o motor
om uma tag de imagem
,23
algumas outras informações, como o tamanho da imagem,
que geralmente está em megabytes,
omo mencionei.
ntão, agora temos uma imagem localmente,
se puxarmos uma imagem sem nenhuma tag específica,
ntão fazemos isso basicamente docker extrair um nome da imagem.
se eu executar isso, você verá que ele está puxando a imagem mais recente automaticamente.
agora, se eu fizer
magens novamente,
amos ver duas imagens do motor
om dois textos diferentes,
erto? Então, essas são na verdade duas imagens separadas com versões diferentes.
egal.
gora temos imagens localmente,
mas obviamente eles só são úteis quando os executamos em um ambiente de contêiner.
omo podemos fazer isso? Também é super fácil.
scolhemos a imagem que já temos disponível localmente
om a tag. Então, digamos que queremos correr
sta imagem como um contêiner
executamos o comando darker run
om o nome da imagem
a tag
uper fácil
vamos executar.
esse comando realmente inicia o contêiner com base na imagem.
sabemos que o contêiner começou porque vemos o
egistros do serviço do motor iniciando dentro do contêiner.
ntão, esses são, na verdade, registros de contêineres que vemos no console.
ntão, está lançando alguns scripts,
aqui iniciamos os processos de trabalho e o contêiner está em execução.
ntão, agora
e eu abrir uma nova sessão de terminal
urtiu isso
aça
S,
u deveria realmente ver um contêiner,
ste aqui
a lista de contêineres em execução,
temos algumas informações sobre o contêiner. Nós temos o ID.
emos a imagem na qual o contêiner se baseia,
ncluindo a tecnologia quando foi criada
também o nome do contêiner. Portanto, temos o ID e o nome do contêiner.
ste é o nome que o docker realmente faz automaticamente
era e atribui a um contêiner quando ele é criado.
ortanto, é um nome gerado aleatoriamente.
gora, se eu voltar aqui, você verá que esses registros, os registros do contêiner,
a verdade estão bloqueando o terminal.
ntão, se eu quiser recuperar o terminal e fazer a saída C do controle,
contêiner sai e o processo realmente morre.
ntão, agora, se eu fizer
S, você verá que não há nenhum contêiner em execução.
as podemos iniciar um contêiner
m segundo plano sem bloquear o terminal adicionando
ma bandeira chamada menos D,
ue significa separado.
ortanto, ele separa o processo docker do terminal.
se eu executar isso,
ocê vê que ele não está mais bloqueando o terminal.
em vez de mostrar os registros do motor X iniciando dentro do contêiner,
le simplesmente bloqueia
ID completo do contêiner. Então, agora, se eu fizer
S
qui no mesmo terminal, eu deveria ver aquele contêiner
orrendo novamente.
isso é basicamente o ID ou a parte dessa string de ID completa
ostrado aqui.
as quando iniciamos um contêiner em segundo plano em um modo separado,
ocê ainda pode querer ver os registros do aplicativo dentro do contêiner,
ntão você pode querer ver como o motor foi ligado em seguida?
que parecia, na verdade, então
ara isso, você pode usar outro comando docker chamado Docker logs
om o ID do contêiner
ssim,
ele imprimirá os registros do aplicativo do contêiner.
gora, para criar o contêiner
ontêiner, primeiro retiramos a imagem e, em seguida, criamos um contêiner a partir dessa imagem.
as
podemos realmente salvar para nós mesmos o comando pull
execute
xecute o comando diretamente, mesmo se a imagem não estiver disponível localmente.
ntão, agora, temos essas duas imagens disponíveis localmente,
as no comando de execução do Docker,
ocê pode realmente fornecer qualquer imagem que exista no Docker Hub.
ão precisa necessariamente existir localmente no seu computador,
ntão você não precisa puxar isso primeiro.
ntão, se eu voltar, podemos realmente escolher uma versão de imagem diferente.
amos escolher 1,22 dash alpine,
ntão
sta tag de imagem,
ue não temos localmente
u Claro, isso pode ser um serviço completamente diferente. Isso não importa.
ntão, basicamente, qualquer imagem que não tenhamos localmente
ocê pode executar diretamente usando o comando docker run.
ntão, o que ele faz é primeiro. Ele tentará
ocalize essa imagem
ocalmente,
se não encontrar,
le irá para o hub Docker por padrão
puxe a imagem de lá automaticamente, o que é muito conveniente.
ntão, ele faz as duas coisas em um comando, basicamente. Então ele baixou a imagem com esta tag
iniciei o contêiner.
agora, se fizermos docker PS,
evemos ter dois contêineres funcionando com diferentes
ersões.
lembre-se, eu disse,
Docker resolve o problema de executar versões diferentes do mesmo aplicativo
e uma vez. Então, é tão simples fazer isso com o Docker
ara que possamos realmente clicar neste contêiner.
gora, novamente, temos
quele único contêiner de motor com esta versão.
gora, a questão importante é: como acessamos esse contêiner?
em, não podemos agora
orque o contêiner está sendo executado em
rede Docker fechada, então não podemos acessá-la em nosso navegador de computador local,
or exemplo,
precisamos primeiro expor o contêiner ao nosso
ede local que pode parecer um pouco difícil,
as é super fácil.
ntão, basicamente, vamos fazer o que é chamado de vinculação de porta.
contêiner está sendo executado em alguma porta, certo,
cada aplicativo tem uma porta padrão na qual está sendo executado,
omo motor
plicação
empre funciona na porta 80 vermelha
executado na porta
79.
ortanto, essas são portas padrão para esses aplicativos.
ntão, essa é a porta em que o contêiner está sendo executado.
para
emos as portas abaixo da lista de portas aqui, o aplicativo está sendo executado na Porta A
entro do contêiner. Então, agora, se eu tentar acessar
otor
ontêiner
esta porta na porta 80 do navegador
vamos tentar fazer isso
orta 80
perte enter.
ocê vê que nada está disponível nesta porta
o host local. Então, agora podemos dizer ao Docker
i, você sabe o que? Vincule a porta 80 desse contêiner
ara nosso anfitrião local em
ualquer porta que eu diga em alguma porta específica, como 80, 80 ou 9000,
na verdade, não importa para que eu possa acessar o contêiner ou o que quer que esteja em execução
entro do contêiner como se estivesse sendo executado na porta 9000 do meu host local.
fazemos isso com um sinalizador adicional ao criar
m recipiente mais escuro.
ntão
que vamos fazer é primeiro, vamos parar este contêiner
crie um novo. Então, vamos fazer, Doutor,
ue
asicamente interrompe esse contêiner em execução,
vamos criar um novo contêiner.
ntão, vamos fazer
xecutar
otor X
mesma versão
vamos encontrá-lo em segundo plano no modo de separação.
gora vamos fazer a vinculação de portas com um toque adicional menos P,
é super fácil.
stamos dizendo ao Docker
otor
orta do aplicativo
entro do contêiner, que é um
por favor, pegue isso e vincule isso
m um host ou host local
a porta qualquer que seja. 9000, por exemplo. Certo.
ssa é a porta que estou escolhendo.
ntão, esta bandeira aqui
na verdade, exporá o contêiner à nossa rede local ou host local.
ntão, este motor
processo em execução no contêiner estará acessível para nós na porta 9000.
ntão, agora, se eu executar isso,
amos ver se o contêiner está em execução,
a seção de portas, vemos um valor diferente. Então, em vez de apenas ter 80
emos essas informações de vinculação de porta.
ntão, se você esqueceu qual porta escolheu. Ou se você tiver 10 recipientes diferentes com
S,
ocê pode realmente ver em qual porta cada contêiner está acessível em seu host local.
ntão, esta será a porta.
ntão, agora, se eu voltar para o navegador
em vez do host local 80, vamos digitar o host local 9000
assim por diante. Entrar.
í está. Temos as boas-vindas ao motor
ágina, então isso significa que estamos realmente acessando nosso aplicativo.
também podemos ver isso nos registros. Fale muito
D do contêiner.
aí está. Este é o registro. Uh, aquele motor
oi produzido um aplicativo que recebeu uma solicitação do Mac ou de mim
áquina OS
avegador Chrome.
ntão, vemos que nossa solicitação realmente atingiu o
otor
plicativo em execução dentro do contêiner.
ntão, é fácil executar um serviço dentro de um contêiner e acessá-lo localmente.
gora, como eu disse, você pode escolher a porta que quiser,
mas também é praticamente um padrão usar o mesmo
orta em sua máquina host conforme o contêiner está usando.
ntão, se eu estivesse executando um contêiner MySQL que começasse em
orta 3306 Eu a vincularia ao host local 3306.
ntão, isso é uma espécie de padrão.
gora, há uma coisa que quero destacar aqui, que é que o Docker é executado
a verdade, cria um novo contêiner toda vez.
le não reutiliza o contêiner que criamos anteriormente.
que significa que, como já executamos o comando Docker run algumas vezes,
na verdade, devemos ter vários contêineres em nosso
aptop. No entanto, se eu fizer o Docker P SI, vejo apenas o contêiner em execução
ão vejo os que criei, mas parei.
as esses contêineres ainda existem.
ntão, se eu fizer docker PS
om uma mancha
E
execute
sso fornece, na verdade, uma lista de todos
ontêineres, estejam eles funcionando ou parados.
ntão, este é o contêiner ativo
ue ainda está em execução
esses são os parados.
iz até que saiu há 10 minutos, seis minutos atrás. Seja o que for.
ortanto, temos quatro contêineres com configurações diferentes
anteriormente eu mostrei a você Docker stop
omando que basicamente interrompe um contêiner em execução ativa
ara que possamos parar com isso.
agora ele vai mostrá-lo como
m contêiner parado também saiu há um segundo,
as da mesma forma.
ocê também pode reiniciar um contêiner que você criou antes
em precisar criar um novo com docker Run,
e comprometem.
ntão, para isso, temos um começo mais escuro
ue pega o ID do contêiner
inicie o contêiner repetidamente. Você pode começar várias
ontêineres de uma vez, se você quiser,
urtiram isso.
gora você tem dois contêineres em execução.
gora você viu que usamos o ID do contêiner em vários comandos do stocker.
ntão, para parar o contêiner, reiniciá-lo, verificar os registros, etc.
as a identidade é difícil de lembrar e você terá que procurá-la o tempo todo.
ntão
omo alternativa,
ocê também pode usar o nome do contêiner para todos esses comandos
m vez do ID que é gerado automaticamente pelo Docker.
as podemos realmente reescrever isso e fornecer nossos contêineres
omes mais significativos quando os criamos
ara que possamos parar esses dois contêineres
sando o ID
u o nome
urtiram isso.
ntão, esses são dois contêineres diferentes, um com ID,
m com nome e vamos parar os dois.
í está.
gora, quando criamos um novo contêiner, podemos realmente dar a ele um nome específico
há outra bandeira para isso
ue é o nome Dash Dash. E então nós fornecemos
nome que queremos dar ao nosso contêiner. E digamos que isso seja, hum, um
plicativo da Web. Então é assim que vamos chamar nosso contêiner
vamos executar.
e eu fizer
PS
ocê vê que o nome não é algo aleatório gerado automaticamente,
as, em vez disso, nosso contêiner é chamado de Web.
ntão, agora podemos fazer o doer
loqueia e
ome do nosso contêiner
urtiram isso.
gora aprendemos sobre Do
ub, que na verdade é
que é chamado de registro público de imagens,
que significa
ssas imagens que usamos são visíveis e estão disponíveis para o público.
as quando uma empresa cria suas próprias imagens de seus próprios aplicativos,
claro que eles não querem que ele esteja disponível publicamente.
ntão, para isso, existem os chamados registros docker privados,
existem muitos deles.
uase todos os provedores de nuvem têm um serviço de registro docker privado,
or exemplo, AWS EECR ou serviço de registro de contêineres elásticos, Google Azure.
odos eles têm seus próprios registros docker.
Nexus, que é um serviço popular de armazenamento de artefatos, não tem registro.
té o Docker Hub tem um registro de dock privado
ntão, na página inicial do Dock Hub, você viu este formulário de introdução.
ntão, basicamente, se você quiser armazenar suas imagens privadas do docker no Doer
ub,
ocê pode realmente criar um registro privado no Docker Hub ou
té mesmo crie um registro público e faça upload de suas imagens lá.
por isso que eu realmente tenho uma conta,
orque eu fiz o upload de algumas imagens no Do
ub que meus alunos podem baixar para diferentes cursos.
há mais um conceito que quero mencionar relacionado ao registro,
ue é algo chamado repositório,
ue você também ouve com frequência.
m repositório faz
egistro? Então, qual é a diferença entre eles? De forma muito simples, explicou a AWS.
ECR é um registro, então, basicamente, é um serviço que fornece armazenamento para imagens.
dentro desse registro,
ocê pode ter vários repositórios para todas as suas diferentes imagens de aplicativos.
ortanto, cada aplicativo tem seu próprio repositório,
nesse repositório você pode armazenar diferentes versões de imagens
u tags desse mesmo aplicativo da mesma maneira.
o
hub é um registro. É um serviço para armazenar imagens e fazer
ub,
ocê pode ter seus repositórios públicos para armazenar imagens que serão
cessível publicamente ou você pode ter
epositórios privados para diferentes aplicativos.
, novamente, você pode ter um repositório dedicado para cada aplicativo.
ntão, essa é uma nota lateral.
e você ouvir esses termos e conceitos e souber qual é a diferença entre eles
gora?
u mencionei que as empresas gostariam de criar
uas próprias imagens personalizadas para seus aplicativos.
ntão, como isso realmente funciona?
omo posso criar minha própria imagem docker para meu aplicativo?
o caso de uso disso é, quando eu estou
oncluído com o desenvolvimento, o aplicativo está pronto.
le tem alguns recursos e queremos lançá-lo para os usuários finais.
ntão, queremos executá-lo em uma implantação
ervidor e para facilitar o processo de implantação.
eseja implantar nosso aplicativo como um contêiner docker junto com o banco de dados
outros serviços que também serão executados como contêineres docker?
ntão, como podemos usar nosso aplicativo implantado criado
odifica e empacota em uma imagem docker?
ara isso, precisamos criar uma definição de como construir uma imagem
o nosso aplicativo,
essa definição é escrita em um arquivo chamado arquivo docker.
ntão, é assim que deve ser chamado, criar um arquivo docker simples é muito fácil.
nesta parte, vamos usar um aplicativo super simples, sem JAS, que eu preparei.
vamos escrever um arquivo docker para isso
plicativo para criar uma imagem mais escura a partir dele.
, como eu disse, é muito fácil de fazer.
ntão, este é o aplicativo.
extremamente simples. Eu só tenho um
rquivo dot Js do servidor, que basicamente apenas inicia o aplicativo
a porta 3000. E então
penas diz: Bem-vindo
uando você o acessa a partir do navegador
temos um arquivo adjacente de pacote que contém essa dependência
ara a biblioteca expressa que usamos aqui para iniciar o aplicativo
uper enxuta e simples.
esse é o aplicativo a partir do qual vamos criar um
magem do docker e inicie-a como um contêiner do docker.
ntão, vamos fazer isso.
ntão, na raiz do aplicativo, vamos criar um novo arquivo chamado Docker File.
ntão esse é o nome. E você vê isso,
um, a maioria dos editores de código realmente detecta
rquivo docker e obtemos esse ícone do docker aqui.
ntão, neste arquivo docker,
amos escrever uma definição de como o
imagem deve ser criada a partir deste aplicativo.
ntão, o que nosso aplicativo precisa?
le precisa de um nó instalado porque o nó deve executar nosso aplicativo.
erto?
ntão, se eu quisesse iniciar este aplicativo localmente
o meu terminal, eu executaria o node SRC. Então, a pasta de origem
o ponto do servidor Js
omando para iniciar o aplicativo.
ortanto, precisamos desse comando de nó disponível dentro da imagem.
é aí que entra o conceito de imagem base.
ortanto, cada imagem do docker é, na verdade, baseada nessa imagem base,
que é principalmente uma imagem leve do sistema operacional Linux que tem
node, N, PM ou qualquer ferramenta que você precise para instalar seu aplicativo em cima dele.
ortanto, para o aplicativo JavaScript, você teria
magem base do nó.
e você tiver um aplicativo Java, usaremos uma imagem com o Java Runtime instalado
ovamente sistema operacional Linux com Java instalado em cima dele.
essa é a imagem base. E definimos a imagem base.
sando uma diretiva no arquivo docker chamado de.
stamos dizendo que construa esta imagem a partir da imagem base e se
u volto ao Docker Hub e procuro por node,
ocê verá que temos uma imagem que tem node e N PM instalados em seu interior
as imagens de base são como outras imagens.
ntão, basicamente, você pode empilhar e construir sobre as imagens no Docker.
ntão, eles são como qualquer outra imagem que vimos.
eles também têm versões em texto ou imagem.
ntão, vamos escolher a imagem do nó e uma versão específica
, na verdade, vamos escolher 19 traços L de pinho.
ntão, essa é nossa imagem base e nossa primeira diretiva no arquivo docker.
ntão, novamente, isso apenas garantirá que
uando nosso aplicativo node Js inicia em um contêiner,
le terá um node e comandos N PM disponíveis para executar nosso aplicativo.
gora, se iniciarmos nosso aplicativo com este comando,
eremos que recebemos um erro porque
recisamos primeiro instalar as dependências de um aplicativo.
emos apenas uma dependência, que é a biblioteca de imprensa,
que significa que teríamos que executar a instalação N PM,
ue verificará o arquivo json do pacote, lerá todas as dependências,
efina o interior e instale-os
ocalmente na pasta de módulos do nó.
ntão, basicamente, estamos mapeando as mesmas coisas que faríamos para executar o aplicativo.
ocalmente, estamos mapeando isso dentro do contêiner,
então teríamos que executar o comando N PM install também dentro do contêiner.
ntão,
omo mencionei antes,
maioria das imagens escuras é baseada em Linux.
lpine é um Linux, uma distribuição de sistema operacional Linux de ondas leves.
ntão
o arquivo docker,
ocê pode escrever qualquer comando Linux que desejar executar dentro do contêiner.
sempre que quisermos executar qualquer comando dentro do contêiner,
eja um comando Linux ou um comando de nó N PM, qualquer que seja,
ós o executamos usando uma diretiva de execução.
ntão essa é outra diretiva, e você vê que as diretivas são escritas em maiúsculas
depois vem o comando.
ntão, não instale o NPM,
ue baixará dependências dentro do contêiner e
rie uma pasta de módulos de nó dentro do contêiner
ntes de o aplicativo ser iniciado.
ntão, novamente, pense em um contêiner como seu próprio ambiente isolado. Tem um Linux simples
istema operacional
om node e N PM instalados,
estamos executando a instalação do N PM.
o entanto, também precisamos do código do aplicativo dentro do contêiner, certo?
ntão, precisamos do servidor Js
o interior,
precisamos do pacote para Jason porque é isso
m comando PM precisará realmente ler as dependências.
essa é outra diretiva de onde retiramos os arquivos
osso computador local e nós os colamos. Copie-os para o contêiner.
essa é uma diretiva chamada Copy
você pode copiar arquivos individuais, como o pacote dot
son a partir daqui
o contêiner, e podemos dizer onde no contêiner em qual local
o sistema de arquivos para o qual ele deve ser copiado.
digamos
le deve ser copiado para uma pasta chamada barra
plicativo
entro do contêiner. Então isso está na nossa máquina,
erto? Temos pacotes adjacentes aqui. Isso está dentro do contêiner.
completamente
istema isolado do nosso ambiente local,
ara que possamos copiar arquivos individuais e também copiar os diretórios completos.
ortanto, também precisamos do código do nosso aplicativo interno, obviamente,
ara executar o aplicativo para que possamos copiá-lo
iretório de origem inteiro, então temos vários arquivos dentro.
odemos copiar o diretório inteiro para o contêiner novamente
m barra
plicativo
ocalização
a barra no final também é muito importante.
ortanto, o docker sabe como criar essa pasta se ela ainda não existir no contêiner,
ntão
raiz do sistema de arquivos Linux adiciona uma pasta dentro e depois uma barra.
gora, todos os arquivos de aplicativos relevantes, como o pacote adjacente e o
odo o diretório de origem é copiado para o contêiner neste local.
próxima coisa que queremos fazer antes de podermos executar
comando de instalação do N PM deve realmente mudar para esse diretório.
erto?
ntão, no Linux,
emos o direito de transformar este CD em um diretório
ara executar os seguintes comandos dentro do diretório
o arquivo docker. Temos uma diretiva para isso chamada trabalho.
aro.
ntão, diretório de trabalho,
o que equivale a mudar para um diretório
ara executar todos os seguintes comandos nesse diretório
ntão podemos
aça o Slash App aqui.
ortanto, ele define esse caminho como o local padrão
ara o que vier depois. OK,
ntão estamos copiando tudo para o contêiner.
m seguida, estamos definindo o diretório de trabalho
u o diretório padrão dentro do contêiner.
, em seguida, estamos executando N PM install novamente dentro do contêiner para
aixe todas as dependências que o aplicativo precisa e que estão definidas aqui.
, finalmente, precisamos executar o aplicativo, certo?
ortanto, após a instalação do NP, o comando node deve
ejam executados e aprendemos a executar comandos.
samos a diretiva run.
o entanto, se este for o último comando no arquivo docker,
ntão, algo que realmente inicia o processo É o aplicativo interno,
emos uma diretiva diferente para aquela chamada C MD.
ntão, esse é basicamente o último comando no
rquivo docker e isso inicia o aplicativo.
a sintaxe para isso é a
04.024
ue é o nó
o parâmetro
ponto do servidor Js.
ntão, copiamos tudo para o aplicativo Slash.
ortanto, temos o servidor Js dentro do diretório APP
estamos iniciando ou executando usando node commit.
isso.
sse é o arquivo docker completo que criará
ma imagem docker para nosso aplicativo node Js,
ue podemos então começar como um contêiner.
gora temos a definição no arquivo docker. É hora de realmente criar a imagem.
partir desta definição.
ou esclarecer isso e sem mudar para o terminal,
podemos realmente reutilizar este.
odemos executar um comando docker para criar uma imagem mais escura, o que é muito fácil.
ós apenas fazemos docker build.
ntão, temos algumas opções que podemos oferecer.
primeiro é o nome da imagem.
ntão, assim como todas essas imagens têm nomes, assim como node ready etc.,
as tags
ambém podemos
omeie nossa imagem e dê a ela uma tag específica.
fazemos isso usando esta opção de traço T
podemos chamar nosso nó de aplicativo
plicativo
alvez com o Dash não importe
odemos dar a ele uma tag específica
omo 1.0, por exemplo.
último parâmetro é a localização do arquivo docker.
ntão, estamos dizendo ao Docker criar uma imagem
om este nome com esta tag
partir de
definição neste arquivo docker específico, certo?
ortanto, este é o local do arquivo docker neste caso,
stamos no diretório em que o arquivo Docker está localizado,
ntão será o diretório atual.
ntão, esse ponto basicamente se refere à pasta atual
nde o arquivo Docker está localizado.
ntão, agora, se executarmos isso
omo você vê, fazedor
stá realmente construindo
imagem do nosso arquivo de locutor
parece que teve sucesso quando começou a construir a imagem.
ocê vê essas etapas, aquelas diretivas que definimos aqui.
ortanto, temos a primeira da diretiva executada. Então temos a cópia
omo segunda etapa. Em seguida, copiamos o diretório de trabalho de configuração da pasta de origem
executando N PM install e, em seguida, o último acabou de iniciar o aplicativo.
ntão agora
e eu fizer imagens do docker
lém desses
magens que baixamos
nteriormente do Docker Hub,
deveríamos realmente ver a imagem que acabamos de criar.
sta é a imagem do aplicativo node com tag
.0
algumas outras informações.
ntão essa é a nossa imagem.
agora podemos começar esta imagem e trabalhar com ela,
assim como trabalhamos com qualquer outra imagem baixada do Docker Hub.
ntão, vamos prosseguir e executar um contêiner a partir deste nó
magem do aplicativo e certifique-se de que o aplicativo interno esteja realmente funcionando.
ntão
amos fazer docker run
ode
plicativo
magem com 1.0 10
vamos passar o parâmetro para começar desanexado
850 e também queremos expor a porta corretamente.
ueremos
er capaz de acessar o aplicativo, o aplicativo de nó a partir do host local
abemos que o aplicativo dentro do contêiner será iniciado
a Porta 3000 porque é isso que definimos aqui.
ortanto, o próprio aplicativo será executado na porta 3000.
ntão, isso está dentro do contêiner, e podemos vinculá-lo a qualquer porta que quisermos no host local
podemos fazer 3000, o mesmo que no contêiner.
ortanto, esta é a porta do host e essa é a porta do contêiner.
agora, se eu executar
um comando
faça docker PS,
evemos ver nosso aplicativo node em execução na porta 3000
agora a hora da verdade
oltando ao navegador
abrindo o anfitrião local 3000
qui estão nossas boas-vindas ao meu incrível aplicativo
ensagem do nosso aplicativo.
podemos até mesmo verificar os registros
egando o ID do nosso não
plicativo
fazendo blocos docker com o ID.
ssa é a saída do nosso aplicativo
entro do contêiner.
ntão
assim que é fácil fazer sua inscrição,
mpacote-o em uma imagem docker usando o arquivo docker e execute-o como um contêiner
, finalmente, voltando a esta interface gráfica de usuário
liente que o desktop Docker realmente nos fornece.
gora também podemos ver todos os nossos contêineres e imagens aqui.
é assim que esse U I realmente parece, ele te dá uma sensação muito boa
isão geral
e quais contêineres você tem.
uais estão em execução no momento, quais estão parados com seus nomes e assim por diante
você ainda tem alguns controles aqui para iniciar um
arou um contêiner assim ou até mesmo parou de novo?
einicie o contêiner, exclua o que quiser.
da mesma forma que você tem uma lista de imagens,
ncluindo nossa própria imagem,
você também pode criar contêineres diretamente daqui usando alguns controles.
ntão
u pessoalmente prefiro a interface de linha de comando para interagir com o Docker.
as alguns se sentem mais confortáveis usando
U.I visual
ntão, o que você preferir, você pode realmente escolher trabalhar com qualquer um deles.
gora, aprendemos muitos elementos básicos do docker.
o entanto,
ambém é interessante ver como o docker realmente se encaixa na íntegra
rocesso de desenvolvimento e implantação de software com
uitas outras tecnologias também.
ntão, quais etapas de todo esse processo são mais sombrias e relevantes.
ntão, nesta parte final do curso intensivo,
eremos uma visão geral mais sombria do ciclo de vida do desenvolvimento de software.
ntão, vamos considerar um cenário simplificado em que você está desenvolvendo um JAVASCRIPT
plicativo em seu laptop diretamente em seu ambiente de desenvolvimento local.
eu aplicativo JavaScript usa um Mongo
anco de dados de banco de dados e, em vez de instalá-lo em seu laptop,
ocê baixa um contêiner docker do hub do Docker.
ntão você conecta seu aplicativo JavaScript ao mongo
B e você começa a desenvolver.
ntão, agora, digamos que você desenvolva o
rimeira versão do aplicativo localmente,
agora você deseja testá-lo ou implantá-lo no, uh,
mbiente de desenvolvimento onde
m testador da sua equipe vai testá-lo.
ntão você confirma seu aplicativo JavaScript no git
u em algum outro sistema de controle de versão.
h, isso desencadeará uma integração contínua.
ma compilação do Jenkins, ou o que você tiver configurado
a compilação do Jenkins produzirá artefatos do seu aplicativo.
ntão, primeiro, você criará seu aplicativo JavaScript
depois
rie uma imagem docker a partir desse artefato JavaScript. Certo?
ntão, o que acontece com essa imagem do docker? Depois de criado pelo Jenkins build
le é empurrado
ara um repositório docker privado.
ntão, normalmente, em uma empresa, você teria um repositório privado porque
ocê não quer que outras pessoas tenham acesso às suas imagens.
ntão você empurra para lá.
agora,
pois a próxima etapa pode ser configurada no Jenkins ou em alguns outros scripts ou ferramentas, que
magem docker
eve ser implantado em um servidor de desenvolvimento.
ntão você tem um servidor de desenvolvimento que extrai a imagem do repositório privado,
ua imagem de aplicativo JavaScript e, em seguida, puxa o
B do qual seu aplicativo javascript depende de um hub docker.
agora você tem dois contêineres,
m seu contêiner personalizado e um Mogo disponível publicamente
ontêiner de banco de dados em execução no Dev Server e eles conversam entre si.
ocê precisa configurá-lo.
laro, eles conversam e se comunicam entre si e funcionam como um aplicativo.
ntão, agora, se um testador, por exemplo, ou outro desenvolvedor fizer login
m um servidor de desenvolvimento, eles poderão testar o aplicativo.
ortanto, este é um fluxo de trabalho simplificado como docker
uncionará em um processo de desenvolvimento da vida real.
ntão, em pouco tempo, nós realmente aprendemos todos os blocos de construção básicos,
s partes mais importantes do docker.
ntão você entende o que são imagens, como iniciar contêineres,
omo eles funcionam e como acessá-los,
também como realmente criar sua própria imagem docker e executá-la como um contêiner.
as se você quiser aprender mais sobre o docker e praticar suas habilidades ainda mais
omo como conectar seu aplicativo a um contêiner docker,
prenda sobre mais escuros, componha volumes mais escuros, etc.
ocê pode realmente assistir ao meu trabalho completo
utorial. E se você quiser aprender, faça
o contexto de desenvolvedores
realmente, realmente domine-o com coisas como registros privados usando doer
ara executar o Jenkins,
ntegre o docker em pipelines CS CD e
se-o com várias outras tecnologias, como o terraform
abilitar, etc.
ocê pode conferir nosso treinamento completo de devops
nde você aprende tudo isso e muito mais.