[Script Info] Title: [Events] Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text Dialogue: 0,0:00:08.95,0:00:13.04,Default,,0000,0000,0000,,Um dos passos mais importantes quando\Nnós falamos da utilização de Docker Dialogue: 0,0:00:13.04,0:00:16.73,Default,,0000,0000,0000,,é justamente aprender a criar\No nosso próprio Docker, Dialogue: 0,0:00:16.73,0:00:19.72,Default,,0000,0000,0000,,ou pelo menos a nossa\Nprópria imagem. Dialogue: 0,0:00:20.28,0:00:23.41,Default,,0000,0000,0000,,Para isso, nós vamos ter que utilizar\Nalgumas ferramentas. Dialogue: 0,0:00:23.41,0:00:29.69,Default,,0000,0000,0000,,A primeira e provavelmente mais importante\Nnesse processo vai ser o Dockerfile. Dialogue: 0,0:00:29.69,0:00:34.92,Default,,0000,0000,0000,,Ele é basicamente um arquivo que vai permitir\Nque eu passe instruções para o Docker Dialogue: 0,0:00:34.92,0:00:37.66,Default,,0000,0000,0000,,de como ele deve\Nconstruir aquela imagem. Dialogue: 0,0:00:37.66,0:00:41.50,Default,,0000,0000,0000,,Antes de mais nada, eu vou precisar\Npelo menos de algum código Dialogue: 0,0:00:41.50,0:00:45.24,Default,,0000,0000,0000,,para que eu consiga colocar\Nem desenvolvimento. Dialogue: 0,0:00:45.24,0:00:51.15,Default,,0000,0000,0000,,Para isso, eu peguei um códigozinho bem\Nsimples de "hello, world" baseado em Node, Dialogue: 0,0:00:51.15,0:00:55.24,Default,,0000,0000,0000,,é basicamente uma página que tem\Num campinho de preenchimento de busca Dialogue: 0,0:00:55.24,0:00:59.24,Default,,0000,0000,0000,,e um botãozinho, mas essa função\Nnão tem nada programado, Dialogue: 0,0:00:59.24,0:01:02.54,Default,,0000,0000,0000,,é realmente só para nós\Ntermos um código para utilizar. Dialogue: 0,0:01:02.54,0:01:06.36,Default,,0000,0000,0000,,Nesse caso, nós vamos\Nutilizar um código em Node Dialogue: 0,0:01:06.36,0:01:11.33,Default,,0000,0000,0000,,e, justamente por isso, eu preciso utilizar,\Ncomo base para a minha imagem, Dialogue: 0,0:01:11.33,0:01:15.38,Default,,0000,0000,0000,,uma imagem que já tenha um Node\Npronto para eu poder utilizar. Dialogue: 0,0:01:15.38,0:01:18.11,Default,,0000,0000,0000,,Caso nós não achemos\Numa imagem dessa forma, Dialogue: 0,0:01:18.11,0:01:21.73,Default,,0000,0000,0000,,nós podemos passar comandos\Ndentro de um container Dialogue: 0,0:01:21.73,0:01:25.80,Default,,0000,0000,0000,,para que ele faça todo o processo\Nde instalação daquele software Dialogue: 0,0:01:25.80,0:01:29.39,Default,,0000,0000,0000,,e disponibilize todo aquele\Nambiente montado para nós. Dialogue: 0,0:01:29.39,0:01:34.14,Default,,0000,0000,0000,,Aqui dentro da minha tela, eu vou ter,\Nentão, uma pasta chamada "app", Dialogue: 0,0:01:34.14,0:01:39.63,Default,,0000,0000,0000,,que eu criei dentro do meu desktop,\Ne nela eu vou ter alguns arquivos. Dialogue: 0,0:01:40.64,0:01:46.61,Default,,0000,0000,0000,,O "yarn.lock", o "package",\Na pasta "src" e a pasta "spec" Dialogue: 0,0:01:46.61,0:01:51.05,Default,,0000,0000,0000,,são justamente conteúdos que eu\Ntenho dessa minha aplicação. Dialogue: 0,0:01:51.05,0:01:56.27,Default,,0000,0000,0000,,Se eu abro, por exemplo, aqui,\No "src", eu vou ter um "index.js", Dialogue: 0,0:01:56.27,0:02:00.84,Default,,0000,0000,0000,,que vai ser, justamente, o arquivo\Ninicial da minha aplicação. Dialogue: 0,0:02:02.27,0:02:06.14,Default,,0000,0000,0000,,Aqui nessa pasta, eu ainda tenho\No arquivo chamado Dockerfile. Dialogue: 0,0:02:06.14,0:02:09.17,Default,,0000,0000,0000,,Esse é o arquivo que vai\Ntrazer todas as instruções Dialogue: 0,0:02:09.17,0:02:12.76,Default,,0000,0000,0000,,que o Docker precisa\Npara construir a nossa imagem. Dialogue: 0,0:02:13.32,0:02:15.89,Default,,0000,0000,0000,,Existem algumas características\Nmuito importantes Dialogue: 0,0:02:15.89,0:02:17.92,Default,,0000,0000,0000,,que nós temos\Nque nos atentar nele, Dialogue: 0,0:02:17.92,0:02:23.24,Default,,0000,0000,0000,,a primeira delas é que esse\Narquivo não tem extensão, Dialogue: 0,0:02:24.14,0:02:27.99,Default,,0000,0000,0000,,a segunda é que ele sempre\Nvai começar com D maiúsculo Dialogue: 0,0:02:27.99,0:02:30.77,Default,,0000,0000,0000,,e Dockerfile vai estar\Nescrito tudo junto. Dialogue: 0,0:02:30.77,0:02:34.46,Default,,0000,0000,0000,,Eu preciso justamente prestar\Natenção em todos esses padrões Dialogue: 0,0:02:34.46,0:02:37.42,Default,,0000,0000,0000,,para que eu não impeça\No Docker de achar o arquivo Dialogue: 0,0:02:37.42,0:02:40.12,Default,,0000,0000,0000,,e, assim, começar o processo\Nde build da imagem. Dialogue: 0,0:02:40.12,0:02:45.25,Default,,0000,0000,0000,,Agora, como eu valido isso aqui\Ndentro dos meus arquivos? Dialogue: 0,0:02:45.25,0:02:49.55,Default,,0000,0000,0000,,Basta eu vir na aba de visualização\Ndo Explorer no Windows Dialogue: 0,0:02:49.55,0:02:56.03,Default,,0000,0000,0000,,e marcar a opção "file name extensions"\Nou mostrar extensões de arquivo. Dialogue: 0,0:02:56.03,0:03:00.02,Default,,0000,0000,0000,,Note que agora todos os meus\Narquivos ganharam uma extensão, Dialogue: 0,0:03:00.02,0:03:02.17,Default,,0000,0000,0000,,menos o dockerfile. Dialogue: 0,0:03:02.17,0:03:07.81,Default,,0000,0000,0000,,Pode ser que, quando você criou o arquivo\Nutilizando, por exemplo, o bloco de notas, Dialogue: 0,0:03:07.81,0:03:11.94,Default,,0000,0000,0000,,ele tivesse mostrado\Numa opção como txt. Dialogue: 0,0:03:11.94,0:03:16.53,Default,,0000,0000,0000,,Caso ele tenha aparecido como txt\Nno final, basta apertar a tecla F2 Dialogue: 0,0:03:16.53,0:03:22.69,Default,,0000,0000,0000,,e renomear o arquivo, excluindo\No ".txt" e deixando apenas "dockerfile". Dialogue: 0,0:03:22.69,0:03:27.42,Default,,0000,0000,0000,,O Windows vai pedir que você confirme\Nque aquele arquivo não vai ter uma extensão, Dialogue: 0,0:03:27.42,0:03:30.83,Default,,0000,0000,0000,,basta confirmar e seguir\Npara as próximas etapas. Dialogue: 0,0:03:30.83,0:03:34.18,Default,,0000,0000,0000,,Quando nós abrimos o Dockerfile\Ndentro de um bloco de notas, Dialogue: 0,0:03:34.18,0:03:36.99,Default,,0000,0000,0000,,nós vamos ter uma estrutura\Naté bem simples. Dialogue: 0,0:03:36.99,0:03:40.98,Default,,0000,0000,0000,,A primeira coisa que nós vamos\Nver é justamente um comentário Dialogue: 0,0:03:40.98,0:03:46.42,Default,,0000,0000,0000,,definindo qual tipo de sintaxe nós estamos\Nutilizando para construção desse arquivo. Dialogue: 0,0:03:46.42,0:03:49.36,Default,,0000,0000,0000,,Nesse caso, uma sintaxe de versão 1. Dialogue: 0,0:03:49.36,0:03:54.53,Default,,0000,0000,0000,,As linhas de comando que definem a sintaxe\Nestão lá na documentação do Docker. Dialogue: 0,0:03:54.53,0:03:59.30,Default,,0000,0000,0000,,Por hora, você pode simplesmente copiar\Nessa linha para todos os seus arquivos Dialogue: 0,0:03:59.30,0:04:02.42,Default,,0000,0000,0000,,e tudo vai correr sem\Nmaiores problemas. Dialogue: 0,0:04:02.42,0:04:05.96,Default,,0000,0000,0000,,Agora, caso você se torne\Num usuário avançado de Docker, Dialogue: 0,0:04:05.96,0:04:12.05,Default,,0000,0000,0000,,algumas funções só vão estar disponíveis\Nem versões específicas do Dockerfile, Dialogue: 0,0:04:12.05,0:04:16.88,Default,,0000,0000,0000,,então você vai ter que ficar atento\Na qual tipo de Dockerfile utilizar Dialogue: 0,0:04:16.88,0:04:21.24,Default,,0000,0000,0000,,para poder criar exatamente\No container da forma que você precisa. Dialogue: 0,0:04:21.24,0:04:25.33,Default,,0000,0000,0000,,Logo em seguida, eu tenho\Num comando chamado "FROM". Dialogue: 0,0:04:25.33,0:04:31.17,Default,,0000,0000,0000,,Esse comando serve para eu especificar\Nqual imagem de base que eu vou utilizar. Dialogue: 0,0:04:31.17,0:04:37.26,Default,,0000,0000,0000,,Nesse caso, uma imagem chamada\N"node" na versão "12-alpine". Dialogue: 0,0:04:37.26,0:04:42.63,Default,,0000,0000,0000,,É justamente aqui, por exemplo, que caso eu\Nqueira criar um container totalmente do zero Dialogue: 0,0:04:42.63,0:04:45.56,Default,,0000,0000,0000,,utilizando só um sistema\Noperacional de base, Dialogue: 0,0:04:45.56,0:04:49.52,Default,,0000,0000,0000,,eu vou conseguir especificar que eu\Nquero esse sistema operacional. Dialogue: 0,0:04:49.52,0:04:52.99,Default,,0000,0000,0000,,Se eu quisesse, por exemplo,\Ncriar um servidor Apache do zero, Dialogue: 0,0:04:52.99,0:04:58.47,Default,,0000,0000,0000,,eu poderia fazer um FROM Ubuntu\Ne, nos comandos que se seguem, Dialogue: 0,0:04:58.47,0:05:02.20,Default,,0000,0000,0000,,fazer todo o passo a passo\Nde instalação do Apache. Dialogue: 0,0:05:02.20,0:05:08.14,Default,,0000,0000,0000,,Nesse caso, nós já estamos reaproveitando\Nparte da estrutura do Node que já está pronta Dialogue: 0,0:05:08.14,0:05:11.30,Default,,0000,0000,0000,,e, aí, eu só preciso rodar\Nalguns poucos comandos Dialogue: 0,0:05:11.30,0:05:14.50,Default,,0000,0000,0000,,e copiar os meus arquivos\Npara dentro do container. Dialogue: 0,0:05:14.50,0:05:19.20,Default,,0000,0000,0000,,Nosso próximo passo, então,\Né rodar um "apk add" Dialogue: 0,0:05:19.20,0:05:24.52,Default,,0000,0000,0000,,para garantir que eu tenho\Num python2, o compilador C Dialogue: 0,0:05:24.52,0:05:27.25,Default,,0000,0000,0000,,e o make dentro\Nda minha máquina. Dialogue: 0,0:05:27.78,0:05:33.42,Default,,0000,0000,0000,,O nosso próximo passo, então, vai\Nser criar um diretório de trabalho, Dialogue: 0,0:05:33.42,0:05:35.75,Default,,0000,0000,0000,,nesse caso, chamado "app". Dialogue: 0,0:05:35.75,0:05:40.24,Default,,0000,0000,0000,,Esse diretório de trabalho vai\Nbasicamente informar para o container Dialogue: 0,0:05:40.24,0:05:43.22,Default,,0000,0000,0000,,qual pasta ele deve utilizar\Npara poder trabalhar. Dialogue: 0,0:05:43.22,0:05:49.23,Default,,0000,0000,0000,,Note que todo o nosso conteúdo do arquivo\Nestá dentro de uma pasta chamada "app", Dialogue: 0,0:05:49.23,0:05:52.66,Default,,0000,0000,0000,,dessa forma, eu vou conseguir\Nnavegar para dentro dessa pasta, Dialogue: 0,0:05:52.66,0:05:55.18,Default,,0000,0000,0000,,utilizar ela como pasta padrão Dialogue: 0,0:05:55.18,0:05:58.77,Default,,0000,0000,0000,,e, a partir de então, começar\Na executar os demais comandos. Dialogue: 0,0:05:58.77,0:06:04.39,Default,,0000,0000,0000,,O comando "COPY" serve justamente para eu\Ncopiar arquivos para dentro do container. Dialogue: 0,0:06:04.39,0:06:08.99,Default,,0000,0000,0000,,Ele vai copiar todos os arquivos\Nda pasta que eu me encontro, Dialogue: 0,0:06:08.99,0:06:14.63,Default,,0000,0000,0000,,por isso o ponto, para a pasta que eu\Nestarei utilizando dentro do container, Dialogue: 0,0:06:14.63,0:06:17.56,Default,,0000,0000,0000,,por isso, eu vou utilizar\N"." novamente. Dialogue: 0,0:06:17.56,0:06:19.81,Default,,0000,0000,0000,,E aqui vai vir um ponto\Nbem interessante: Dialogue: 0,0:06:19.81,0:06:23.47,Default,,0000,0000,0000,,a cópia do arquivo não é\Nexatamente uma boa prática, Dialogue: 0,0:06:23.47,0:06:29.47,Default,,0000,0000,0000,,como nós vimos, se nós não soubermos utilizar\No armazenamento de arquivos de forma correta, Dialogue: 0,0:06:29.47,0:06:32.83,Default,,0000,0000,0000,,isso vai atrapalhar o bom\Nfuncionamento de um container. Dialogue: 0,0:06:32.83,0:06:37.40,Default,,0000,0000,0000,,A questão, nesse caso, é que, como eu\Nestou criando um container novo, Dialogue: 0,0:06:37.40,0:06:42.19,Default,,0000,0000,0000,,eu preciso passar todos os códigos\Nque vão servir de base para ele, Dialogue: 0,0:06:42.19,0:06:47.01,Default,,0000,0000,0000,,então eu posso copiar esses arquivos\Nsem a menor dor de cabeça, Dialogue: 0,0:06:47.01,0:06:50.48,Default,,0000,0000,0000,,já que eles vão passar\Na ser parte fundamental Dialogue: 0,0:06:50.48,0:06:52.59,Default,,0000,0000,0000,,de todo o container\Nque eu estou criando. Dialogue: 0,0:06:52.59,0:06:54.27,Default,,0000,0000,0000,,O passo seguinte, então, Dialogue: 0,0:06:54.27,0:07:00.56,Default,,0000,0000,0000,,é garantir que esse meu sistema esteja\Nutilizando um ambiente de produção. Dialogue: 0,0:07:00.56,0:07:03.30,Default,,0000,0000,0000,,Para isso, eu posso\Nexecutar um "yarn install". Dialogue: 0,0:07:03.30,0:07:06.51,Default,,0000,0000,0000,,Esse comando é um comando\Nque pertence ao ambiente Node Dialogue: 0,0:07:06.51,0:07:10.25,Default,,0000,0000,0000,,e serve basicamente para instalar\Ntodos os pacotes necessários Dialogue: 0,0:07:10.25,0:07:13.62,Default,,0000,0000,0000,,e preparar o ambiente para a execução\Ndaquela minha aplicação. Dialogue: 0,0:07:13.62,0:07:17.36,Default,,0000,0000,0000,,Em seguida, eu vou\Nutilizar o "CMD", Dialogue: 0,0:07:17.36,0:07:22.82,Default,,0000,0000,0000,,que é basicamente uma forma de criar\Nlinhas de comando dentro do container. Dialogue: 0,0:07:22.82,0:07:27.27,Default,,0000,0000,0000,,Nesse caso, eu estou chamando\No comando Node e informando para ele Dialogue: 0,0:07:27.27,0:07:34.97,Default,,0000,0000,0000,,que o arquivo de origem da minha aplicação\Nestá dentro da pasta "src/index". Dialogue: 0,0:07:34.97,0:07:38.59,Default,,0000,0000,0000,,E esse é exatamente o caminho\Nque nós checamos agora há pouco Dialogue: 0,0:07:38.59,0:07:41.60,Default,,0000,0000,0000,,de onde estava o index\Nda minha aplicação. Dialogue: 0,0:07:41.60,0:07:45.58,Default,,0000,0000,0000,,Então, a partir do momento que eu copiei\Nesses dados para dentro do container, Dialogue: 0,0:07:45.58,0:07:48.67,Default,,0000,0000,0000,,eu, agora, mostrei para o Node\Ncomo executá-lo. Dialogue: 0,0:07:48.67,0:07:53.04,Default,,0000,0000,0000,,Por fim, eu estou fazendo\Num "EXPOSE" da porta 3000. Dialogue: 0,0:07:53.04,0:07:56.11,Default,,0000,0000,0000,,Esse comando serve\Njustamente para eu informar Dialogue: 0,0:07:56.11,0:07:59.30,Default,,0000,0000,0000,,que eu vou ter que acessar\Numa porta desse container, Dialogue: 0,0:07:59.30,0:08:03.59,Default,,0000,0000,0000,,dessa forma, na hora que eu for criar\No container para colocá-lo em execução, Dialogue: 0,0:08:03.59,0:08:07.70,Default,,0000,0000,0000,,o Docker vai saber que eu posso\Nter uma conexão de rede ali Dialogue: 0,0:08:07.70,0:08:10.29,Default,,0000,0000,0000,,e vai permitir a criação\Ndessa interação. Dialogue: 0,0:08:10.29,0:08:15.33,Default,,0000,0000,0000,,Outro detalhe muito importante é que eu\Ntenho duas formas de executar comandos. Dialogue: 0,0:08:15.33,0:08:18.93,Default,,0000,0000,0000,,A primeira é a partir\Ndo comando "run". Dialogue: 0,0:08:18.93,0:08:25.00,Default,,0000,0000,0000,,O run vai simplesmente executar aquela\Nlinha de comando dentro do meu container Dialogue: 0,0:08:25.00,0:08:28.88,Default,,0000,0000,0000,,na hora que eu estiver fazendo\Ntoda a parte de construção dele. Dialogue: 0,0:08:28.88,0:08:33.01,Default,,0000,0000,0000,,Enquanto isso, CMD vão ser\Ncomandos que vão ser executados Dialogue: 0,0:08:33.01,0:08:35.52,Default,,0000,0000,0000,,posteriormente à criação\Ndo meu container. Dialogue: 0,0:08:35.52,0:08:41.52,Default,,0000,0000,0000,,Dessa forma, quando eu crio lá o CMD chamando\Num comando Node e passando o index, Dialogue: 0,0:08:41.52,0:08:46.76,Default,,0000,0000,0000,,toda vez que esse container for colocado\Nem execução, esse comando vai ser chamado. Dialogue: 0,0:08:46.76,0:08:49.100,Default,,0000,0000,0000,,Agora que todo esse\Nprocesso está finalizado, Dialogue: 0,0:08:49.100,0:08:54.45,Default,,0000,0000,0000,,eu posso utilizar esses arquivos\Npara construir o meu container. Dialogue: 0,0:08:54.45,0:09:00.67,Default,,0000,0000,0000,,Utilizando, então, o prompt de comando, eu\Nvou poder recorrer a uma função chamada Dialogue: 0,0:09:01.41,0:09:02.98,Default,,0000,0000,0000,,"docker build". Dialogue: 0,0:09:02.98,0:09:05.11,Default,,0000,0000,0000,,Esse comando é\Num comando bem simples Dialogue: 0,0:09:05.11,0:09:08.28,Default,,0000,0000,0000,,e não tem muita coisa que nós\Ntemos que configurar nele. Dialogue: 0,0:09:08.28,0:09:12.85,Default,,0000,0000,0000,,Nesse caso, por exemplo, nós\Nsó vamos nomear a imagem Dialogue: 0,0:09:12.85,0:09:16.79,Default,,0000,0000,0000,,e, em seguida, informar o endereço,\Npara o Dockerfile, que vai ser utilizado. Dialogue: 0,0:09:16.79,0:09:21.90,Default,,0000,0000,0000,,Para isso, eu vou informar o "-t"\Nseguido do nome da imagem. Dialogue: 0,0:09:23.63,0:09:29.27,Default,,0000,0000,0000,,Nesse caso, eu vou chamar ela de "ola"\Ne, em seguida, eu vou informar um ponto. Dialogue: 0,0:09:29.27,0:09:35.51,Default,,0000,0000,0000,,A função desse ponto é informar que eu já\Nestou na pasta onde eu tenho o Dockerfile, Dialogue: 0,0:09:35.51,0:09:39.23,Default,,0000,0000,0000,,caso eu não esteja nessa pasta,\Nao invés de informar o ponto, Dialogue: 0,0:09:39.23,0:09:43.65,Default,,0000,0000,0000,,eu vou ter que informar todo\No endereçamento de pasta Dialogue: 0,0:09:43.65,0:09:48.15,Default,,0000,0000,0000,,e esse endereçamento vai variar\Nentre sistemas operacionais. Dialogue: 0,0:09:48.15,0:09:52.63,Default,,0000,0000,0000,,A forma mais fácil, então, é utilizar\Nos comandos de navegação de terminal, Dialogue: 0,0:09:52.63,0:09:56.43,Default,,0000,0000,0000,,como CD, para poder\Nnavegar pelos diretórios Dialogue: 0,0:09:56.43,0:09:59.36,Default,,0000,0000,0000,,e, chegando no diretório\Nque tem o Dockerfile, Dialogue: 0,0:09:59.36,0:10:03.90,Default,,0000,0000,0000,,simplesmente executar o "docker build"\Ncom o ponto no final. Dialogue: 0,0:10:03.90,0:10:08.98,Default,,0000,0000,0000,,Executando, então, o processo de build,\Nvárias coisas vão ser executadas. Dialogue: 0,0:10:08.98,0:10:12.44,Default,,0000,0000,0000,,A primeira delas é todo\No download de imagens, Dialogue: 0,0:10:12.44,0:10:17.96,Default,,0000,0000,0000,,seguido da construção das aplicações,\Ne todo o teste de funcionamento Dialogue: 0,0:10:17.96,0:10:21.25,Default,,0000,0000,0000,,para ver se o comando inicial\Nvai ser executado com sucesso. Dialogue: 0,0:10:21.25,0:10:27.96,Default,,0000,0000,0000,,Caso você possua alguma falha nesse processo,\Nvocê pode recorrer ao "docker logs". Dialogue: 0,0:10:27.96,0:10:32.03,Default,,0000,0000,0000,,Esse é um comando que nos permite\Nchecar logs no ambiente Docker. Dialogue: 0,0:10:32.03,0:10:36.56,Default,,0000,0000,0000,,Inclusive é legal que você pode utilizar\Nele para checar logs individualmente Dialogue: 0,0:10:36.56,0:10:37.86,Default,,0000,0000,0000,,de cada container. Dialogue: 0,0:10:37.86,0:10:40.57,Default,,0000,0000,0000,,Com o processo de build concluído, Dialogue: 0,0:10:40.57,0:10:45.41,Default,,0000,0000,0000,,o Docker sempre vai perguntar se você não\Nquer fazer um scan de vulnerabilidades. Dialogue: 0,0:10:45.41,0:10:47.88,Default,,0000,0000,0000,,Nesse caso, não\Nvai ser preciso. Dialogue: 0,0:10:47.88,0:10:52.88,Default,,0000,0000,0000,,A única coisa que nos falta agora é colocar,\Njustamente, esse container em execução. Dialogue: 0,0:10:52.88,0:10:56.29,Default,,0000,0000,0000,,Para isso, nós vamos recorrer\Nao comando "docker run", Dialogue: 0,0:10:56.29,0:11:00.46,Default,,0000,0000,0000,,só que, dessa vez, eu vou ter que passar\Nalguns parâmetros de execução para ele. Dialogue: 0,0:11:00.46,0:11:03.40,Default,,0000,0000,0000,,O primeiro parâmetro vai\Nser justamente para garantir Dialogue: 0,0:11:03.40,0:11:07.13,Default,,0000,0000,0000,,que essa imagem vai ficar\Nem execução o tempo todo. Dialogue: 0,0:11:07.13,0:11:09.77,Default,,0000,0000,0000,,Para isso, vou utilizar o "-d". Dialogue: 0,0:11:09.77,0:11:17.44,Default,,0000,0000,0000,,Enquanto o segundo parâmetro, "-p", vai ser\Npara informar o apontamento de portas de rede, Dialogue: 0,0:11:17.44,0:11:21.71,Default,,0000,0000,0000,,dessa forma, todo o conteúdo da minha\Naplicação vai ficar disponível para acesso. Dialogue: 0,0:11:21.71,0:11:25.50,Default,,0000,0000,0000,,Para executar, então, o container\Nque nós acabamos de criar, Dialogue: 0,0:11:25.50,0:11:27.59,Default,,0000,0000,0000,,eu vou fazer um "docker run", Dialogue: 0,0:11:31.66,0:11:32.62,Default,,0000,0000,0000,,"-d", Dialogue: 0,0:11:33.39,0:11:36.43,Default,,0000,0000,0000,,"-p", para informar a porta, Dialogue: 0,0:11:36.43,0:11:44.34,Default,,0000,0000,0000,,e, nesse caso, eu expus a porta 3000,\Nentão eu vou utilizar "3000 : 3000". Dialogue: 0,0:11:44.34,0:11:50.21,Default,,0000,0000,0000,,A razão de eu ter que repetir o 3000 duas vezes\Né porque eu estou falando de duas portas. Dialogue: 0,0:11:50.21,0:11:56.06,Default,,0000,0000,0000,,A primeira é a porta na minha máquina base\Ne a segunda é a porta do meu container, Dialogue: 0,0:11:56.86,0:12:02.25,Default,,0000,0000,0000,,Se eu especifico, por exemplo, a primeira\Nporta, que é a da máquina base, como 80, Dialogue: 0,0:12:02.25,0:12:08.09,Default,,0000,0000,0000,,ela vai apontar um acesso realizado\Nna porta 80 do meu servidor base Dialogue: 0,0:12:08.09,0:12:11.36,Default,,0000,0000,0000,,para a porta 3000\Ndo meu container. Dialogue: 0,0:12:12.20,0:12:15.43,Default,,0000,0000,0000,,Isso é algo que nós temos\Nque prestar bastante atenção, Dialogue: 0,0:12:15.43,0:12:17.70,Default,,0000,0000,0000,,às vezes, quando nós\Nvamos criar uma aplicação, Dialogue: 0,0:12:17.70,0:12:22.37,Default,,0000,0000,0000,,nós temos vários containers\Nque têm exposta a porta 80 Dialogue: 0,0:12:22.37,0:12:26.98,Default,,0000,0000,0000,,e eu posso apontar diversas portas\Npara dentro desses containers, Dialogue: 0,0:12:26.98,0:12:30.78,Default,,0000,0000,0000,,utilizando numerações\Ndiferentes no meu host base. Dialogue: 0,0:12:30.78,0:12:36.63,Default,,0000,0000,0000,,O próximo passo, então, é informar o nome\Nda minha imagem, nesse caso, "ola". Dialogue: 0,0:12:36.63,0:12:42.36,Default,,0000,0000,0000,,Colocando a imagem em execução, eu\Nvou receber o código de validação dela Dialogue: 0,0:12:42.36,0:12:45.36,Default,,0000,0000,0000,,e, se eu executar um "docker ps", Dialogue: 0,0:12:45.36,0:12:49.17,Default,,0000,0000,0000,,note que essa minha imagem\Njá se encontra em execução Dialogue: 0,0:12:49.17,0:12:55.74,Default,,0000,0000,0000,,e me informando que a porta 3000 está\Napontando para a porta 3000 do container. Dialogue: 0,0:12:55.74,0:12:59.38,Default,,0000,0000,0000,,O último passo, então,\Né abrir o navegador web Dialogue: 0,0:12:59.38,0:13:04.08,Default,,0000,0000,0000,,e acessar, justamente, a nossa\Nmáquina na porta 3000. Dialogue: 0,0:13:04.08,0:13:11.06,Default,,0000,0000,0000,,O IP que eu informei aqui 127.0.0.1\Né o que se chama de local host, Dialogue: 0,0:13:11.06,0:13:13.76,Default,,0000,0000,0000,,ele representa a própria\Nmáquina na rede. Dialogue: 0,0:13:13.76,0:13:19.83,Default,,0000,0000,0000,,Outra forma que você teria era escrever\Npor extenso "local host: 3000". Dialogue: 0,0:13:19.83,0:13:25.40,Default,,0000,0000,0000,,Qualquer uma das duas formas já faria com que\Ntoda a interface funcionasse normalmente. Dialogue: 0,0:13:25.40,0:13:28.51,Default,,0000,0000,0000,,No nosso caso, após\Nacessar a aplicação, Dialogue: 0,0:13:28.51,0:13:33.31,Default,,0000,0000,0000,,todo o código que nós criamos e compilamos\Njá está aqui disponível para uso Dialogue: 0,0:13:33.31,0:13:39.85,Default,,0000,0000,0000,,e eu consigo, por exemplo, ir adicionando\Nitens dentro dessa minha aplicação. Dialogue: 0,0:13:39.85,0:13:42.69,Default,,0000,0000,0000,,Esse é um exemplo\Nde uma aplicação bem simples, Dialogue: 0,0:13:42.69,0:13:46.64,Default,,0000,0000,0000,,só para nós entendermos como é que eu\Ncomeço a construir todo esse ambiente. Dialogue: 0,0:13:47.36,0:13:50.70,Default,,0000,0000,0000,,A partir de agora, você pode\Nutilizar esses conhecimentos Dialogue: 0,0:13:50.70,0:13:54.30,Default,,0000,0000,0000,,para começar a containerizar\Nas suas próprias aplicações Dialogue: 0,0:13:54.30,0:13:58.30,Default,,0000,0000,0000,,e, com isso, entender um pouco mais\Ncomo todo esse ecossistema funciona.