0 00:00:00.019 --> 00:00:00.050 m 1 00:00:00.159 --> 00:00:03.740 este vídeo, vou te ensinar todos os principais conceitos do docker, 2 00:00:03.750 --> 00:00:07.250 ncluindo obter sua primeira experiência prática com ele. 3 00:00:07.460 --> 00:00:09.819 ntão, se você precisar usar o docker no trabalho, 4 00:00:09.829 --> 00:00:14.300 u se você precisar aprender docker para aprimorar suas habilidades de engenharia e precisar obter 5 00:00:14.310 --> 00:00:17.250 omecei rápido e entendi todos os principais conceitos e 6 00:00:17.260 --> 00:00:19.659 prenda noções básicas de como trabalhar com o Docker, 7 00:00:19.870 --> 00:00:24.459 ste curso intensivo é exatamente ideal para você. Primeiro, começaremos por 8 00:00:24.620 --> 00:00:25.040 o que fazer 9 00:00:25.239 --> 00:00:27.479 por isso que foi criado basicamente, 10 00:00:27.489 --> 00:00:30.770 uais problemas ele resolve em engenharia e como 11 00:00:30.780 --> 00:00:33.529 juda no processo de desenvolvimento e implantação de software. 12 00:00:33.650 --> 00:00:35.560 ntão você entenderá exatamente por que fazer 13 00:00:35.759 --> 00:00:41.689 um grande negócio e é por isso que se tornou tão popular e amplamente utilizado em projetos de TI 14 00:00:42.119 --> 00:00:45.479 como parte de uma solução de virtualização, doer 15 00:00:45.709 --> 00:00:50.770 endo uma melhoria em relação às máquinas virtuais ou a próxima etapa de evolução, 16 00:00:50.779 --> 00:00:54.330 ambém explicarei a diferença entre máquina virtual e máquina mais escura, 17 00:00:54.340 --> 00:00:56.430 quais são as vantagens do 18 00:00:56.639 --> 00:00:58.099 azedor nesta comparação. 19 00:00:58.299 --> 00:01:00.810 epois de entendermos por que queremos usar do 20 00:01:01.029 --> 00:01:03.209 m primeiro lugar, vamos instalar 21 00:01:03.450 --> 00:01:07.209 aça e aprenda como realmente trabalhar com ele. Aprenderemos os conceitos de 22 00:01:07.349 --> 00:01:09.589 magens de fazedores, contêineres, mais escuras 23 00:01:09.690 --> 00:01:12.160 egistro, registros públicos e privados, 24 00:01:12.169 --> 00:01:18.580 executaremos contêineres localmente com base em algumas das imagens disponíveis no Docker 25 00:01:18.790 --> 00:01:21.010 egistro público chamado Docker Hub. 26 00:01:21.260 --> 00:01:24.480 ambém aprenderemos o conceito de criar suas próprias imagens 27 00:01:24.489 --> 00:01:28.430 aprendendo sobre o esquema de imagem do docker chamado Docker File. 28 00:01:28.589 --> 00:01:29.160 , claro, 29 00:01:29.169 --> 00:01:33.540 eremos tudo isso em ação e aprenderemos todos os comandos do docker para extrair imagens, 30 00:01:33.550 --> 00:01:37.199 xecutando contêineres, criando sua própria imagem docker, etc. 31 00:01:37.440 --> 00:01:42.139 ambém aprenderemos sobre o controle de versão de imagens com texto de imagem e, finalmente, 32 00:01:42.150 --> 00:01:44.720 epois de aprender a trabalhar com o Docker, 33 00:01:44.730 --> 00:01:48.580 ambém explicarei com animações gráficas como fazer 34 00:01:48.790 --> 00:01:53.370 e encaixa no panorama geral do processo de desenvolvimento e implantação de software. 35 00:01:53.379 --> 00:01:54.910 ntão, no final deste vídeo, 36 00:01:54.919 --> 00:01:59.250 ocê se sentirá muito mais confiante sobre seu conhecimento e compreensão em 37 00:01:59.449 --> 00:01:59.730 oador 38 00:01:59.919 --> 00:02:03.209 pode facilmente desenvolver esse conhecimento básico 39 00:02:03.325 --> 00:02:06.335 ara se tornar um usuário avançado do docker, se quiser. 40 00:02:06.575 --> 00:02:08.015 sob a descrição do vídeo, 41 00:02:08.026 --> 00:02:11.595 ou fornecer alguns recursos para aprender ainda mais sobre o Docker 42 00:02:11.766 --> 00:02:15.656 torne-se mais avançado nele. Mas antes de começarmos, 43 00:02:15.886 --> 00:02:18.035 arece que muitos de vocês estão assistindo ao 44 00:02:18.046 --> 00:02:21.095 ídeos em nosso canal ainda não estão inscritos, 45 00:02:21.106 --> 00:02:23.695 ntão, se você está obtendo algum valor do 46 00:02:23.705 --> 00:02:26.716 utoriais gratuitos que eu coloco regularmente neste canal, 47 00:02:26.725 --> 00:02:31.322 ão se esqueça de se inscrever em nenhum vídeo ou tutorial futuro. 48 00:02:31.332 --> 00:02:35.272 u também ficaria feliz em me conectar com você em minhas outras contas de mídia social, 49 00:02:35.281 --> 00:02:39.841 nde eu posto conteúdo de bastidores, atualizações semanais e assim por diante. 50 00:02:40.011 --> 00:02:42.602 ntão, espero me conectar a você lá também. 51 00:02:42.611 --> 00:02:47.462 em, estou super empolgada em ensinar tudo isso a vocês, então vamos começar. 52 00:02:47.761 --> 00:02:51.022 amos começar com a pergunta mais importante. O que é fazer? 53 00:02:51.261 --> 00:02:54.981 or que foi criado? E qual problema isso resolve? 54 00:02:58.199 --> 00:03:02.119 m palavras simples, o Docker é um software de virtualização 55 00:03:02.229 --> 00:03:05.899 sso torna o desenvolvimento e a implantação de aplicativos muito fácil, 56 00:03:06.240 --> 00:03:10.669 muito mais fácil em comparação com a forma como era feito antes da introdução do Docker. 57 00:03:10.899 --> 00:03:14.460 o Docker faz isso empacotando um aplicativo 58 00:03:14.630 --> 00:03:17.660 m algo chamado contêiner que tem 59 00:03:17.669 --> 00:03:20.169 udo o que o aplicativo precisa para ser executado, 60 00:03:20.360 --> 00:03:24.300 omo o próprio código do aplicativo, suas bibliotecas e dependências, 61 00:03:24.330 --> 00:03:27.820 mas também o tempo de execução e a configuração do ambiente. 62 00:03:28.259 --> 00:03:31.210 ortanto, o aplicativo e seu ambiente de execução são 63 00:03:31.220 --> 00:03:35.229 mbos empacotados em um único pacote docker, 64 00:03:35.240 --> 00:03:37.619 ue você pode compartilhar e distribuir facilmente. 65 00:03:38.029 --> 00:03:40.369 gora, por que isso é tão importante, 66 00:03:40.380 --> 00:03:42.570 como os aplicativos foram realmente desenvolvidos 67 00:03:42.580 --> 00:03:45.750 implantado antes da introdução do Docker. 68 00:03:46.100 --> 00:03:50.770 amos ver isso para entender os benefícios do Docker com mais clareza. 69 00:03:54.429 --> 00:03:57.940 ntão, como desenvolvemos aplicativos antes dos contêineres? 70 00:03:58.320 --> 00:04:01.610 ormalmente, quando você tem uma equipe de desenvolvedores trabalhando em algum aplicativo, 71 00:04:01.649 --> 00:04:04.190 les teriam que instalar todos os serviços. 72 00:04:04.199 --> 00:04:05.240 sse aplicativo 73 00:04:05.350 --> 00:04:07.929 epende de nossas necessidades, como serviços de banco de dados, 74 00:04:07.940 --> 00:04:10.960 t cetera diretamente em seu sistema operacional. 75 00:04:10.970 --> 00:04:11.419 erto. 76 00:04:11.550 --> 00:04:15.800 or exemplo, se você estiver desenvolvendo um aplicativo JavaScript e precisar de uma postagem 77 00:04:16.149 --> 00:04:17.369 anco de dados SQL, 78 00:04:17.640 --> 00:04:18.769 alvez você precise 79 00:04:19.070 --> 00:04:24.429 por trocar mosquitos por mensagens. Por exemplo, se você tivesse um aplicativo de microsserviço. 80 00:04:24.910 --> 00:04:28.920 gora você precisa de todos esses serviços localmente em seu ambiente de desenvolvimento 81 00:04:28.929 --> 00:04:32.269 ara que você possa realmente desenvolver e testar o aplicativo corretamente, 82 00:04:32.649 --> 00:04:38.420 cada desenvolvedor da equipe teria então que instalar todos esses serviços, 83 00:04:38.429 --> 00:04:42.890 onfigurá-los e executá-los em seu ambiente de desenvolvimento local 84 00:04:42.899 --> 00:04:46.160 dependendo do sistema operacional que eles estão usando, 85 00:04:46.279 --> 00:04:48.640 processo de instalação será diferente 86 00:04:48.970 --> 00:04:50.130 orque instalando uma postagem 87 00:04:50.470 --> 00:04:51.660 anco de dados QL em 88 00:04:51.779 --> 00:04:52.079 u 89 00:04:52.339 --> 00:04:56.339 sistema operacional é diferente de instalá-lo em uma máquina Windows, por exemplo, 90 00:04:56.619 --> 00:04:59.859 utra coisa com a instalação de serviços diretamente no 91 00:04:59.869 --> 00:05:03.049 m sistema operacional seguindo algum guia de instalação 92 00:05:03.149 --> 00:05:07.380 que geralmente têm várias etapas de instalação, 93 00:05:07.579 --> 00:05:09.700 , em seguida, configuração do serviço. 94 00:05:09.730 --> 00:05:13.109 ntão, com vários comandos que você precisa executar para instalar, 95 00:05:13.119 --> 00:05:15.010 onfigurar e configurar o serviço, 96 00:05:15.019 --> 00:05:20.429 s chances de algo dar errado e ocorrer um erro são, na verdade, muito altas. 97 00:05:20.440 --> 00:05:21.309 essa abordagem, 98 00:05:21.320 --> 00:05:25.535 u esse processo de configuração de um ambiente de desenvolvimento para um desenvolvedor, 99 00:05:25.545 --> 00:05:30.765 ode realmente ser muito entediante, dependendo da complexidade do seu aplicativo. 100 00:05:30.774 --> 00:05:34.695 or exemplo, se você tiver 10 serviços que seu aplicativo está usando, 101 00:05:34.954 --> 00:05:41.214 ntão você teria que fazer essa instalação 10 vezes para cada serviço. 102 00:05:41.225 --> 00:05:41.695 novamente, 103 00:05:41.704 --> 00:05:44.795 erá diferente dentro da equipe com base em 104 00:05:44.804 --> 00:05:47.195 ual sistema operacional cada desenvolvedor está usando. 105 00:05:47.464 --> 00:05:51.635 gora vamos ver como os contêineres resolvem alguns desses problemas 106 00:05:51.970 --> 00:05:52.940 om contêineres. 107 00:05:52.950 --> 00:05:55.040 ocê realmente não precisa instalar nenhum 108 00:05:55.049 --> 00:05:57.880 os serviços diretamente em seu sistema operacional, 109 00:05:58.019 --> 00:06:04.089 orque com o Docker você tem esse serviço empacotado em um ambiente isolado. 110 00:06:04.170 --> 00:06:04.940 ntão você tem 111 00:06:05.260 --> 00:06:10.170 ôsteres QL com uma versão específica empacotada com toda a sua configuração 112 00:06:10.380 --> 00:06:12.000 entro de um contêiner. 113 00:06:12.220 --> 00:06:16.950 ntão, como desenvolvedor, você não precisa procurar alguns binários 114 00:06:17.100 --> 00:06:19.750 ara baixar e instalar em sua máquina. 115 00:06:19.869 --> 00:06:22.630 as, em vez disso, basta ir em frente e iniciar esse serviço 116 00:06:22.640 --> 00:06:27.029 omo um contêiner docker usando um único comando docker, 117 00:06:27.049 --> 00:06:30.559 ue busca o pacote do contêiner da Internet 118 00:06:30.739 --> 00:06:32.750 inicia no seu computador 119 00:06:33.170 --> 00:06:35.299 o comando docker será o mesmo 120 00:06:35.309 --> 00:06:38.690 ndependentemente do sistema operacional em que você está, 121 00:06:38.809 --> 00:06:42.709 também será o mesmo, independentemente do serviço que você está instalando. 122 00:06:42.720 --> 00:06:46.149 ntão, se você tiver 10 serviços dos quais seu aplicativo JavaScript depende, 123 00:06:46.230 --> 00:06:52.079 ocê só precisaria executar 10 comandos docker para cada contêiner, e pronto. 124 00:06:52.380 --> 00:06:55.239 ntão, como você vê as padronizações do docker, 125 00:06:55.250 --> 00:06:58.269 processo de execução de qualquer serviço em seu desenvolvimento 126 00:06:58.279 --> 00:07:01.769 mbiente e torna todo o processo muito mais fácil. 127 00:07:01.790 --> 00:07:05.239 ntão, você pode basicamente se concentrar e trabalhar mais no desenvolvimento 128 00:07:05.250 --> 00:07:08.510 e tentar instalar e configurar serviços em sua máquina. 129 00:07:09.019 --> 00:07:13.269 isso obviamente faz com que você configure seu ambiente de desenvolvimento local 130 00:07:13.429 --> 00:07:16.070 uito mais rápido e fácil do que 131 00:07:16.299 --> 00:07:19.010 opção sem contêineres. 132 00:07:19.190 --> 00:07:21.089 lém disso, com o Docker, 133 00:07:21.100 --> 00:07:24.519 ocê pode até ter versões diferentes do mesmo aplicativo 134 00:07:24.570 --> 00:07:28.535 odando em seu ambiente local sem nenhum conflito, 135 00:07:28.545 --> 00:07:30.774 que é muito difícil de fazer 136 00:07:30.934 --> 00:07:33.904 e você estiver instalando o mesmo aplicativo com 137 00:07:33.915 --> 00:07:36.565 ersões diferentes diretamente no seu sistema operacional, 138 00:07:36.855 --> 00:07:41.975 , na verdade, veremos tudo isso em ação na parte de demonstração deste vídeo. 139 00:07:42.105 --> 00:07:46.605 gora vamos ver como os contêineres podem melhorar o processo de implantação de aplicativos 140 00:07:46.924 --> 00:07:50.994 ntes dos contêineres. Um processo de implantação tradicional seria assim 141 00:07:51.500 --> 00:07:55.910 equipe de desenvolvimento produziria um artefato de aplicativo ou um pacote 142 00:07:56.059 --> 00:07:59.410 unto com um conjunto de instruções de como realmente 143 00:07:59.420 --> 00:08:03.380 nstale e configure esse pacote de aplicativos no servidor. 144 00:08:03.390 --> 00:08:06.920 ntão você teria algo como um arquivo jar para o trabalho 145 00:08:06.929 --> 00:08:11.140 plicativo ou algo semelhante, dependendo da linguagem de programação usada. 146 00:08:11.529 --> 00:08:13.190 , além disso, é claro, 147 00:08:13.200 --> 00:08:15.700 ocê teria algum tipo de serviço de banco de dados 148 00:08:15.709 --> 00:08:18.339 u alguns outros serviços que seu aplicativo precisava, 149 00:08:18.489 --> 00:08:21.450 ambém com um conjunto de instruções de como configurar 150 00:08:21.600 --> 00:08:26.420 configure-o no servidor para que o aplicativo possa se conectar a ele e usá-lo. 151 00:08:26.690 --> 00:08:28.920 ntão, a equipe de desenvolvimento forneceria esse aplicativo 152 00:08:28.929 --> 00:08:32.950 rtefato ou pacote para a equipe de operações, 153 00:08:33.130 --> 00:08:34.489 a equipe de operações 154 00:08:34.690 --> 00:08:36.510 uidaria da instalação 155 00:08:36.710 --> 00:08:38.510 configurando o aplicativo 156 00:08:38.760 --> 00:08:41.659 todos os seus serviços de inquilino, como banco de dados, por exemplo. 157 00:08:41.669 --> 00:08:44.880 gora, o problema com esse tipo de abordagem é que, antes de tudo, 158 00:08:44.890 --> 00:08:47.880 ocê precisa configurar tudo e instalar tudo 159 00:08:48.049 --> 00:08:52.109 ovamente diretamente no sistema operacional, que mencionei 160 00:08:52.489 --> 00:08:55.659 o contexto de desenvolvimento que, na verdade, é muito propenso a erros, 161 00:08:55.669 --> 00:08:59.520 você pode ter vários problemas diferentes durante o processo de configuração. 162 00:08:59.539 --> 00:09:03.330 ocê também pode ter conflitos com versões de dependência em que 163 00:09:03.340 --> 00:09:06.000 ois serviços dependem da mesma biblioteca, 164 00:09:06.010 --> 00:09:08.070 or exemplo, mas com versões diferentes. 165 00:09:08.080 --> 00:09:09.239 quando isso acontece, 166 00:09:09.250 --> 00:09:12.659 sso tornará o processo de configuração muito mais difícil e complexo. 167 00:09:12.700 --> 00:09:16.530 ntão, basicamente, muitas coisas podem dar errado durante as operações 168 00:09:16.539 --> 00:09:21.780 equipe está instalando e configurando aplicativos e serviços em um servidor. 169 00:09:22.330 --> 00:09:25.830 utro problema que pode surgir desse tipo de processo é 170 00:09:25.960 --> 00:09:28.750 uando há uma falha de comunicação entre 171 00:09:28.820 --> 00:09:31.500 equipe de desenvolvimento e a equipe de operações. 172 00:09:31.880 --> 00:09:35.440 orque como tudo está em um guia textual, 173 00:09:35.450 --> 00:09:40.559 omo uma lista de instruções de como configurar e executar o aplicativo, 174 00:09:40.729 --> 00:09:42.489 u talvez algum tipo de lista de verificação, 175 00:09:42.500 --> 00:09:45.400 ode haver casos em que os desenvolvedores esqueçam 176 00:09:45.409 --> 00:09:47.989 ara mencionar algumas etapas importantes sobre a configuração. 177 00:09:48.000 --> 00:09:49.880 quando essa parte falha, 178 00:09:49.890 --> 00:09:55.565 equipe de operações precisa voltar aos desenvolvedores e pedir mais detalhes e sugestões. 179 00:09:55.684 --> 00:09:58.585 isso pode levar a alguma comunicação de ida e volta 180 00:09:58.594 --> 00:10:02.025 té que o aplicativo seja implantado com sucesso no servidor. 181 00:10:02.034 --> 00:10:05.494 ntão, basicamente, você tem essa sobrecarga de comunicação adicional onde 182 00:10:05.505 --> 00:10:09.094 s desenvolvedores precisam se comunicar em algum tipo de texto 183 00:10:09.275 --> 00:10:11.705 ráfico em qualquer formato, 184 00:10:11.815 --> 00:10:13.744 omo o aplicativo deve ser executado, 185 00:10:13.994 --> 00:10:17.275 , como mencionei, isso pode levar a problemas e falhas de comunicação 186 00:10:17.469 --> 00:10:21.820 om contêineres. Esse processo é, na verdade, simplificado porque 187 00:10:22.080 --> 00:10:25.549 gora os desenvolvedores criam um pacote de aplicativos 188 00:10:25.700 --> 00:10:28.309 sso não inclui apenas o código em si, 189 00:10:28.320 --> 00:10:33.109 mas também todas as dependências e a configuração do aplicativo. 190 00:10:33.119 --> 00:10:36.789 ntão, em vez de ter que escrever isso em algum formato e documento textual, 191 00:10:37.020 --> 00:10:41.270 les basicamente apenas empacotam tudo isso dentro do artefato do aplicativo. 192 00:10:41.280 --> 00:10:44.409 como já está encapsulado em um ambiente, 193 00:10:44.995 --> 00:10:47.645 s pessoas de operações não precisam configurar nenhuma 194 00:10:47.656 --> 00:10:49.755 essas coisas diretamente no servidor. 195 00:10:49.765 --> 00:10:53.125 ntão, isso torna todo o processo muito mais fácil. 196 00:10:53.226 --> 00:10:57.185 há menos espaço para problemas que mencionei anteriormente. 197 00:10:57.375 --> 00:11:00.846 ntão, a única coisa agora que a equipe de operações precisa fazer neste caso 198 00:11:00.856 --> 00:11:06.945 executar um comando docker que obtém o pacote de contêiner criado pelos desenvolvedores 199 00:11:07.096 --> 00:11:08.955 o executa no servidor. 200 00:11:09.135 --> 00:11:11.426 a mesma forma que a equipe de operações executará um serviço 201 00:11:11.771 --> 00:11:15.471 ue o aplicativo também precisa de contêineres docker, 202 00:11:15.502 --> 00:11:19.901 isso torna o processo de implantação muito mais fácil no lado da operação. 203 00:11:19.911 --> 00:11:20.661 gora, é claro, 204 00:11:20.671 --> 00:11:23.651 equipe de operações terá que instalar e configurar o docker run 205 00:11:23.661 --> 00:11:28.012 ez no servidor antes que eles possam executar contêineres. 206 00:11:28.091 --> 00:11:32.781 as isso é apenas um esforço de tempo para um serviço ou uma tecnologia. 207 00:11:32.901 --> 00:11:35.541 depois de instalar o docker runtime, 208 00:11:35.552 --> 00:11:38.382 ocê pode simplesmente executar contêineres docker nesse servidor 209 00:11:41.780 --> 00:11:46.770 gora. No começo, mencionei que o docker é uma ferramenta de virtualização 210 00:11:46.969 --> 00:11:52.109 ssim como uma máquina virtual, e as máquinas virtuais existem há muito tempo. 211 00:11:52.289 --> 00:11:55.229 ntão, por que o escuro se tornou tão amplamente adotado? 212 00:11:55.239 --> 00:11:58.950 uais são as vantagens que ele tem sobre as máquinas virtuais, 213 00:11:58.960 --> 00:12:00.799 qual é a diferença entre os dois? 214 00:12:01.070 --> 00:12:03.739 ara isso, precisamos ver um pouco de como fazer 215 00:12:03.960 --> 00:12:05.890 rabalha em um nível técnico. 216 00:12:06.099 --> 00:12:07.809 u também disse isso com o Docker, 217 00:12:07.820 --> 00:12:11.500 ocê não precisa instalar serviços diretamente no sistema operacional. 218 00:12:11.679 --> 00:12:12.270 as 219 00:12:12.520 --> 00:12:17.510 esse caso, como o Docker executa seus contêineres em um sistema operacional? 220 00:12:17.700 --> 00:12:19.679 gora, para entender tudo isso, 221 00:12:19.849 --> 00:12:23.909 amos primeiro ver como um sistema operacional é composto. 222 00:12:23.919 --> 00:12:26.130 s sistemas operacionais têm duas camadas principais. 223 00:12:26.309 --> 00:12:28.369 ocê tem o kernel do sistema operacional 224 00:12:28.559 --> 00:12:31.669 os aplicativos do sistema operacional. Camada 225 00:12:32.039 --> 00:12:37.989 o kernel é a parte que se comunica com os componentes de hardware, como CPU, 226 00:12:38.000 --> 00:12:39.969 rmazenamento de memória, etc. 227 00:12:39.979 --> 00:12:42.289 ntão, quando você tem uma máquina física 228 00:12:42.409 --> 00:12:45.909 om todos esses recursos e você instala o sistema operacional 229 00:12:46.159 --> 00:12:47.710 aquela máquina física, 230 00:12:47.859 --> 00:12:50.494 kernel do sistema operacional realmente será 231 00:12:50.505 --> 00:12:53.244 eja quem está falando com os componentes de hardware 232 00:12:53.354 --> 00:12:57.354 ara alocar recursos como armazenamento de memória da CPU, etc., 233 00:12:57.515 --> 00:13:01.255 ara os aplicativos, depois executados nesse sistema operacional. 234 00:13:01.364 --> 00:13:05.005 esses aplicativos fazem parte da camada de aplicativos, 235 00:13:05.114 --> 00:13:07.505 eles são executados em cima da camada do kernel. 236 00:13:07.840 --> 00:13:12.049 ntão, o kernel é uma espécie de intermediário entre os aplicativos que você vê 237 00:13:12.169 --> 00:13:14.409 uando você interage com seu computador 238 00:13:14.520 --> 00:13:17.770 o hardware subjacente do seu computador. 239 00:13:17.950 --> 00:13:23.950 agora, como o Docker e a Máquina Virtual são ferramentas de virtualização, 240 00:13:23.960 --> 00:13:25.340 questão é 241 00:13:25.500 --> 00:13:30.549 ue parte do sistema operacional eles realmente virtualizam? 242 00:13:30.630 --> 00:13:32.289 é aí que a principal diferença 243 00:13:32.299 --> 00:13:34.765 ntre docker e máquinas virtuais, na verdade, como 244 00:13:34.955 --> 00:13:38.005 ara que o docker virtualize a camada de aplicativos. 245 00:13:38.244 --> 00:13:40.465 sso significa que quando você executa um contêiner docker, 246 00:13:40.474 --> 00:13:43.934 na verdade, contém a camada de aplicativos 247 00:13:44.094 --> 00:13:47.515 o sistema operacional e alguns outros aplicativos 248 00:13:47.525 --> 00:13:49.674 nstalado na parte superior dessa camada de aplicativo. 249 00:13:49.924 --> 00:13:52.815 ode ser um tempo de execução de java ou python ou qualquer outra coisa, 250 00:13:53.104 --> 00:13:58.625 usa o kernel do host porque não tem seu próprio kernel. 251 00:13:58.929 --> 00:14:01.090 máquina virtual, por outro lado, 252 00:14:01.109 --> 00:14:04.500 em a camada de aplicativos e seu próprio kernel. 253 00:14:04.510 --> 00:14:07.919 ntão, ele virtualiza o sistema operacional completo, 254 00:14:07.929 --> 00:14:12.750 o que significa que quando você baixa uma imagem de máquina virtual em seu host. 255 00:14:13.010 --> 00:14:17.325 le não usa o kernel hosts. Na verdade, ele se inicializa sozinho. 256 00:14:17.544 --> 00:14:21.715 ntão, o que realmente significa essa diferença entre máquina virtual e mais escura? 257 00:14:21.724 --> 00:14:26.875 m primeiro lugar, o tamanho dos pacotes ou imagens mais escuros é muito menor 258 00:14:27.015 --> 00:14:30.674 orque eles só precisam implementar uma camada 259 00:14:30.895 --> 00:14:32.215 o sistema operacional 260 00:14:32.455 --> 00:14:35.224 ntão imagens mais escuras geralmente têm alguns megabytes. 261 00:14:35.234 --> 00:14:39.974 magens grandes de máquinas virtuais, por outro lado, podem ter alguns gigabytes. 262 00:14:40.294 --> 00:14:44.135 sso significa que, ao trabalhar com o Docker, você realmente economiza muito espaço em disco. 263 00:14:44.580 --> 00:14:49.729 ocê pode executar e iniciar contêineres docker muito mais rápido do que máquinas virtuais, 264 00:14:49.739 --> 00:14:53.580 orque a máquina virtual precisa criar um kernel toda vez que é iniciada, 265 00:14:53.770 --> 00:14:56.169 nquanto o contêiner docker apenas é reutilizado 266 00:14:56.340 --> 00:14:59.669 kernel do host e ele apenas inicia a camada de aplicativo em cima dele. 267 00:14:59.679 --> 00:15:02.979 ortanto, embora a máquina virtual precise de alguns minutos para inicializar, 268 00:15:02.989 --> 00:15:05.409 ontêineres docker geralmente iniciam em um 269 00:15:05.510 --> 00:15:06.510 lguns milissegundos. 270 00:15:06.780 --> 00:15:08.960 terceira diferença é a compatibilidade, 271 00:15:09.010 --> 00:15:14.599 ara que você possa executar a imagem virtual de qualquer sistema operacional em qualquer outro 272 00:15:14.739 --> 00:15:16.590 ost do sistema operacional. 273 00:15:16.599 --> 00:15:20.729 ntão, em uma máquina Windows, você pode executar uma máquina virtual Linux, por exemplo. 274 00:15:21.080 --> 00:15:26.359 as você não pode fazer isso com o Docker, pelo menos não diretamente, então qual é o problema aqui? 275 00:15:26.650 --> 00:15:30.719 igamos que você tenha um sistema operacional Windows com Windows Kernel 276 00:15:30.869 --> 00:15:34.309 sua camada de aplicativo, e você deseja executar um Linux 277 00:15:34.460 --> 00:15:40.169 om base na imagem do docker diretamente nesse host Windows. O problema aqui é que o Linux 278 00:15:40.299 --> 00:15:46.210 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 279 00:15:46.429 --> 00:15:49.919 orque você pode executar uma camada de aplicativo Linux em um Windows Kern. 280 00:15:50.481 --> 00:15:52.981 ntão, isso é um tipo de problema com o Docker. 281 00:15:53.171 --> 00:15:54.012 o entanto, 282 00:15:54.252 --> 00:15:56.831 uando você está desenvolvendo no Windows ou Me 283 00:15:57.021 --> 00:15:57.461 S, 284 00:15:57.752 --> 00:16:03.822 ocê deseja executar vários serviços porque a maioria dos contêineres usa os serviços populares 285 00:16:03.952 --> 00:16:05.841 ão, na verdade, baseados em Linux. 286 00:16:05.961 --> 00:16:11.651 ambém é interessante saber que o Docker foi originalmente escrito e construído para Linux 287 00:16:12.231 --> 00:16:13.142 as depois 288 00:16:13.533 --> 00:16:16.494 ealmente fez uma atualização e desenvolveu o que é 289 00:16:16.504 --> 00:16:20.903 hamado de desktop Docker para Windows e Mac, 290 00:16:20.914 --> 00:16:23.174 que tornou isso possível 291 00:16:23.443 --> 00:16:29.294 ara executar contêineres baseados em Linux também em computadores Windows e Mac. 292 00:16:29.304 --> 00:16:34.304 ntão, a maneira como funciona é que uma área de trabalho mais escura usa uma camada de hipervisor 293 00:16:34.453 --> 00:16:36.504 om um Linux leve 294 00:16:36.736 --> 00:16:37.945 istribuição em cima dela 295 00:16:38.185 --> 00:16:40.875 ara fornecer o kernel Linux necessário 296 00:16:41.185 --> 00:16:43.546 , desta forma, faça com que o Linux seja executado 297 00:16:43.695 --> 00:16:48.726 ontêineres baseados são possíveis nos sistemas operacionais Windows e Mac. 298 00:16:48.736 --> 00:16:49.486 , a propósito, 299 00:16:49.495 --> 00:16:53.625 e você quiser entender mais sobre virtualização e como as máquinas virtuais funcionam. 300 00:16:53.635 --> 00:16:55.835 o que é um hipervisor, por exemplo. 301 00:16:55.846 --> 00:16:59.616 ocê pode assistir ao meu outro vídeo, onde eu explico tudo isso em detalhes. 302 00:17:00.309 --> 00:17:02.840 ntão, isso significa para o desenvolvimento local. 303 00:17:02.849 --> 00:17:07.430 omo engenheiro, você instalaria uma área de trabalho mais escura em seu Windows ou Mac 304 00:17:07.680 --> 00:17:08.640 omputador com sistema operacional 305 00:17:08.819 --> 00:17:09.800 ara executar o Linux 306 00:17:09.920 --> 00:17:15.160 magens baseadas, que, como mencionei a maioria dos bancos de dados de serviços populares, 307 00:17:15.170 --> 00:17:18.219 tc. são principalmente baseados em Linux. 308 00:17:18.229 --> 00:17:19.560 ntão você precisaria disso, 309 00:17:19.939 --> 00:17:22.050 isso nos leva ao 310 00:17:22.199 --> 00:17:23.800 nstalação de 311 00:17:24.040 --> 00:17:24.329 azedor. 312 00:17:24.780 --> 00:17:27.680 ara fazer algumas demonstrações e aprender docker na prática, 313 00:17:27.689 --> 00:17:29.119 ocê primeiro precisaria instalá-lo. 314 00:17:29.560 --> 00:17:30.910 ntão, para instalar o Docker, 315 00:17:30.920 --> 00:17:34.390 asta acessar a página oficial para obter o guia de instalação 316 00:17:34.510 --> 00:17:35.810 siga as etapas. 317 00:17:35.819 --> 00:17:40.650 omo o Docker é atualizado o tempo todo, a instalação muda. 318 00:17:40.660 --> 00:17:43.050 ntão, em vez de eu apenas dar alguns comentários que 319 00:17:43.060 --> 00:17:46.290 ode funcionar agora, mas será atualizado no futuro, 320 00:17:46.300 --> 00:17:48.579 ocê deve sempre consultar as últimas 321 00:17:48.589 --> 00:17:52.150 ocumentação para o guia de instalação de qualquer ferramenta. 322 00:17:52.619 --> 00:17:55.869 ntão, se procurarmos o Docker Desktop 323 00:17:56.229 --> 00:17:57.310 nstalação 324 00:17:58.510 --> 00:18:02.859 clique em um desses links, como instalar no Windows, então isso é 325 00:18:03.050 --> 00:18:04.489 desktop Docker, 326 00:18:04.760 --> 00:18:06.099 ferramenta que mencionei 327 00:18:06.260 --> 00:18:10.219 esolveu esse problema de executar imagens baseadas em Linux em um sistema operacional diferente, 328 00:18:10.229 --> 00:18:13.130 mas na verdade inclui muitas outras coisas quando você o instala. 329 00:18:13.140 --> 00:18:16.680 ntão, o que você está exatamente instalando com o Docker Desktop? 330 00:18:17.380 --> 00:18:19.689 você vê exatamente o que está incluído lá. 331 00:18:19.880 --> 00:18:23.239 ntão, basicamente, obtenha o próprio serviço Docker. É chamado Docker 332 00:18:23.349 --> 00:18:23.790 otor. 333 00:18:24.069 --> 00:18:29.680 ssa é a parte principal do docker que torna essa virtualização possível. 334 00:18:29.689 --> 00:18:32.630 as quando temos um serviço, precisamos nos comunicar com ele, certo, 335 00:18:32.640 --> 00:18:33.800 ntão, precisamos de um cliente 336 00:18:33.939 --> 00:18:35.890 ue podem falar com esse serviço. 337 00:18:35.900 --> 00:18:40.969 ntão, o Docker Desktop realmente vem com um cliente de interface de linha de comando, 338 00:18:41.250 --> 00:18:44.959 o que significa que podemos executar comandos mais escuros em uma linha de comando 339 00:18:45.140 --> 00:18:51.239 ara iniciar contêineres para criar contêineres, começar a pará-los, removê-los etc., 340 00:18:51.349 --> 00:18:57.760 faça todos os tipos de coisas. E também vem com um cliente de interface gráfica de usuário. 341 00:18:57.900 --> 00:19:00.640 ntão, se você não se sentir confortável trabalhando com a linha de comando, 342 00:19:00.650 --> 00:19:06.160 ocê pode realmente usar a interface gráfica do usuário, onde você pode fazer todas essas coisas. 343 00:19:06.189 --> 00:19:08.770 as em uma interface de usuário agradável e fácil de usar, 344 00:19:09.130 --> 00:19:11.619 ntão, você obtém todas essas coisas ao instalar o Docker desktop, 345 00:19:11.630 --> 00:19:14.260 asicamente tudo o que você precisa para começar a usar o Docker 346 00:19:14.630 --> 00:19:17.920 , claro, dependendo do sistema operacional em que você está, 347 00:19:17.930 --> 00:19:20.489 ocê vai escolher aquele Mac Windows ou Linux. 348 00:19:20.500 --> 00:19:26.439 ntão, vamos clicar em um desses e basicamente seguir as instruções. 349 00:19:26.449 --> 00:19:28.800 ocê tem alguns requisitos de sistema. Você tem que verificar 350 00:19:28.969 --> 00:19:32.119 oisas como a versão do seu Mac OS, 351 00:19:32.880 --> 00:19:34.869 uantos recursos você vai precisar. 352 00:19:35.050 --> 00:19:39.949 você também tem as opções para Mac com Intel ou Mac 353 00:19:39.959 --> 00:19:44.339 om Apple Silicon para que você possa alternar entre eles e, basicamente, 354 00:19:44.349 --> 00:19:49.449 asta escolher o guia que corresponde às especificações do seu computador. 355 00:19:49.500 --> 00:19:52.239 uma vez que você tenha isso, verifique os requisitos do sistema, 356 00:19:52.439 --> 00:19:55.334 á em frente e clique em um desses. 357 00:19:55.474 --> 00:19:57.324 o meu caso, eu tenho Mac com Intel 358 00:19:57.525 --> 00:19:59.555 hip, então eu clicaria neste, 359 00:19:59.564 --> 00:20:02.655 esse é, na verdade, o instalador de desktop do Docker. 360 00:20:02.714 --> 00:20:05.994 ntão, se eu clicar, ele vai baixar este DMG 361 00:20:06.094 --> 00:20:09.635 magem. E depois de baixado, você basicamente segue 362 00:20:09.785 --> 00:20:11.305 s etapas descritas aqui, 363 00:20:11.564 --> 00:20:14.204 erto? Você clica duas vezes nele, abre o aplicativo 364 00:20:14.564 --> 00:20:15.224 assim por diante. 365 00:20:16.260 --> 00:20:20.099 o mesmo para o Windows. Se for sua janela, você basicamente clica nesta 366 00:20:20.250 --> 00:20:22.869 baixe o Docker desktop para Windows 367 00:20:22.979 --> 00:20:25.880 certifique-se de verificar os requisitos do sistema 368 00:20:26.040 --> 00:20:28.000 meio que prepare tudo 369 00:20:28.300 --> 00:20:30.170 ocê precisa para iniciar o Docker. 370 00:20:30.459 --> 00:20:35.750 eralmente para as versões mais recentes do Windows, Mac ou qualquer sistema operacional. 371 00:20:35.859 --> 00:20:39.800 eve ser muito fácil e simples instalar o Docker. 372 00:20:40.079 --> 00:20:41.810 ntão vá em frente e faça isso. 373 00:20:42.030 --> 00:20:43.900 epois de concluir a instalação, 374 00:20:44.260 --> 00:20:48.180 ocê pode simplesmente iniciar o serviço pesquisando no Docker. 375 00:20:48.439 --> 00:20:49.579 se eu clicar nele, 376 00:20:49.849 --> 00:20:51.420 ocê verá aqui 377 00:20:51.660 --> 00:20:53.030 ue na verdade é 378 00:20:53.500 --> 00:20:56.640 niciando. Serviço Docker para o motor Docker 379 00:20:58.359 --> 00:20:59.540 aí está, 380 00:21:00.020 --> 00:21:00.810 stá funcionando, 381 00:21:01.130 --> 00:21:05.000 esta visão aqui que você está vendo esta janela é 382 00:21:05.010 --> 00:21:08.439 a verdade, a interface gráfica do usuário do Docker que mencionei. 383 00:21:08.599 --> 00:21:13.079 ntão, esse é o cliente que você pode usar para interagir com o mecanismo docker. 384 00:21:13.199 --> 00:21:17.500 ntão você tem uma lista de contêineres em execução atualmente, então não há nenhuma lista, 385 00:21:17.770 --> 00:21:21.689 mesmo com imagens. Se eu mudar para imagens, limpei meu ambiente. 386 00:21:21.699 --> 00:21:25.270 ntão, estou começando do zero com o estado vazio, assim como você. 387 00:21:25.660 --> 00:21:28.790 ntão, estamos prontos para começar a usar mais escuro. 388 00:21:28.890 --> 00:21:32.229 as primeiro você pode estar se perguntando o que são imagens, 389 00:21:32.239 --> 00:21:34.189 é isso que vou explicar a seguir, 390 00:21:34.199 --> 00:21:36.589 orque é um conceito muito importante no escuro 391 00:21:40.400 --> 00:21:45.640 gora significa que o Docker permite empacotar o aplicativo com seu ambiente 392 00:21:45.650 --> 00:21:50.569 onfiguração neste pacote que você pode compartilhar e distribuir facilmente. 393 00:21:50.910 --> 00:21:53.050 ntão, assim como um arquivo de artefato de aplicativo, 394 00:21:53.060 --> 00:21:56.790 omo quando criamos um arquivo zip ou tar ou um arquivo jar, 395 00:21:56.800 --> 00:22:00.800 ue você pode enviar para um armazenamento de artefatos e depois 396 00:22:00.810 --> 00:22:03.670 aixe no servidor ou localmente sempre que precisar. 397 00:22:03.859 --> 00:22:09.880 esse pacote ou artefato que produzimos com o Docker é chamado de imagem do docker. 398 00:22:09.890 --> 00:22:12.500 ntão, é basicamente um artefato de aplicativo 399 00:22:12.790 --> 00:22:15.439 mas diferente do arquivo Jar 400 00:22:15.569 --> 00:22:17.619 u de outros artefatos de aplicativos. 401 00:22:17.839 --> 00:22:21.390 le não tem apenas o código do aplicativo compilado, 402 00:22:21.469 --> 00:22:24.119 mas também tem informações sobre 403 00:22:24.219 --> 00:22:26.079 configuração do ambiente. 404 00:22:26.270 --> 00:22:29.719 em a camada de aplicativo do sistema operacional, como mencionei, 405 00:22:29.729 --> 00:22:34.900 ais as ferramentas como node N, PM ou Java Run Time 406 00:22:35.045 --> 00:22:35.625 nstalado nisso, 407 00:22:35.635 --> 00:22:39.135 ependendo da linguagem de programação em que seu aplicativo foi escrito. 408 00:22:39.344 --> 00:22:42.364 or exemplo, se você tiver um aplicativo JavaScript, 409 00:22:42.545 --> 00:22:46.935 ocê precisaria de nós Js e N PM para executar seu aplicativo corretamente, 410 00:22:47.285 --> 00:22:52.625 ntão, na imagem mais escura, você já teria o node e o N PM instalados. 411 00:22:52.824 --> 00:22:57.234 ocê também pode adicionar variáveis de ambiente de que seu aplicativo precisa. Por exemplo, 412 00:22:57.439 --> 00:22:58.939 ocê pode criar diretórios. 413 00:22:58.949 --> 00:23:02.300 ocê pode criar arquivos ou qualquer outro ambiente 414 00:23:02.310 --> 00:23:05.699 onfigure tudo o que você precisa em seu aplicativo. 415 00:23:05.849 --> 00:23:10.250 ntão, todas essas informações são empacotadas na imagem do docker, 416 00:23:10.260 --> 00:23:12.229 unto com o código do aplicativo, 417 00:23:12.550 --> 00:23:15.810 essa é a grande vantagem do Docker sobre a qual falamos. 418 00:23:15.829 --> 00:23:18.719 , como eu disse, o pacote é chamado de imagem. 419 00:23:19.219 --> 00:23:22.410 ntão, se isso é uma imagem, o que é um contêiner, então? 420 00:23:22.670 --> 00:23:26.300 em, precisamos iniciar esse pacote de aplicativos em algum lugar, certo? 421 00:23:26.420 --> 00:23:30.329 ntão, quando pegamos esse pacote ou imagem e baixamos 422 00:23:30.339 --> 00:23:34.140 para um servidor ou laptop de seu computador local, 423 00:23:34.150 --> 00:23:36.089 ueremos executá-lo no computador. 424 00:23:36.150 --> 00:23:38.050 aplicativo precisa realmente ser executado. 425 00:23:38.619 --> 00:23:41.920 quando executamos essa imagem em um sistema operacional 426 00:23:42.099 --> 00:23:45.209 o aplicativo interno começa no pré 427 00:23:45.219 --> 00:23:48.729 mbiente configurado que nos fornece um contêiner. 428 00:23:48.959 --> 00:23:53.250 ortanto, uma instância em execução de uma imagem é um contêiner. 429 00:23:53.260 --> 00:23:58.349 ortanto, um contêiner é basicamente uma instância em execução de uma imagem e 430 00:23:58.359 --> 00:24:02.969 a mesma imagem de uma imagem, você pode executar vários contêineres, 431 00:24:02.979 --> 00:24:06.030 ue é um caso de uso legítimo se você precisar executar 432 00:24:06.180 --> 00:24:10.489 árias instâncias do mesmo aplicativo para aumentar o desempenho, 433 00:24:10.500 --> 00:24:13.415 or exemplo, e isso é exatamente o que estávamos vendo aqui. 434 00:24:13.425 --> 00:24:18.135 ntão, temos as imagens. Esses são os pacotes de aplicativos, basicamente, 435 00:24:18.275 --> 00:24:20.234 , a partir dessas imagens, podemos começar 436 00:24:20.244 --> 00:24:23.694 ontêineres que veremos listados aqui, 437 00:24:23.704 --> 00:24:26.974 ue estão executando instâncias dessas imagens. 438 00:24:27.244 --> 00:24:28.645 eu também disse que 439 00:24:28.834 --> 00:24:31.535 lém da interface gráfica do usuário, 440 00:24:31.545 --> 00:24:35.864 btemos um cliente de interface de linha de comando do cliente que pode conversar com do 441 00:24:36.204 --> 00:24:36.444 otor. 442 00:24:36.939 --> 00:24:37.650 443 00:24:37.819 --> 00:24:40.130 esde que instalamos o Docker Desktop, 444 00:24:40.140 --> 00:24:43.670 evemos ter essa CLI do docker também disponível localmente, 445 00:24:43.680 --> 00:24:47.910 o que significa que se você abrir seu terminal, poderá executar comandos docker 446 00:24:48.189 --> 00:24:50.619 documentos. Nós podemos fazer qualquer coisa. 447 00:24:50.630 --> 00:24:54.594 or exemplo, podemos verificar quais imagens temos disponíveis localmente. 448 00:24:54.604 --> 00:25:00.035 ntão, se eu fizer imagens do docker, isso me dará uma lista de imagens que eu tenho localmente, 449 00:25:00.064 --> 00:25:04.484 ue, neste caso, não tenho nenhum que vimos na interface gráfica do usuário. 450 00:25:04.494 --> 00:25:08.405 também posso verificar os contêineres usando um docker de comando, 451 00:25:09.280 --> 00:25:10.390 S 452 00:25:11.640 --> 00:25:12.250 novamente, 453 00:25:12.479 --> 00:25:14.969 inda não tenho nenhum contêiner em execução. 454 00:25:15.260 --> 00:25:18.020 gora, antes de continuar, quero dar uma mensagem para a Net 455 00:25:18.150 --> 00:25:19.000 opper. Os mais novos 456 00:25:19.349 --> 00:25:21.109 lataforma de nuvem, chamada 457 00:25:21.489 --> 00:25:21.589 os governadores 458 00:25:21.689 --> 00:25:27.890 perações de aplicativos oferecem uma maneira fácil para as equipes de DevOps fornecerem, gerenciarem 459 00:25:27.900 --> 00:25:32.699 tualize, conecte, proteja e monitore aplicativos em um ou mais kits 460 00:25:33.030 --> 00:25:33.750 lusters. 461 00:25:34.160 --> 00:25:38.349 om esta plataforma, eles basicamente criam essa camada de rede virtual 462 00:25:38.459 --> 00:25:40.739 ue conecta vários ambientes. 463 00:25:40.839 --> 00:25:44.510 or exemplo, se você tiver várias plataformas de nuvem e várias 464 00:25:44.880 --> 00:25:48.170 lusters, até mesmo o seu próprio data center local, 465 00:25:48.180 --> 00:25:50.050 nde seu aplicativo é implantado, 466 00:25:50.239 --> 00:25:55.795 ocê pode conectar tudo isso em uma rede virtual para poder implantar e operar 467 00:25:55.805 --> 00:25:58.775 s cargas de trabalho da sua comunidade como se estivessem em 468 00:25:58.785 --> 00:26:02.584 m cluster ou um ambiente de infraestrutura e o get 469 00:26:02.704 --> 00:26:06.594 abordagem centrada no topo que eles usam oferece a visibilidade de saber quem 470 00:26:06.604 --> 00:26:10.375 ez o que e quando para sua infraestrutura e aplicativo. 471 00:26:10.599 --> 00:26:14.209 ortanto, com o Net Hopper, as empresas podem automatizar suas operações. 472 00:26:14.219 --> 00:26:17.010 em vez de construir uma plataforma própria, 473 00:26:17.020 --> 00:26:20.550 quipes de devops podem se concentrar no que é mais importante, 474 00:26:20.560 --> 00:26:24.109 que está lançando mais recursos de aplicativos com mais rapidez. 475 00:26:24.349 --> 00:26:29.300 ntão, dê uma olhada. Você pode realmente se inscrever em uma conta gratuita e dar uma volta nela 476 00:26:29.500 --> 00:26:32.569 ara ver se o Net Hopper é a solução certa para você. 477 00:26:36.239 --> 00:26:39.729 gora está claro que obtemos contêineres executando imagens, 478 00:26:40.069 --> 00:26:43.709 as como obtemos imagens para executar contêineres? 479 00:26:44.189 --> 00:26:45.489 igamos que queremos correr 480 00:26:46.160 --> 00:26:47.739 m contêiner de banco de dados ou 481 00:26:47.989 --> 00:26:52.449 u algum contêiner de serviço de coletor de fechaduras. Como obtemos suas imagens mais escuras 482 00:26:52.689 --> 00:26:55.829 em, é aí que entram os registros do docker. 483 00:26:56.150 --> 00:27:02.949 ortanto, há imagens docker prontas disponíveis online em um armazenamento ou registro de imagens. 484 00:27:03.000 --> 00:27:09.050 ntão, basicamente, este é um armazenamento específico para artefatos de imagens mais escuras, 485 00:27:09.430 --> 00:27:12.209 , geralmente, as empresas que desenvolvem esses serviços 486 00:27:12.459 --> 00:27:13.209 omo pronto 487 00:27:13.829 --> 00:27:16.349 etc., assim como o Docker. 488 00:27:16.359 --> 00:27:21.939 própria comunidade criará o que é chamado de imagens oficiais. Então você conhece esse mongo 489 00:27:22.319 --> 00:27:24.420 imagem foi realmente criada por 490 00:27:24.959 --> 00:27:27.060 m si ou na comunidade Docker. 491 00:27:27.130 --> 00:27:31.689 ntão, você sabe, é uma imagem oficial verificada do próprio Docker. 492 00:27:31.699 --> 00:27:36.160 o próprio Docker oferece o maior registro do docker 493 00:27:36.270 --> 00:27:37.930 hamado Docker Hub, 494 00:27:37.939 --> 00:27:42.119 nde você pode encontrar qualquer uma dessas imagens oficiais e muitas outras 495 00:27:42.130 --> 00:27:44.849 magens de diferentes empresas ou indivíduos 496 00:27:44.859 --> 00:27:48.410 esenvolvedores criaram e enviaram lá. 497 00:27:48.959 --> 00:27:51.089 ntão, se procurarmos o dark Hub 498 00:27:51.489 --> 00:27:55.930 qui, você vê a biblioteca Doctor Hub Container Image. 499 00:27:57.449 --> 00:27:58.089 500 00:27:58.319 --> 00:27:59.530 assim que parece. 501 00:27:59.540 --> 00:28:02.189 você realmente não precisa se registrar ou assinar 502 00:28:02.199 --> 00:28:05.239 cesse o Dock Hub para encontrar essas imagens oficiais. 503 00:28:05.250 --> 00:28:10.250 ortanto, qualquer pessoa pode acessar este site e basicamente navegar pelas imagens do contêiner. 504 00:28:10.290 --> 00:28:12.380 aqui na barra de pesquisa, 505 00:28:12.500 --> 00:28:16.339 ocê pode digitar qualquer serviço que estiver procurando. Por exemplo, pronto 506 00:28:16.569 --> 00:28:17.560 ue mencionei. 507 00:28:17.689 --> 00:28:19.479 se eu apertar enter, 508 00:28:19.640 --> 00:28:21.180 ocê basicamente verá um 509 00:28:21.530 --> 00:28:27.430 ista de várias imagens relacionadas prontas, bem como o próprio serviço pronto 510 00:28:27.829 --> 00:28:29.520 omo uma imagem mais escura. 511 00:28:29.530 --> 00:28:34.359 aqui você tem esse lote ou rótulo que diz uma imagem oficial mais escura, por exemplo, 512 00:28:34.369 --> 00:28:36.959 ara a imagem mais vermelha que vamos escolher aqui, 513 00:28:36.969 --> 00:28:40.319 ocê vê que ele é realmente mantido pela comunidade Docker. 514 00:28:40.329 --> 00:28:44.780 forma como funciona é que o Docker tem uma equipe dedicada que é responsável 515 00:28:44.885 --> 00:28:50.344 ara revisar e publicar todo o conteúdo nas imagens oficiais mais escuras. 516 00:28:50.354 --> 00:28:54.704 essa equipe trabalha em colaboração com os criadores de tecnologia, 517 00:28:54.714 --> 00:28:57.954 u mantenedores, bem como especialistas em segurança 518 00:28:58.064 --> 00:29:01.864 ara criar e gerenciar essas imagens oficiais mais escuras. 519 00:29:02.329 --> 00:29:05.890 essa forma, é garantido que não apenas o 520 00:29:05.900 --> 00:29:09.959 riadores de tecnologia estão envolvidos na criação oficial da imagem, 521 00:29:10.000 --> 00:29:14.099 mas também toda a segurança mais obscura, melhores práticas e produção. 522 00:29:14.109 --> 00:29:17.959 s melhores práticas também são consideradas na criação de imagens, 523 00:29:18.189 --> 00:29:22.890 essa é basicamente a página de descrição com todas as 524 00:29:22.900 --> 00:29:25.849 nformações sobre como usar essa imagem mais escura, 525 00:29:25.859 --> 00:29:27.500 que inclui, etc. 526 00:29:28.199 --> 00:29:32.989 , novamente, como eu disse, o Docker Hub é o maior registro de imagens do docker, 527 00:29:33.000 --> 00:29:36.319 ara que você possa encontrar imagens para qualquer serviço que você 528 00:29:36.459 --> 00:29:38.689 eseja usar no Docker Hub. 529 00:29:38.910 --> 00:29:39.859 gora, é claro, 530 00:29:39.869 --> 00:29:45.560 udanças tecnológicas e há atualizações nos aplicativos dessas tecnologias. 531 00:29:45.589 --> 00:29:47.910 ntão você tem uma nova versão do vermelho 532 00:29:48.040 --> 00:29:49.270 u manga para B, 533 00:29:49.660 --> 00:29:51.380 , nesse caso, um novo 534 00:29:51.650 --> 00:29:53.390 imagem do executor será criada, 535 00:29:53.760 --> 00:29:56.869 ntão as imagens também são versões, 536 00:29:57.199 --> 00:29:59.640 são chamadas de tags de imagem. 537 00:29:59.660 --> 00:30:03.709 na página de cada imagem você realmente 538 00:30:03.719 --> 00:30:08.069 em a lista de versões ou tags dessa imagem 539 00:30:08.250 --> 00:30:09.829 istado aqui. 540 00:30:09.939 --> 00:30:11.000 ntão, isso é para 541 00:30:11.849 --> 00:30:14.079 se eu pesquisar um Post, 542 00:30:14.430 --> 00:30:15.339 or exemplo, 543 00:30:19.199 --> 00:30:21.890 ocê verá diferentes tags de imagem para 544 00:30:22.319 --> 00:30:24.089 magens de resolução também estão listadas aqui. 545 00:30:24.630 --> 00:30:29.430 ntão, quando você está usando uma tecnologia e precisa de uma versão específica, você pode escolher 546 00:30:29.650 --> 00:30:33.189 ma imagem mais escura que tem essa versão da tecnologia. 547 00:30:33.290 --> 00:30:37.660 há uma tag especial que todas as imagens têm 548 00:30:37.790 --> 00:30:41.890 igaram pela última vez. Então, aqui você vê esta última tag 549 00:30:42.280 --> 00:30:44.469 u aqui também no texto recente. 550 00:30:44.819 --> 00:30:50.750 ortanto, a tag latest é basicamente a última, a última imagem que foi construída. 551 00:30:50.760 --> 00:30:54.589 ntão, se você não especificar ou escolher uma versão explicitamente, 552 00:30:54.729 --> 00:30:58.089 ocê basicamente obtém a imagem mais recente do hub do Docker. 553 00:30:58.099 --> 00:31:00.719 gora vimos o que são imagens 554 00:31:00.930 --> 00:31:03.030 onde você pode obtê-los. 555 00:31:03.050 --> 00:31:04.229 ntão agora a questão é, 556 00:31:04.239 --> 00:31:09.113 omo podemos realmente obter a imagem do Docker Hub e baixá-la 557 00:31:09.123 --> 00:31:13.083 ocalmente em nosso computador para que possamos iniciar um contêiner a partir dessa imagem. 558 00:31:13.192 --> 00:31:19.912 ntão, primeiro localizamos a imagem que queremos executar como um contêiner localmente para nossa demonstração. 559 00:31:19.922 --> 00:31:21.213 ou usar um motor 560 00:31:21.453 --> 00:31:24.253 magem. Então vá em frente e procure por Engine, 561 00:31:24.883 --> 00:31:28.625 ue é basicamente um servidor Web simples e tem uma UI. 562 00:31:28.916 --> 00:31:32.635 ntão, poderemos acessar nosso contêiner a partir de 563 00:31:32.645 --> 00:31:36.005 navegador para validar O contêiner foi iniciado com sucesso. 564 00:31:36.176 --> 00:31:37.286 por isso que estou escolhendo o motor, 565 00:31:38.145 --> 00:31:41.145 aqui você tem um monte de tags de imagem 566 00:31:41.735 --> 00:31:42.845 ue você pode escolher. 567 00:31:43.095 --> 00:31:48.676 ortanto, a segunda etapa após localizar a imagem é escolher uma tecnologia de imagem específica 568 00:31:49.270 --> 00:31:51.150 observe que selecionar 569 00:31:51.420 --> 00:31:56.300 ma versão específica da imagem é a melhor prática na maioria dos casos. 570 00:31:56.359 --> 00:32:00.699 digamos que escolhemos a versão 1.23. 571 00:32:00.709 --> 00:32:05.040 ntão, estamos escolhendo essa tag aqui e fazendo o download de uma imagem. 572 00:32:05.050 --> 00:32:09.140 oltamos ao nosso terminal e executamos o docker 573 00:32:09.510 --> 00:32:13.819 uxe o comando e especificamos o nome da imagem, 574 00:32:13.939 --> 00:32:14.920 ue é 575 00:32:15.040 --> 00:32:15.900 otor X. 576 00:32:16.619 --> 00:32:18.900 ntão você também tem todo esse comando aqui, 577 00:32:18.930 --> 00:32:22.229 ntão esse é basicamente o nome da imagem que você escreveu aqui. 578 00:32:22.449 --> 00:32:23.910 ntão isso é NGX. 579 00:32:24.310 --> 00:32:25.030 então 580 00:32:25.170 --> 00:32:30.000 specificamos a tag da imagem separando-a com dois pontos 581 00:32:30.219 --> 00:32:31.439 depois a versão 582 00:32:31.630 --> 00:32:34.089 ,23. Foi isso que escolhemos. 583 00:32:34.530 --> 00:32:38.520 sse é o comando completo. Então, o Docker Client entrará em contato com 584 00:32:38.699 --> 00:32:41.829 ub e vou dizer, eu quero pegar 585 00:32:41.979 --> 00:32:42.670 motor 586 00:32:42.810 --> 00:32:47.760 magem com esta tag específica e baixe-a localmente. Então, vamos executar. 587 00:32:49.869 --> 00:32:53.609 aqui vemos que ele está puxando a imagem de 588 00:32:53.869 --> 00:32:56.500 hub Docker de registro de imagens. 589 00:32:56.750 --> 00:32:59.890 a razão pela qual não precisamos dizer ao Docker 590 00:33:00.010 --> 00:33:04.819 escobrir que a imagem no Docker Hub é porque o Docker Hub é na verdade o padrão 591 00:33:04.989 --> 00:33:10.300 ocal em que o Docker procurará todas as imagens que especificarmos aqui. 592 00:33:10.579 --> 00:33:13.839 ortanto, é configurado automaticamente como um local para 593 00:33:13.849 --> 00:33:17.579 aixando as imagens e o download aconteceu. 594 00:33:17.949 --> 00:33:22.770 agora, se executarmos o comando docker images novamente, como fizemos aqui, 595 00:33:23.050 --> 00:33:26.890 na verdade, devemos ver uma imagem agora localmente, que é o motor 596 00:33:27.430 --> 00:33:29.060 om uma tag de imagem 597 00:33:29.180 --> 00:33:30.760 ,23 598 00:33:31.030 --> 00:33:34.089 algumas outras informações, como o tamanho da imagem, 599 00:33:34.260 --> 00:33:37.010 que geralmente está em megabytes, 600 00:33:37.119 --> 00:33:38.079 omo mencionei. 601 00:33:38.199 --> 00:33:40.140 ntão, agora temos uma imagem localmente, 602 00:33:40.489 --> 00:33:45.540 se puxarmos uma imagem sem nenhuma tag específica, 603 00:33:45.900 --> 00:33:49.959 ntão fazemos isso basicamente docker extrair um nome da imagem. 604 00:33:49.969 --> 00:33:54.880 se eu executar isso, você verá que ele está puxando a imagem mais recente automaticamente. 605 00:33:55.060 --> 00:33:56.459 agora, se eu fizer 606 00:33:56.660 --> 00:33:57.760 magens novamente, 607 00:33:58.160 --> 00:34:01.329 amos ver duas imagens do motor 608 00:34:02.140 --> 00:34:04.140 om dois textos diferentes, 609 00:34:04.329 --> 00:34:08.438 erto? Então, essas são na verdade duas imagens separadas com versões diferentes. 610 00:34:08.668 --> 00:34:09.120 egal. 611 00:34:09.129 --> 00:34:10.899 gora temos imagens localmente, 612 00:34:10.909 --> 00:34:15.958 mas obviamente eles só são úteis quando os executamos em um ambiente de contêiner. 613 00:34:15.969 --> 00:34:18.719 omo podemos fazer isso? Também é super fácil. 614 00:34:18.899 --> 00:34:22.449 scolhemos a imagem que já temos disponível localmente 615 00:34:22.560 --> 00:34:25.280 om a tag. Então, digamos que queremos correr 616 00:34:25.429 --> 00:34:27.120 sta imagem como um contêiner 617 00:34:27.489 --> 00:34:30.830 executamos o comando darker run 618 00:34:30.978 --> 00:34:31.280 619 00:34:31.429 --> 00:34:33.399 om o nome da imagem 620 00:34:33.639 --> 00:34:35.030 a tag 621 00:34:35.830 --> 00:34:37.050 uper fácil 622 00:34:37.530 --> 00:34:38.790 vamos executar. 623 00:34:39.050 --> 00:34:42.978 esse comando realmente inicia o contêiner com base na imagem. 624 00:34:43.040 --> 00:34:46.239 sabemos que o contêiner começou porque vemos o 625 00:34:46.250 --> 00:34:50.958 egistros do serviço do motor iniciando dentro do contêiner. 626 00:34:50.989 --> 00:34:54.159 ntão, esses são, na verdade, registros de contêineres que vemos no console. 627 00:34:54.320 --> 00:34:56.260 ntão, está lançando alguns scripts, 628 00:34:57.610 --> 00:35:03.669 aqui iniciamos os processos de trabalho e o contêiner está em execução. 629 00:35:04.060 --> 00:35:05.159 ntão, agora 630 00:35:05.379 --> 00:35:07.820 e eu abrir uma nova sessão de terminal 631 00:35:08.199 --> 00:35:09.030 urtiu isso 632 00:35:09.330 --> 00:35:09.939 633 00:35:10.580 --> 00:35:11.330 aça 634 00:35:11.679 --> 00:35:12.629 S, 635 00:35:13.860 --> 00:35:16.699 u deveria realmente ver um contêiner, 636 00:35:16.850 --> 00:35:17.840 ste aqui 637 00:35:18.290 --> 00:35:20.469 a lista de contêineres em execução, 638 00:35:20.820 --> 00:35:23.679 temos algumas informações sobre o contêiner. Nós temos o ID. 639 00:35:23.800 --> 00:35:26.709 emos a imagem na qual o contêiner se baseia, 640 00:35:26.719 --> 00:35:29.409 ncluindo a tecnologia quando foi criada 641 00:35:29.610 --> 00:35:34.689 também o nome do contêiner. Portanto, temos o ID e o nome do contêiner. 642 00:35:34.860 --> 00:35:38.729 ste é o nome que o docker realmente faz automaticamente 643 00:35:38.969 --> 00:35:42.409 era e atribui a um contêiner quando ele é criado. 644 00:35:42.800 --> 00:35:45.060 ortanto, é um nome gerado aleatoriamente. 645 00:35:45.669 --> 00:35:50.469 gora, se eu voltar aqui, você verá que esses registros, os registros do contêiner, 646 00:35:50.479 --> 00:35:52.780 a verdade estão bloqueando o terminal. 647 00:35:52.969 --> 00:35:57.879 ntão, se eu quiser recuperar o terminal e fazer a saída C do controle, 648 00:35:57.889 --> 00:36:01.179 contêiner sai e o processo realmente morre. 649 00:36:01.189 --> 00:36:02.020 ntão, agora, se eu fizer 650 00:36:02.239 --> 00:36:05.739 S, você verá que não há nenhum contêiner em execução. 651 00:36:06.219 --> 00:36:08.129 as podemos iniciar um contêiner 652 00:36:08.260 --> 00:36:12.209 m segundo plano sem bloquear o terminal adicionando 653 00:36:13.050 --> 00:36:14.760 ma bandeira chamada menos D, 654 00:36:15.010 --> 00:36:16.610 ue significa separado. 655 00:36:16.729 --> 00:36:19.810 ortanto, ele separa o processo docker do terminal. 656 00:36:20.389 --> 00:36:21.600 se eu executar isso, 657 00:36:21.840 --> 00:36:25.550 ocê vê que ele não está mais bloqueando o terminal. 658 00:36:25.699 --> 00:36:29.959 em vez de mostrar os registros do motor X iniciando dentro do contêiner, 659 00:36:29.969 --> 00:36:31.020 le simplesmente bloqueia 660 00:36:31.179 --> 00:36:34.780 ID completo do contêiner. Então, agora, se eu fizer 661 00:36:34.959 --> 00:36:35.689 S 662 00:36:35.949 --> 00:36:39.219 qui no mesmo terminal, eu deveria ver aquele contêiner 663 00:36:39.439 --> 00:36:40.620 orrendo novamente. 664 00:36:41.060 --> 00:36:46.729 isso é basicamente o ID ou a parte dessa string de ID completa 665 00:36:46.919 --> 00:36:48.010 ostrado aqui. 666 00:36:48.219 --> 00:36:52.209 as quando iniciamos um contêiner em segundo plano em um modo separado, 667 00:36:52.239 --> 00:36:56.550 ocê ainda pode querer ver os registros do aplicativo dentro do contêiner, 668 00:36:56.580 --> 00:36:59.030 ntão você pode querer ver como o motor foi ligado em seguida? 669 00:36:59.040 --> 00:37:01.129 que parecia, na verdade, então 670 00:37:01.340 --> 00:37:05.629 ara isso, você pode usar outro comando docker chamado Docker logs 671 00:37:06.199 --> 00:37:08.489 om o ID do contêiner 672 00:37:08.590 --> 00:37:09.370 ssim, 673 00:37:10.159 --> 00:37:14.159 ele imprimirá os registros do aplicativo do contêiner. 674 00:37:14.530 --> 00:37:17.229 gora, para criar o contêiner 675 00:37:17.540 --> 00:37:22.340 ontêiner, primeiro retiramos a imagem e, em seguida, criamos um contêiner a partir dessa imagem. 676 00:37:22.560 --> 00:37:23.199 as 677 00:37:23.429 --> 00:37:26.469 podemos realmente salvar para nós mesmos o comando pull 678 00:37:26.739 --> 00:37:28.169 execute 679 00:37:28.360 --> 00:37:33.600 xecute o comando diretamente, mesmo se a imagem não estiver disponível localmente. 680 00:37:34.010 --> 00:37:37.169 ntão, agora, temos essas duas imagens disponíveis localmente, 681 00:37:37.479 --> 00:37:39.159 as no comando de execução do Docker, 682 00:37:39.169 --> 00:37:43.290 ocê pode realmente fornecer qualquer imagem que exista no Docker Hub. 683 00:37:43.370 --> 00:37:47.159 ão precisa necessariamente existir localmente no seu computador, 684 00:37:47.169 --> 00:37:49.080 ntão você não precisa puxar isso primeiro. 685 00:37:49.090 --> 00:37:52.419 ntão, se eu voltar, podemos realmente escolher uma versão de imagem diferente. 686 00:37:52.429 --> 00:37:56.780 amos escolher 1,22 dash alpine, 687 00:37:56.969 --> 00:37:57.489 ntão 688 00:37:58.780 --> 00:38:00.139 sta tag de imagem, 689 00:38:00.639 --> 00:38:02.610 ue não temos localmente 690 00:38:03.120 --> 00:38:07.370 u Claro, isso pode ser um serviço completamente diferente. Isso não importa. 691 00:38:07.489 --> 00:38:10.189 ntão, basicamente, qualquer imagem que não tenhamos localmente 692 00:38:10.300 --> 00:38:13.729 ocê pode executar diretamente usando o comando docker run. 693 00:38:14.199 --> 00:38:17.159 ntão, o que ele faz é primeiro. Ele tentará 694 00:38:17.330 --> 00:38:18.879 ocalize essa imagem 695 00:38:19.050 --> 00:38:19.830 ocalmente, 696 00:38:19.969 --> 00:38:21.439 se não encontrar, 697 00:38:21.610 --> 00:38:24.949 le irá para o hub Docker por padrão 698 00:38:25.129 --> 00:38:29.129 puxe a imagem de lá automaticamente, o que é muito conveniente. 699 00:38:29.270 --> 00:38:35.590 ntão, ele faz as duas coisas em um comando, basicamente. Então ele baixou a imagem com esta tag 700 00:38:36.149 --> 00:38:38.169 iniciei o contêiner. 701 00:38:38.520 --> 00:38:40.989 agora, se fizermos docker PS, 702 00:38:41.129 --> 00:38:44.770 evemos ter dois contêineres funcionando com diferentes 703 00:38:45.239 --> 00:38:46.169 ersões. 704 00:38:46.639 --> 00:38:47.889 lembre-se, eu disse, 705 00:38:47.899 --> 00:38:52.239 Docker resolve o problema de executar versões diferentes do mesmo aplicativo 706 00:38:52.580 --> 00:38:56.159 e uma vez. Então, é tão simples fazer isso com o Docker 707 00:38:56.479 --> 00:38:59.659 ara que possamos realmente clicar neste contêiner. 708 00:39:00.030 --> 00:39:00.689 709 00:39:00.939 --> 00:39:02.520 gora, novamente, temos 710 00:39:02.639 --> 00:39:06.419 quele único contêiner de motor com esta versão. 711 00:39:09.929 --> 00:39:14.500 gora, a questão importante é: como acessamos esse contêiner? 712 00:39:14.510 --> 00:39:16.449 em, não podemos agora 713 00:39:16.770 --> 00:39:19.459 orque o contêiner está sendo executado em 714 00:39:19.590 --> 00:39:25.659 rede Docker fechada, então não podemos acessá-la em nosso navegador de computador local, 715 00:39:25.669 --> 00:39:26.449 or exemplo, 716 00:39:26.479 --> 00:39:29.780 precisamos primeiro expor o contêiner ao nosso 717 00:39:29.790 --> 00:39:33.100 ede local que pode parecer um pouco difícil, 718 00:39:33.110 --> 00:39:34.639 as é super fácil. 719 00:39:34.860 --> 00:39:38.360 ntão, basicamente, vamos fazer o que é chamado de vinculação de porta. 720 00:39:38.870 --> 00:39:42.060 contêiner está sendo executado em alguma porta, certo, 721 00:39:42.270 --> 00:39:46.979 cada aplicativo tem uma porta padrão na qual está sendo executado, 722 00:39:47.179 --> 00:39:47.770 omo motor 723 00:39:47.969 --> 00:39:48.830 plicação 724 00:39:48.989 --> 00:39:51.169 empre funciona na porta 80 vermelha 725 00:39:51.370 --> 00:39:52.500 executado na porta 726 00:39:52.669 --> 00:39:55.290 79. 727 00:39:55.439 --> 00:39:58.169 ortanto, essas são portas padrão para esses aplicativos. 728 00:39:58.179 --> 00:40:02.169 ntão, essa é a porta em que o contêiner está sendo executado. 729 00:40:02.489 --> 00:40:03.020 para 730 00:40:03.489 --> 00:40:08.179 emos as portas abaixo da lista de portas aqui, o aplicativo está sendo executado na Porta A 731 00:40:08.280 --> 00:40:12.159 entro do contêiner. Então, agora, se eu tentar acessar 732 00:40:12.379 --> 00:40:12.489 otor 733 00:40:12.850 --> 00:40:13.719 ontêiner 734 00:40:14.090 --> 00:40:17.409 esta porta na porta 80 do navegador 735 00:40:19.100 --> 00:40:20.989 vamos tentar fazer isso 736 00:40:21.219 --> 00:40:22.110 orta 80 737 00:40:22.719 --> 00:40:23.620 perte enter. 738 00:40:23.760 --> 00:40:26.689 ocê vê que nada está disponível nesta porta 739 00:40:26.830 --> 00:40:29.969 o host local. Então, agora podemos dizer ao Docker 740 00:40:30.360 --> 00:40:33.989 i, você sabe o que? Vincule a porta 80 desse contêiner 741 00:40:34.520 --> 00:40:36.879 ara nosso anfitrião local em 742 00:40:37.020 --> 00:40:42.689 ualquer porta que eu diga em alguma porta específica, como 80, 80 ou 9000, 743 00:40:42.699 --> 00:40:47.699 na verdade, não importa para que eu possa acessar o contêiner ou o que quer que esteja em execução 744 00:40:47.709 --> 00:40:52.860 entro do contêiner como se estivesse sendo executado na porta 9000 do meu host local. 745 00:40:53.030 --> 00:40:57.750 fazemos isso com um sinalizador adicional ao criar 746 00:40:57.870 --> 00:40:59.290 m recipiente mais escuro. 747 00:40:59.800 --> 00:41:00.379 ntão 748 00:41:00.729 --> 00:41:04.689 que vamos fazer é primeiro, vamos parar este contêiner 749 00:41:05.750 --> 00:41:08.379 crie um novo. Então, vamos fazer, Doutor, 750 00:41:08.929 --> 00:41:09.800 ue 751 00:41:10.489 --> 00:41:13.169 asicamente interrompe esse contêiner em execução, 752 00:41:13.550 --> 00:41:15.820 vamos criar um novo contêiner. 753 00:41:16.570 --> 00:41:17.989 ntão, vamos fazer 754 00:41:18.169 --> 00:41:18.669 xecutar 755 00:41:19.050 --> 00:41:19.979 otor X 756 00:41:20.949 --> 00:41:21.870 mesma versão 757 00:41:22.179 --> 00:41:25.520 vamos encontrá-lo em segundo plano no modo de separação. 758 00:41:25.530 --> 00:41:31.040 gora vamos fazer a vinculação de portas com um toque adicional menos P, 759 00:41:31.080 --> 00:41:32.110 é super fácil. 760 00:41:32.120 --> 00:41:33.290 stamos dizendo ao Docker 761 00:41:33.689 --> 00:41:34.439 762 00:41:34.679 --> 00:41:35.120 otor 763 00:41:35.389 --> 00:41:36.800 orta do aplicativo 764 00:41:37.219 --> 00:41:38.760 entro do contêiner, que é um 765 00:41:39.429 --> 00:41:41.699 por favor, pegue isso e vincule isso 766 00:41:41.969 --> 00:41:44.399 m um host ou host local 767 00:41:44.629 --> 00:41:47.929 a porta qualquer que seja. 9000, por exemplo. Certo. 768 00:41:48.149 --> 00:41:49.500 ssa é a porta que estou escolhendo. 769 00:41:49.830 --> 00:41:52.110 ntão, esta bandeira aqui 770 00:41:52.330 --> 00:41:58.679 na verdade, exporá o contêiner à nossa rede local ou host local. 771 00:41:58.790 --> 00:41:59.560 ntão, este motor 772 00:41:59.780 --> 00:42:04.669 processo em execução no contêiner estará acessível para nós na porta 9000. 773 00:42:04.679 --> 00:42:06.840 ntão, agora, se eu executar isso, 774 00:42:06.979 --> 00:42:09.219 amos ver se o contêiner está em execução, 775 00:42:09.719 --> 00:42:10.370 776 00:42:10.550 --> 00:42:15.590 a seção de portas, vemos um valor diferente. Então, em vez de apenas ter 80 777 00:42:15.919 --> 00:42:18.330 emos essas informações de vinculação de porta. 778 00:42:18.510 --> 00:42:23.510 ntão, se você esqueceu qual porta escolheu. Ou se você tiver 10 recipientes diferentes com 779 00:42:23.659 --> 00:42:24.090 S, 780 00:42:24.100 --> 00:42:29.270 ocê pode realmente ver em qual porta cada contêiner está acessível em seu host local. 781 00:42:29.350 --> 00:42:31.429 ntão, esta será a porta. 782 00:42:31.959 --> 00:42:34.629 ntão, agora, se eu voltar para o navegador 783 00:42:35.000 --> 00:42:40.489 em vez do host local 80, vamos digitar o host local 9000 784 00:42:41.320 --> 00:42:42.310 assim por diante. Entrar. 785 00:42:42.830 --> 00:42:45.870 í está. Temos as boas-vindas ao motor 786 00:42:46.000 --> 00:42:50.129 ágina, então isso significa que estamos realmente acessando nosso aplicativo. 787 00:42:50.389 --> 00:42:53.820 também podemos ver isso nos registros. Fale muito 788 00:42:54.070 --> 00:42:55.330 D do contêiner. 789 00:42:55.919 --> 00:42:59.139 aí está. Este é o registro. Uh, aquele motor 790 00:42:59.459 --> 00:43:04.590 oi produzido um aplicativo que recebeu uma solicitação do Mac ou de mim 791 00:43:04.770 --> 00:43:05.659 áquina OS 792 00:43:05.929 --> 00:43:07.300 avegador Chrome. 793 00:43:07.739 --> 00:43:11.060 ntão, vemos que nossa solicitação realmente atingiu o 794 00:43:11.330 --> 00:43:11.540 otor 795 00:43:11.750 --> 00:43:14.229 plicativo em execução dentro do contêiner. 796 00:43:14.350 --> 00:43:21.149 ntão, é fácil executar um serviço dentro de um contêiner e acessá-lo localmente. 797 00:43:21.510 --> 00:43:24.159 gora, como eu disse, você pode escolher a porta que quiser, 798 00:43:24.310 --> 00:43:28.449 mas também é praticamente um padrão usar o mesmo 799 00:43:28.459 --> 00:43:33.439 orta em sua máquina host conforme o contêiner está usando. 800 00:43:33.489 --> 00:43:37.320 ntão, se eu estivesse executando um contêiner MySQL que começasse em 801 00:43:37.399 --> 00:43:44.310 orta 3306 Eu a vincularia ao host local 3306. 802 00:43:44.659 --> 00:43:46.479 ntão, isso é uma espécie de padrão. 803 00:43:50.399 --> 00:43:55.300 gora, há uma coisa que quero destacar aqui, que é que o Docker é executado 804 00:43:55.770 --> 00:43:59.610 a verdade, cria um novo contêiner toda vez. 805 00:43:59.620 --> 00:44:03.070 le não reutiliza o contêiner que criamos anteriormente. 806 00:44:03.399 --> 00:44:08.080 que significa que, como já executamos o comando Docker run algumas vezes, 807 00:44:08.110 --> 00:44:11.239 na verdade, devemos ter vários contêineres em nosso 808 00:44:11.409 --> 00:44:17.530 aptop. No entanto, se eu fizer o Docker P SI, vejo apenas o contêiner em execução 809 00:44:17.540 --> 00:44:20.600 ão vejo os que criei, mas parei. 810 00:44:20.610 --> 00:44:22.870 as esses contêineres ainda existem. 811 00:44:23.040 --> 00:44:25.030 ntão, se eu fizer docker PS 812 00:44:26.260 --> 00:44:27.959 om uma mancha 813 00:44:28.189 --> 00:44:28.750 E 814 00:44:29.620 --> 00:44:30.669 execute 815 00:44:30.810 --> 00:44:33.159 sso fornece, na verdade, uma lista de todos 816 00:44:33.169 --> 00:44:37.159 ontêineres, estejam eles funcionando ou parados. 817 00:44:37.469 --> 00:44:39.189 ntão, este é o contêiner ativo 818 00:44:39.659 --> 00:44:40.770 ue ainda está em execução 819 00:44:40.889 --> 00:44:42.979 esses são os parados. 820 00:44:42.989 --> 00:44:47.000 iz até que saiu há 10 minutos, seis minutos atrás. Seja o que for. 821 00:44:47.149 --> 00:44:50.780 ortanto, temos quatro contêineres com configurações diferentes 822 00:44:51.340 --> 00:44:53.639 anteriormente eu mostrei a você Docker stop 823 00:44:53.649 --> 00:44:57.679 omando que basicamente interrompe um contêiner em execução ativa 824 00:44:57.989 --> 00:44:59.399 ara que possamos parar com isso. 825 00:45:00.110 --> 00:45:02.399 agora ele vai mostrá-lo como 826 00:45:02.540 --> 00:45:05.620 m contêiner parado também saiu há um segundo, 827 00:45:05.860 --> 00:45:06.639 as da mesma forma. 828 00:45:06.649 --> 00:45:10.560 ocê também pode reiniciar um contêiner que você criou antes 829 00:45:10.570 --> 00:45:12.989 em precisar criar um novo com docker Run, 830 00:45:13.000 --> 00:45:13.370 e comprometem. 831 00:45:13.639 --> 00:45:16.040 ntão, para isso, temos um começo mais escuro 832 00:45:16.659 --> 00:45:17.340 833 00:45:17.510 --> 00:45:20.510 ue pega o ID do contêiner 834 00:45:21.360 --> 00:45:25.010 inicie o contêiner repetidamente. Você pode começar várias 835 00:45:25.439 --> 00:45:27.530 ontêineres de uma vez, se você quiser, 836 00:45:28.959 --> 00:45:29.770 urtiram isso. 837 00:45:31.159 --> 00:45:31.679 838 00:45:31.919 --> 00:45:33.610 gora você tem dois contêineres em execução. 839 00:45:33.620 --> 00:45:37.820 gora você viu que usamos o ID do contêiner em vários comandos do stocker. 840 00:45:37.830 --> 00:45:42.459 ntão, para parar o contêiner, reiniciá-lo, verificar os registros, etc. 841 00:45:42.889 --> 00:45:46.449 as a identidade é difícil de lembrar e você terá que procurá-la o tempo todo. 842 00:45:46.639 --> 00:45:46.889 ntão 843 00:45:47.000 --> 00:45:47.969 omo alternativa, 844 00:45:47.979 --> 00:45:51.179 ocê também pode usar o nome do contêiner para todos esses comandos 845 00:45:51.189 --> 00:45:54.689 m vez do ID que é gerado automaticamente pelo Docker. 846 00:45:54.830 --> 00:45:59.340 as podemos realmente reescrever isso e fornecer nossos contêineres 847 00:45:59.510 --> 00:46:02.729 omes mais significativos quando os criamos 848 00:46:04.409 --> 00:46:06.399 ara que possamos parar esses dois contêineres 849 00:46:06.850 --> 00:46:08.020 sando o ID 850 00:46:08.689 --> 00:46:09.659 u o nome 851 00:46:10.540 --> 00:46:11.280 urtiram isso. 852 00:46:11.459 --> 00:46:13.899 ntão, esses são dois contêineres diferentes, um com ID, 853 00:46:13.909 --> 00:46:15.949 m com nome e vamos parar os dois. 854 00:46:17.629 --> 00:46:18.370 í está. 855 00:46:18.570 --> 00:46:23.270 gora, quando criamos um novo contêiner, podemos realmente dar a ele um nome específico 856 00:46:23.510 --> 00:46:25.459 há outra bandeira para isso 857 00:46:25.889 --> 00:46:28.659 ue é o nome Dash Dash. E então nós fornecemos 858 00:46:28.919 --> 00:46:32.919 nome que queremos dar ao nosso contêiner. E digamos que isso seja, hum, um 859 00:46:33.270 --> 00:46:36.479 plicativo da Web. Então é assim que vamos chamar nosso contêiner 860 00:46:37.570 --> 00:46:38.780 vamos executar. 861 00:46:39.379 --> 00:46:39.889 e eu fizer 862 00:46:40.030 --> 00:46:40.719 PS 863 00:46:41.100 --> 00:46:45.540 ocê vê que o nome não é algo aleatório gerado automaticamente, 864 00:46:45.570 --> 00:46:47.350 as, em vez disso, nosso contêiner é chamado de Web. 865 00:46:47.959 --> 00:46:48.969 ntão, agora podemos fazer o doer 866 00:46:49.209 --> 00:46:50.790 loqueia e 867 00:46:51.040 --> 00:46:52.840 ome do nosso contêiner 868 00:46:53.419 --> 00:46:54.159 urtiram isso. 869 00:46:57.540 --> 00:46:58.909 gora aprendemos sobre Do 870 00:46:59.149 --> 00:47:00.840 ub, que na verdade é 871 00:47:01.020 --> 00:47:03.760 que é chamado de registro público de imagens, 872 00:47:04.050 --> 00:47:04.949 que significa 873 00:47:05.070 --> 00:47:09.770 ssas imagens que usamos são visíveis e estão disponíveis para o público. 874 00:47:10.149 --> 00:47:15.250 as quando uma empresa cria suas próprias imagens de seus próprios aplicativos, 875 00:47:15.360 --> 00:47:17.969 claro que eles não querem que ele esteja disponível publicamente. 876 00:47:18.229 --> 00:47:22.649 ntão, para isso, existem os chamados registros docker privados, 877 00:47:22.659 --> 00:47:23.770 existem muitos deles. 878 00:47:23.780 --> 00:47:28.689 uase todos os provedores de nuvem têm um serviço de registro docker privado, 879 00:47:28.699 --> 00:47:35.080 or exemplo, AWS EECR ou serviço de registro de contêineres elásticos, Google Azure. 880 00:47:35.090 --> 00:47:38.050 odos eles têm seus próprios registros docker. 881 00:47:38.080 --> 00:47:43.239 Nexus, que é um serviço popular de armazenamento de artefatos, não tem registro. 882 00:47:43.250 --> 00:47:46.179 té o Docker Hub tem um registro de dock privado 883 00:47:46.310 --> 00:47:51.679 ntão, na página inicial do Dock Hub, você viu este formulário de introdução. 884 00:47:52.000 --> 00:47:55.100 ntão, basicamente, se você quiser armazenar suas imagens privadas do docker no Doer 885 00:47:55.270 --> 00:47:55.729 ub, 886 00:47:55.739 --> 00:47:59.770 ocê pode realmente criar um registro privado no Docker Hub ou 887 00:47:59.780 --> 00:48:02.929 té mesmo crie um registro público e faça upload de suas imagens lá. 888 00:48:02.939 --> 00:48:04.669 por isso que eu realmente tenho uma conta, 889 00:48:04.679 --> 00:48:07.250 orque eu fiz o upload de algumas imagens no Do 890 00:48:07.419 --> 00:48:11.860 ub que meus alunos podem baixar para diferentes cursos. 891 00:48:11.879 --> 00:48:15.209 há mais um conceito que quero mencionar relacionado ao registro, 892 00:48:15.219 --> 00:48:17.739 ue é algo chamado repositório, 893 00:48:17.949 --> 00:48:19.530 ue você também ouve com frequência. 894 00:48:19.639 --> 00:48:20.370 m repositório faz 895 00:48:20.479 --> 00:48:25.199 egistro? Então, qual é a diferença entre eles? De forma muito simples, explicou a AWS. 896 00:48:25.209 --> 00:48:30.350 ECR é um registro, então, basicamente, é um serviço que fornece armazenamento para imagens. 897 00:48:30.379 --> 00:48:31.830 dentro desse registro, 898 00:48:31.840 --> 00:48:36.620 ocê pode ter vários repositórios para todas as suas diferentes imagens de aplicativos. 899 00:48:36.629 --> 00:48:39.429 ortanto, cada aplicativo tem seu próprio repositório, 900 00:48:39.439 --> 00:48:43.179 nesse repositório você pode armazenar diferentes versões de imagens 901 00:48:43.189 --> 00:48:46.300 u tags desse mesmo aplicativo da mesma maneira. 902 00:48:46.310 --> 00:48:46.429 o 903 00:48:46.689 --> 00:48:51.070 hub é um registro. É um serviço para armazenar imagens e fazer 904 00:48:51.250 --> 00:48:51.500 ub, 905 00:48:51.510 --> 00:48:55.699 ocê pode ter seus repositórios públicos para armazenar imagens que serão 906 00:48:55.709 --> 00:48:57.629 cessível publicamente ou você pode ter 907 00:48:57.639 --> 00:49:00.110 epositórios privados para diferentes aplicativos. 908 00:49:00.129 --> 00:49:04.040 , novamente, você pode ter um repositório dedicado para cada aplicativo. 909 00:49:04.110 --> 00:49:05.459 ntão, essa é uma nota lateral. 910 00:49:05.469 --> 00:49:09.770 e você ouvir esses termos e conceitos e souber qual é a diferença entre eles 911 00:49:13.060 --> 00:49:13.389 gora? 912 00:49:13.399 --> 00:49:15.909 u mencionei que as empresas gostariam de criar 913 00:49:15.989 --> 00:49:18.760 uas próprias imagens personalizadas para seus aplicativos. 914 00:49:19.050 --> 00:49:20.760 ntão, como isso realmente funciona? 915 00:49:20.770 --> 00:49:25.070 omo posso criar minha própria imagem docker para meu aplicativo? 916 00:49:25.149 --> 00:49:27.580 o caso de uso disso é, quando eu estou 917 00:49:27.780 --> 00:49:31.250 oncluído com o desenvolvimento, o aplicativo está pronto. 918 00:49:31.260 --> 00:49:34.850 le tem alguns recursos e queremos lançá-lo para os usuários finais. 919 00:49:34.860 --> 00:49:36.790 ntão, queremos executá-lo em uma implantação 920 00:49:36.969 --> 00:49:39.719 ervidor e para facilitar o processo de implantação. 921 00:49:39.729 --> 00:49:44.479 eseja implantar nosso aplicativo como um contêiner docker junto com o banco de dados 922 00:49:44.489 --> 00:49:48.399 outros serviços que também serão executados como contêineres docker? 923 00:49:48.489 --> 00:49:51.699 ntão, como podemos usar nosso aplicativo implantado criado 924 00:49:51.709 --> 00:49:55.669 odifica e empacota em uma imagem docker? 925 00:49:55.679 --> 00:50:00.659 ara isso, precisamos criar uma definição de como construir uma imagem 926 00:50:00.760 --> 00:50:02.459 o nosso aplicativo, 927 00:50:02.780 --> 00:50:07.340 essa definição é escrita em um arquivo chamado arquivo docker. 928 00:50:07.350 --> 00:50:11.379 ntão, é assim que deve ser chamado, criar um arquivo docker simples é muito fácil. 929 00:50:11.600 --> 00:50:17.080 nesta parte, vamos usar um aplicativo super simples, sem JAS, que eu preparei. 930 00:50:17.090 --> 00:50:19.610 vamos escrever um arquivo docker para isso 931 00:50:19.620 --> 00:50:22.370 plicativo para criar uma imagem mais escura a partir dele. 932 00:50:22.530 --> 00:50:24.550 , como eu disse, é muito fácil de fazer. 933 00:50:24.929 --> 00:50:26.469 ntão, este é o aplicativo. 934 00:50:26.679 --> 00:50:29.739 extremamente simples. Eu só tenho um 935 00:50:29.939 --> 00:50:34.479 rquivo dot Js do servidor, que basicamente apenas inicia o aplicativo 936 00:50:34.699 --> 00:50:36.659 a porta 3000. E então 937 00:50:36.959 --> 00:50:38.800 penas diz: Bem-vindo 938 00:50:39.100 --> 00:50:40.979 uando você o acessa a partir do navegador 939 00:50:41.300 --> 00:50:45.979 temos um arquivo adjacente de pacote que contém essa dependência 940 00:50:46.010 --> 00:50:49.629 ara a biblioteca expressa que usamos aqui para iniciar o aplicativo 941 00:50:49.820 --> 00:50:52.270 uper enxuta e simples. 942 00:50:52.419 --> 00:50:54.610 esse é o aplicativo a partir do qual vamos criar um 943 00:50:54.620 --> 00:50:57.939 magem do docker e inicie-a como um contêiner do docker. 944 00:50:58.419 --> 00:50:59.770 ntão, vamos fazer isso. 945 00:51:00.459 --> 00:51:06.090 ntão, na raiz do aplicativo, vamos criar um novo arquivo chamado Docker File. 946 00:51:06.929 --> 00:51:08.870 ntão esse é o nome. E você vê isso, 947 00:51:09.090 --> 00:51:12.110 um, a maioria dos editores de código realmente detecta 948 00:51:12.290 --> 00:51:15.340 rquivo docker e obtemos esse ícone do docker aqui. 949 00:51:15.350 --> 00:51:17.389 ntão, neste arquivo docker, 950 00:51:17.399 --> 00:51:20.229 amos escrever uma definição de como o 951 00:51:20.239 --> 00:51:22.250 imagem deve ser criada a partir deste aplicativo. 952 00:51:22.370 --> 00:51:24.040 ntão, o que nosso aplicativo precisa? 953 00:51:24.050 --> 00:51:27.709 le precisa de um nó instalado porque o nó deve executar nosso aplicativo. 954 00:51:27.929 --> 00:51:28.389 erto? 955 00:51:29.020 --> 00:51:31.840 ntão, se eu quisesse iniciar este aplicativo localmente 956 00:51:32.020 --> 00:51:36.689 o meu terminal, eu executaria o node SRC. Então, a pasta de origem 957 00:51:36.860 --> 00:51:38.379 o ponto do servidor Js 958 00:51:38.649 --> 00:51:40.939 omando para iniciar o aplicativo. 959 00:51:41.080 --> 00:51:44.929 ortanto, precisamos desse comando de nó disponível dentro da imagem. 960 00:51:45.250 --> 00:51:48.550 é aí que entra o conceito de imagem base. 961 00:51:48.560 --> 00:51:52.030 ortanto, cada imagem do docker é, na verdade, baseada nessa imagem base, 962 00:51:52.320 --> 00:51:58.149 que é principalmente uma imagem leve do sistema operacional Linux que tem 963 00:51:58.270 --> 00:52:03.419 node, N, PM ou qualquer ferramenta que você precise para instalar seu aplicativo em cima dele. 964 00:52:03.489 --> 00:52:05.719 ortanto, para o aplicativo JavaScript, você teria 965 00:52:05.949 --> 00:52:07.050 magem base do nó. 966 00:52:07.060 --> 00:52:11.409 e você tiver um aplicativo Java, usaremos uma imagem com o Java Runtime instalado 967 00:52:11.899 --> 00:52:15.909 ovamente sistema operacional Linux com Java instalado em cima dele. 968 00:52:16.550 --> 00:52:19.629 essa é a imagem base. E definimos a imagem base. 969 00:52:19.639 --> 00:52:22.479 sando uma diretiva no arquivo docker chamado de. 970 00:52:22.649 --> 00:52:25.889 stamos dizendo que construa esta imagem a partir da imagem base e se 971 00:52:25.899 --> 00:52:29.000 u volto ao Docker Hub e procuro por node, 972 00:52:30.110 --> 00:52:35.979 ocê verá que temos uma imagem que tem node e N PM instalados em seu interior 973 00:52:36.489 --> 00:52:39.159 as imagens de base são como outras imagens. 974 00:52:39.189 --> 00:52:43.879 ntão, basicamente, você pode empilhar e construir sobre as imagens no Docker. 975 00:52:44.020 --> 00:52:46.020 ntão, eles são como qualquer outra imagem que vimos. 976 00:52:46.120 --> 00:52:49.310 eles também têm versões em texto ou imagem. 977 00:52:49.340 --> 00:52:54.149 ntão, vamos escolher a imagem do nó e uma versão específica 978 00:52:54.340 --> 00:52:57.459 , na verdade, vamos escolher 19 traços L de pinho. 979 00:53:00.429 --> 00:53:04.479 ntão, essa é nossa imagem base e nossa primeira diretiva no arquivo docker. 980 00:53:04.489 --> 00:53:06.560 ntão, novamente, isso apenas garantirá que 981 00:53:06.860 --> 00:53:09.850 uando nosso aplicativo node Js inicia em um contêiner, 982 00:53:09.860 --> 00:53:14.689 le terá um node e comandos N PM disponíveis para executar nosso aplicativo. 983 00:53:14.870 --> 00:53:17.229 gora, se iniciarmos nosso aplicativo com este comando, 984 00:53:17.689 --> 00:53:19.780 eremos que recebemos um erro porque 985 00:53:19.790 --> 00:53:22.580 recisamos primeiro instalar as dependências de um aplicativo. 986 00:53:22.760 --> 00:53:25.459 emos apenas uma dependência, que é a biblioteca de imprensa, 987 00:53:25.510 --> 00:53:29.189 que significa que teríamos que executar a instalação N PM, 988 00:53:29.729 --> 00:53:34.239 ue verificará o arquivo json do pacote, lerá todas as dependências, 989 00:53:34.250 --> 00:53:36.379 efina o interior e instale-os 990 00:53:36.489 --> 00:53:39.215 ocalmente na pasta de módulos do nó. 991 00:53:39.225 --> 00:53:43.425 ntão, basicamente, estamos mapeando as mesmas coisas que faríamos para executar o aplicativo. 992 00:53:43.435 --> 00:53:46.264 ocalmente, estamos mapeando isso dentro do contêiner, 993 00:53:46.274 --> 00:53:51.594 então teríamos que executar o comando N PM install também dentro do contêiner. 994 00:53:51.625 --> 00:53:52.195 ntão, 995 00:53:52.465 --> 00:53:53.594 omo mencionei antes, 996 00:53:53.745 --> 00:53:56.205 maioria das imagens escuras é baseada em Linux. 997 00:53:56.215 --> 00:53:59.824 lpine é um Linux, uma distribuição de sistema operacional Linux de ondas leves. 998 00:54:00.050 --> 00:54:00.669 ntão 999 00:54:00.810 --> 00:54:01.520 o arquivo docker, 1000 00:54:01.530 --> 00:54:05.030 ocê pode escrever qualquer comando Linux que desejar executar dentro do contêiner. 1001 00:54:05.159 --> 00:54:08.820 sempre que quisermos executar qualquer comando dentro do contêiner, 1002 00:54:08.830 --> 00:54:12.469 eja um comando Linux ou um comando de nó N PM, qualquer que seja, 1003 00:54:12.479 --> 00:54:15.600 ós o executamos usando uma diretiva de execução. 1004 00:54:15.610 --> 00:54:19.840 ntão essa é outra diretiva, e você vê que as diretivas são escritas em maiúsculas 1005 00:54:20.209 --> 00:54:21.770 depois vem o comando. 1006 00:54:21.889 --> 00:54:23.659 ntão, não instale o NPM, 1007 00:54:23.699 --> 00:54:27.840 ue baixará dependências dentro do contêiner e 1008 00:54:27.850 --> 00:54:31.239 rie uma pasta de módulos de nó dentro do contêiner 1009 00:54:31.570 --> 00:54:33.439 ntes de o aplicativo ser iniciado. 1010 00:54:33.800 --> 00:54:38.699 ntão, novamente, pense em um contêiner como seu próprio ambiente isolado. Tem um Linux simples 1011 00:54:39.040 --> 00:54:40.250 istema operacional 1012 00:54:40.489 --> 00:54:42.520 om node e N PM instalados, 1013 00:54:42.629 --> 00:54:44.540 estamos executando a instalação do N PM. 1014 00:54:44.550 --> 00:54:48.600 o entanto, também precisamos do código do aplicativo dentro do contêiner, certo? 1015 00:54:48.919 --> 00:54:50.570 ntão, precisamos do servidor Js 1016 00:54:50.689 --> 00:54:51.449 o interior, 1017 00:54:51.479 --> 00:54:53.889 precisamos do pacote para Jason porque é isso 1018 00:54:53.899 --> 00:54:58.149 m comando PM precisará realmente ler as dependências. 1019 00:54:58.330 --> 00:55:03.020 essa é outra diretiva de onde retiramos os arquivos 1020 00:55:03.189 --> 00:55:09.149 osso computador local e nós os colamos. Copie-os para o contêiner. 1021 00:55:09.760 --> 00:55:11.699 essa é uma diretiva chamada Copy 1022 00:55:11.800 --> 00:55:14.649 você pode copiar arquivos individuais, como o pacote dot 1023 00:55:14.760 --> 00:55:16.399 son a partir daqui 1024 00:55:16.679 --> 00:55:22.530 o contêiner, e podemos dizer onde no contêiner em qual local 1025 00:55:22.899 --> 00:55:25.760 o sistema de arquivos para o qual ele deve ser copiado. 1026 00:55:26.100 --> 00:55:27.330 digamos 1027 00:55:27.780 --> 00:55:31.189 le deve ser copiado para uma pasta chamada barra 1028 00:55:31.560 --> 00:55:31.889 plicativo 1029 00:55:32.679 --> 00:55:36.280 entro do contêiner. Então isso está na nossa máquina, 1030 00:55:36.699 --> 00:55:40.639 erto? Temos pacotes adjacentes aqui. Isso está dentro do contêiner. 1031 00:55:40.649 --> 00:55:41.580 completamente 1032 00:55:41.689 --> 00:55:45.600 istema isolado do nosso ambiente local, 1033 00:55:46.139 --> 00:55:51.770 ara que possamos copiar arquivos individuais e também copiar os diretórios completos. 1034 00:55:51.780 --> 00:55:54.510 ortanto, também precisamos do código do nosso aplicativo interno, obviamente, 1035 00:55:54.520 --> 00:55:57.040 ara executar o aplicativo para que possamos copiá-lo 1036 00:55:57.050 --> 00:56:01.419 iretório de origem inteiro, então temos vários arquivos dentro. 1037 00:56:01.449 --> 00:56:05.020 odemos copiar o diretório inteiro para o contêiner novamente 1038 00:56:05.649 --> 00:56:06.669 m barra 1039 00:56:06.820 --> 00:56:07.129 plicativo 1040 00:56:07.709 --> 00:56:08.479 ocalização 1041 00:56:08.639 --> 00:56:11.719 a barra no final também é muito importante. 1042 00:56:11.729 --> 00:56:17.780 ortanto, o docker sabe como criar essa pasta se ela ainda não existir no contêiner, 1043 00:56:17.899 --> 00:56:18.449 ntão 1044 00:56:18.649 --> 00:56:23.770 raiz do sistema de arquivos Linux adiciona uma pasta dentro e depois uma barra. 1045 00:56:23.879 --> 00:56:27.800 gora, todos os arquivos de aplicativos relevantes, como o pacote adjacente e o 1046 00:56:27.810 --> 00:56:32.854 odo o diretório de origem é copiado para o contêiner neste local. 1047 00:56:33.175 --> 00:56:36.014 próxima coisa que queremos fazer antes de podermos executar 1048 00:56:36.024 --> 00:56:40.125 comando de instalação do N PM deve realmente mudar para esse diretório. 1049 00:56:40.135 --> 00:56:40.554 erto? 1050 00:56:40.564 --> 00:56:41.175 ntão, no Linux, 1051 00:56:41.185 --> 00:56:44.834 emos o direito de transformar este CD em um diretório 1052 00:56:44.844 --> 00:56:48.415 ara executar os seguintes comandos dentro do diretório 1053 00:56:48.675 --> 00:56:52.965 o arquivo docker. Temos uma diretiva para isso chamada trabalho. 1054 00:56:53.195 --> 00:56:54.125 aro. 1055 00:56:54.540 --> 00:56:55.850 ntão, diretório de trabalho, 1056 00:56:56.040 --> 00:56:59.870 o que equivale a mudar para um diretório 1057 00:56:59.879 --> 00:57:03.590 ara executar todos os seguintes comandos nesse diretório 1058 00:57:03.770 --> 00:57:04.510 ntão podemos 1059 00:57:04.810 --> 00:57:06.260 aça o Slash App aqui. 1060 00:57:06.500 --> 00:57:09.919 ortanto, ele define esse caminho como o local padrão 1061 00:57:10.110 --> 00:57:13.219 ara o que vier depois. OK, 1062 00:57:13.489 --> 00:57:16.750 ntão estamos copiando tudo para o contêiner. 1063 00:57:16.760 --> 00:57:19.639 m seguida, estamos definindo o diretório de trabalho 1064 00:57:19.709 --> 00:57:22.149 u o diretório padrão dentro do contêiner. 1065 00:57:22.449 --> 00:57:26.500 , em seguida, estamos executando N PM install novamente dentro do contêiner para 1066 00:57:26.510 --> 00:57:30.459 aixe todas as dependências que o aplicativo precisa e que estão definidas aqui. 1067 00:57:30.469 --> 00:57:33.929 , finalmente, precisamos executar o aplicativo, certo? 1068 00:57:34.179 --> 00:57:37.510 ortanto, após a instalação do NP, o comando node deve 1069 00:57:37.520 --> 00:57:41.199 ejam executados e aprendemos a executar comandos. 1070 00:57:41.209 --> 00:57:43.899 samos a diretiva run. 1071 00:57:44.070 --> 00:57:48.360 o entanto, se este for o último comando no arquivo docker, 1072 00:57:48.379 --> 00:57:52.445 ntão, algo que realmente inicia o processo É o aplicativo interno, 1073 00:57:52.455 --> 00:57:56.235 emos uma diretiva diferente para aquela chamada C MD. 1074 00:57:56.435 --> 00:57:58.804 ntão, esse é basicamente o último comando no 1075 00:57:58.814 --> 00:58:01.405 rquivo docker e isso inicia o aplicativo. 1076 00:58:01.614 --> 00:58:03.875 a sintaxe para isso é a 1077 00:58:04.024 --> 00:58:04.685 04.024 1078 00:58:04.925 --> 00:58:05.764 ue é o nó 1079 00:58:06.114 --> 00:58:07.564 o parâmetro 1080 00:58:08.300 --> 00:58:10.050 ponto do servidor Js. 1081 00:58:10.260 --> 00:58:12.979 ntão, copiamos tudo para o aplicativo Slash. 1082 00:58:13.010 --> 00:58:15.860 ortanto, temos o servidor Js dentro do diretório APP 1083 00:58:15.870 --> 00:58:19.229 estamos iniciando ou executando usando node commit. 1084 00:58:19.719 --> 00:58:20.389 isso. 1085 00:58:20.399 --> 00:58:24.139 sse é o arquivo docker completo que criará 1086 00:58:24.149 --> 00:58:27.659 ma imagem docker para nosso aplicativo node Js, 1087 00:58:27.810 --> 00:58:30.989 ue podemos então começar como um contêiner. 1088 00:58:34.239 --> 00:58:39.629 gora temos a definição no arquivo docker. É hora de realmente criar a imagem. 1089 00:58:39.639 --> 00:58:40.739 partir desta definição. 1090 00:58:41.280 --> 00:58:43.840 ou esclarecer isso e sem mudar para o terminal, 1091 00:58:43.850 --> 00:58:45.260 podemos realmente reutilizar este. 1092 00:58:45.429 --> 00:58:50.429 odemos executar um comando docker para criar uma imagem mais escura, o que é muito fácil. 1093 00:58:50.439 --> 00:58:52.389 ós apenas fazemos docker build. 1094 00:58:52.889 --> 00:58:55.560 ntão, temos algumas opções que podemos oferecer. 1095 00:58:55.780 --> 00:58:58.100 primeiro é o nome da imagem. 1096 00:58:58.110 --> 00:59:03.699 ntão, assim como todas essas imagens têm nomes, assim como node ready etc., 1097 00:59:03.979 --> 00:59:05.129 as tags 1098 00:59:05.689 --> 00:59:06.780 ambém podemos 1099 00:59:07.020 --> 00:59:09.580 omeie nossa imagem e dê a ela uma tag específica. 1100 00:59:09.850 --> 00:59:13.459 fazemos isso usando esta opção de traço T 1101 00:59:13.840 --> 00:59:15.429 podemos chamar nosso nó de aplicativo 1102 00:59:15.530 --> 00:59:15.840 plicativo 1103 00:59:16.449 --> 00:59:18.159 alvez com o Dash não importe 1104 00:59:18.469 --> 00:59:19.310 1105 00:59:19.689 --> 00:59:22.010 odemos dar a ele uma tag específica 1106 00:59:22.199 --> 00:59:24.590 omo 1.0, por exemplo. 1107 00:59:24.840 --> 00:59:25.469 1108 00:59:25.719 --> 00:59:28.810 último parâmetro é a localização do arquivo docker. 1109 00:59:29.010 --> 00:59:31.899 ntão, estamos dizendo ao Docker criar uma imagem 1110 00:59:32.044 --> 00:59:33.764 om este nome com esta tag 1111 00:59:33.985 --> 00:59:34.945 partir de 1112 00:59:35.135 --> 00:59:38.375 definição neste arquivo docker específico, certo? 1113 00:59:38.574 --> 00:59:41.754 ortanto, este é o local do arquivo docker neste caso, 1114 00:59:41.764 --> 00:59:45.395 stamos no diretório em que o arquivo Docker está localizado, 1115 00:59:45.405 --> 00:59:47.594 ntão será o diretório atual. 1116 00:59:47.774 --> 00:59:51.834 ntão, esse ponto basicamente se refere à pasta atual 1117 00:59:51.945 --> 00:59:53.794 nde o arquivo Docker está localizado. 1118 00:59:54.040 --> 00:59:56.070 ntão, agora, se executarmos isso 1119 00:59:56.320 --> 00:59:57.229 omo você vê, fazedor 1120 00:59:57.479 --> 00:59:59.129 stá realmente construindo 1121 00:59:59.439 --> 01:00:02.290 imagem do nosso arquivo de locutor 1122 01:00:04.320 --> 01:00:08.370 parece que teve sucesso quando começou a construir a imagem. 1123 01:00:08.379 --> 01:00:11.939 ocê vê essas etapas, aquelas diretivas que definimos aqui. 1124 01:00:11.949 --> 01:00:17.149 ortanto, temos a primeira da diretiva executada. Então temos a cópia 1125 01:00:17.350 --> 01:00:22.629 omo segunda etapa. Em seguida, copiamos o diretório de trabalho de configuração da pasta de origem 1126 01:00:22.899 --> 01:00:26.939 executando N PM install e, em seguida, o último acabou de iniciar o aplicativo. 1127 01:00:27.149 --> 01:00:27.929 ntão agora 1128 01:00:28.459 --> 01:00:30.610 e eu fizer imagens do docker 1129 01:00:30.939 --> 01:00:32.070 lém desses 1130 01:00:32.500 --> 01:00:34.379 magens que baixamos 1131 01:00:34.629 --> 01:00:36.060 nteriormente do Docker Hub, 1132 01:00:36.429 --> 01:00:39.250 deveríamos realmente ver a imagem que acabamos de criar. 1133 01:00:39.260 --> 01:00:42.110 sta é a imagem do aplicativo node com tag 1134 01:00:42.449 --> 01:00:43.510 .0 1135 01:00:43.860 --> 01:00:44.810 algumas outras informações. 1136 01:00:45.379 --> 01:00:46.760 ntão essa é a nossa imagem. 1137 01:00:46.770 --> 01:00:49.870 agora podemos começar esta imagem e trabalhar com ela, 1138 01:00:49.879 --> 01:00:53.989 assim como trabalhamos com qualquer outra imagem baixada do Docker Hub. 1139 01:00:54.000 --> 01:00:57.540 ntão, vamos prosseguir e executar um contêiner a partir deste nó 1140 01:00:57.610 --> 01:01:01.389 magem do aplicativo e certifique-se de que o aplicativo interno esteja realmente funcionando. 1141 01:01:01.629 --> 01:01:02.189 ntão 1142 01:01:02.429 --> 01:01:03.679 amos fazer docker run 1143 01:01:04.310 --> 01:01:04.949 ode 1144 01:01:05.699 --> 01:01:06.159 plicativo 1145 01:01:06.449 --> 01:01:09.550 magem com 1.0 10 1146 01:01:10.219 --> 01:01:13.840 vamos passar o parâmetro para começar desanexado 1147 01:01:13.850 --> 01:01:17.600 850 e também queremos expor a porta corretamente. 1148 01:01:17.860 --> 01:01:18.659 ueremos 1149 01:01:18.830 --> 01:01:22.860 er capaz de acessar o aplicativo, o aplicativo de nó a partir do host local 1150 01:01:23.139 --> 01:01:23.770 1151 01:01:24.000 --> 01:01:27.070 abemos que o aplicativo dentro do contêiner será iniciado 1152 01:01:27.080 --> 01:01:30.419 a Porta 3000 porque é isso que definimos aqui. 1153 01:01:30.540 --> 01:01:33.899 ortanto, o próprio aplicativo será executado na porta 3000. 1154 01:01:34.179 --> 01:01:41.209 ntão, isso está dentro do contêiner, e podemos vinculá-lo a qualquer porta que quisermos no host local 1155 01:01:41.330 --> 01:01:45.010 podemos fazer 3000, o mesmo que no contêiner. 1156 01:01:45.209 --> 01:01:48.679 ortanto, esta é a porta do host e essa é a porta do contêiner. 1157 01:01:49.000 --> 01:01:50.520 agora, se eu executar 1158 01:01:51.159 --> 01:01:52.050 um comando 1159 01:01:52.550 --> 01:01:54.409 faça docker PS, 1160 01:01:54.909 --> 01:01:59.610 evemos ver nosso aplicativo node em execução na porta 3000 1161 01:01:59.800 --> 01:02:01.449 agora a hora da verdade 1162 01:02:01.590 --> 01:02:03.270 oltando ao navegador 1163 01:02:03.850 --> 01:02:06.709 abrindo o anfitrião local 3000 1164 01:02:07.459 --> 01:02:11.429 qui estão nossas boas-vindas ao meu incrível aplicativo 1165 01:02:12.320 --> 01:02:14.610 ensagem do nosso aplicativo. 1166 01:02:14.840 --> 01:02:17.060 podemos até mesmo verificar os registros 1167 01:02:17.370 --> 01:02:19.979 egando o ID do nosso não 1168 01:02:20.169 --> 01:02:20.530 plicativo 1169 01:02:21.189 --> 01:02:23.770 fazendo blocos docker com o ID. 1170 01:02:24.239 --> 01:02:24.800 1171 01:02:25.080 --> 01:02:28.270 ssa é a saída do nosso aplicativo 1172 01:02:28.459 --> 01:02:29.649 entro do contêiner. 1173 01:02:30.040 --> 01:02:30.600 ntão 1174 01:02:30.719 --> 01:02:33.040 assim que é fácil fazer sua inscrição, 1175 01:02:33.050 --> 01:02:38.540 mpacote-o em uma imagem docker usando o arquivo docker e execute-o como um contêiner 1176 01:02:42.189 --> 01:02:46.100 , finalmente, voltando a esta interface gráfica de usuário 1177 01:02:46.110 --> 01:02:49.120 liente que o desktop Docker realmente nos fornece. 1178 01:02:49.330 --> 01:02:54.560 gora também podemos ver todos os nossos contêineres e imagens aqui. 1179 01:02:54.590 --> 01:02:57.479 é assim que esse U I realmente parece, ele te dá uma sensação muito boa 1180 01:02:57.620 --> 01:02:58.219 isão geral 1181 01:02:58.350 --> 01:03:00.510 e quais contêineres você tem. 1182 01:03:00.520 --> 01:03:05.899 uais estão em execução no momento, quais estão parados com seus nomes e assim por diante 1183 01:03:06.060 --> 01:03:09.300 você ainda tem alguns controles aqui para iniciar um 1184 01:03:09.320 --> 01:03:12.969 arou um contêiner assim ou até mesmo parou de novo? 1185 01:03:14.110 --> 01:03:16.669 einicie o contêiner, exclua o que quiser. 1186 01:03:16.870 --> 01:03:19.820 da mesma forma que você tem uma lista de imagens, 1187 01:03:20.250 --> 01:03:21.840 ncluindo nossa própria imagem, 1188 01:03:21.850 --> 01:03:26.570 você também pode criar contêineres diretamente daqui usando alguns controles. 1189 01:03:26.600 --> 01:03:27.159 ntão 1190 01:03:27.290 --> 01:03:31.040 u pessoalmente prefiro a interface de linha de comando para interagir com o Docker. 1191 01:03:31.050 --> 01:03:33.560 as alguns se sentem mais confortáveis usando 1192 01:03:33.719 --> 01:03:35.149 U.I visual 1193 01:03:35.320 --> 01:03:39.379 ntão, o que você preferir, você pode realmente escolher trabalhar com qualquer um deles. 1194 01:03:42.909 --> 01:03:46.879 gora, aprendemos muitos elementos básicos do docker. 1195 01:03:47.010 --> 01:03:47.620 o entanto, 1196 01:03:47.629 --> 01:03:52.169 ambém é interessante ver como o docker realmente se encaixa na íntegra 1197 01:03:52.179 --> 01:03:55.320 rocesso de desenvolvimento e implantação de software com 1198 01:03:55.330 --> 01:03:58.000 uitas outras tecnologias também. 1199 01:03:58.050 --> 01:04:02.745 ntão, quais etapas de todo esse processo são mais sombrias e relevantes. 1200 01:04:02.754 --> 01:04:05.125 ntão, nesta parte final do curso intensivo, 1201 01:04:05.135 --> 01:04:10.764 eremos uma visão geral mais sombria do ciclo de vida do desenvolvimento de software. 1202 01:04:10.774 --> 01:04:15.554 ntão, vamos considerar um cenário simplificado em que você está desenvolvendo um JAVASCRIPT 1203 01:04:15.564 --> 01:04:19.504 plicativo em seu laptop diretamente em seu ambiente de desenvolvimento local. 1204 01:04:20.379 --> 01:04:23.610 eu aplicativo JavaScript usa um Mongo 1205 01:04:23.929 --> 01:04:28.189 anco de dados de banco de dados e, em vez de instalá-lo em seu laptop, 1206 01:04:28.199 --> 01:04:31.570 ocê baixa um contêiner docker do hub do Docker. 1207 01:04:32.030 --> 01:04:35.159 ntão você conecta seu aplicativo JavaScript ao mongo 1208 01:04:35.449 --> 01:04:37.050 B e você começa a desenvolver. 1209 01:04:37.649 --> 01:04:39.649 ntão, agora, digamos que você desenvolva o 1210 01:04:39.659 --> 01:04:42.739 rimeira versão do aplicativo localmente, 1211 01:04:42.750 --> 01:04:47.000 agora você deseja testá-lo ou implantá-lo no, uh, 1212 01:04:47.010 --> 01:04:49.479 mbiente de desenvolvimento onde 1213 01:04:49.639 --> 01:04:52.159 m testador da sua equipe vai testá-lo. 1214 01:04:52.560 --> 01:04:56.300 ntão você confirma seu aplicativo JavaScript no git 1215 01:04:56.310 --> 01:04:58.780 u em algum outro sistema de controle de versão. 1216 01:04:59.169 --> 01:05:03.120 h, isso desencadeará uma integração contínua. 1217 01:05:03.129 --> 01:05:06.139 ma compilação do Jenkins, ou o que você tiver configurado 1218 01:05:06.389 --> 01:05:10.949 a compilação do Jenkins produzirá artefatos do seu aplicativo. 1219 01:05:11.139 --> 01:05:15.080 ntão, primeiro, você criará seu aplicativo JavaScript 1220 01:05:15.280 --> 01:05:16.000 depois 1221 01:05:16.229 --> 01:05:21.550 rie uma imagem docker a partir desse artefato JavaScript. Certo? 1222 01:05:21.879 --> 01:05:26.919 ntão, o que acontece com essa imagem do docker? Depois de criado pelo Jenkins build 1223 01:05:27.229 --> 01:05:28.489 le é empurrado 1224 01:05:28.669 --> 01:05:31.199 ara um repositório docker privado. 1225 01:05:31.209 --> 01:05:35.000 ntão, normalmente, em uma empresa, você teria um repositório privado porque 1226 01:05:35.010 --> 01:05:38.620 ocê não quer que outras pessoas tenham acesso às suas imagens. 1227 01:05:38.629 --> 01:05:40.060 ntão você empurra para lá. 1228 01:05:40.280 --> 01:05:41.169 agora, 1229 01:05:41.479 --> 01:05:48.250 pois a próxima etapa pode ser configurada no Jenkins ou em alguns outros scripts ou ferramentas, que 1230 01:05:48.520 --> 01:05:49.879 magem docker 1231 01:05:50.070 --> 01:05:52.620 eve ser implantado em um servidor de desenvolvimento. 1232 01:05:53.033 --> 01:05:58.614 ntão você tem um servidor de desenvolvimento que extrai a imagem do repositório privado, 1233 01:05:58.864 --> 01:06:02.743 ua imagem de aplicativo JavaScript e, em seguida, puxa o 1234 01:06:03.114 --> 01:06:07.104 B do qual seu aplicativo javascript depende de um hub docker. 1235 01:06:07.114 --> 01:06:09.233 agora você tem dois contêineres, 1236 01:06:09.243 --> 01:06:13.604 m seu contêiner personalizado e um Mogo disponível publicamente 1237 01:06:13.864 --> 01:06:17.874 ontêiner de banco de dados em execução no Dev Server e eles conversam entre si. 1238 01:06:17.884 --> 01:06:18.897 ocê precisa configurá-lo. 1239 01:06:18.907 --> 01:06:23.758 laro, eles conversam e se comunicam entre si e funcionam como um aplicativo. 1240 01:06:23.768 --> 01:06:29.167 ntão, agora, se um testador, por exemplo, ou outro desenvolvedor fizer login 1241 01:06:29.327 --> 01:06:32.558 m um servidor de desenvolvimento, eles poderão testar o aplicativo. 1242 01:06:32.637 --> 01:06:35.847 ortanto, este é um fluxo de trabalho simplificado como docker 1243 01:06:35.857 --> 01:06:38.887 uncionará em um processo de desenvolvimento da vida real. 1244 01:06:38.897 --> 01:06:42.708 ntão, em pouco tempo, nós realmente aprendemos todos os blocos de construção básicos, 1245 01:06:42.718 --> 01:06:44.781 s partes mais importantes do docker. 1246 01:06:44.971 --> 01:06:47.931 ntão você entende o que são imagens, como iniciar contêineres, 1247 01:06:48.052 --> 01:06:50.181 omo eles funcionam e como acessá-los, 1248 01:06:50.191 --> 01:06:54.781 também como realmente criar sua própria imagem docker e executá-la como um contêiner. 1249 01:06:55.152 --> 01:06:59.812 as se você quiser aprender mais sobre o docker e praticar suas habilidades ainda mais 1250 01:06:59.941 --> 01:07:03.152 omo como conectar seu aplicativo a um contêiner docker, 1251 01:07:03.382 --> 01:07:07.132 prenda sobre mais escuros, componha volumes mais escuros, etc. 1252 01:07:07.142 --> 01:07:09.325 ocê pode realmente assistir ao meu trabalho completo 1253 01:07:09.545 --> 01:07:12.075 utorial. E se você quiser aprender, faça 1254 01:07:12.716 --> 01:07:13.966 o contexto de desenvolvedores 1255 01:07:14.656 --> 01:07:19.756 realmente, realmente domine-o com coisas como registros privados usando doer 1256 01:07:19.986 --> 01:07:21.575 ara executar o Jenkins, 1257 01:07:21.656 --> 01:07:24.895 ntegre o docker em pipelines CS CD e 1258 01:07:24.906 --> 01:07:28.236 se-o com várias outras tecnologias, como o terraform 1259 01:07:28.466 --> 01:07:29.335 abilitar, etc. 1260 01:07:29.345 --> 01:07:31.825 ocê pode conferir nosso treinamento completo de devops 1261 01:07:31.835 --> 01:07:34.496 nde você aprende tudo isso e muito mais.