Salve, das Belezas! Continuamos a saga aqui no nosso módulo de Docker. Agora chegou o momento de a gente começar a meter mão na massa com o Docker. Então, vamos executar os nossos primeiros comandos aqui no terminal. Então, vamos lá. Eu recomendei que vocês executassem aquele comando docker run hello world, que é o primeiro comando, é a religião que você tem que fazer, senão você cometeu um pecado. A gente tem que ver se o Docker está funcionando ou não. Então, vamos executar aqui esse comando e vão aparecer algumas informações bem importantes aqui para nós. O comando docker run significa que você vai criar um container baseado na imagem que é passada aqui nesse lugar. Então, a imagem é hello world. A primeira coisa que o docker vai fazer é verificar se ele tem essa imagem local, para não ter que ficar baixando lá do docker hub. Então, ele mostrou a mensagem, olha, não consegui achar a imagem localmente. Então, vou fazer o pooling, ou seja, vou pegar lá do Docker Hub. Ele faz o download dessa imagem. Então, fiz o download ali da versão latest, as imagens têm uma versão. E aí, ele mostra aqui o resultado, aqui o container já está executando, a partir desse reload. Então, o objetivo é só mostrar essa mensagem. E aí, voltou o terminal aqui para mim. Significa que o container, como um processo, ele executou e morreu. Às vezes, eu posso ter um container que vai ficar executando ali indefinidamente até que eu decida destruí-lo. A gente vai ganhando experiência com isso aqui à medida que a gente vai avançando no curso. Então, vamos pegar o DocHub. A gente consegue identificar aqui. Vou digitar Hello World. Inclusive a imagem é provida pela própria equipe da Docker. Vamos ver quantos megas tem essa imagem. Aqui, por caso do Linux Ela tem apenas 2.65 KB Está em compressão, mas é muito baixo Então ele baixou essa imagem E executou um container Vamos fazer agora o comando na nossa máquina docker image ls Eu tenho uma infinidade de imagens aqui. Então, vindo aqui para cima... Peraí, achei que eu tinha chegado... Tem muita imagem aqui. Depois eu tenho que dar uma reduzida no número de imagens. Está aqui. Então, ele vai mostrar para a gente qual é a identificação da imagem, ou seja, qual é o nome dela, como o Hello World. Ele tem um ID, que é um hash para ela. Esse hash é um pouco maior do que está, porque ele está reduzido. Há quanto tempo que foi criado, o tamanho dessa imagem e qual é a tagging. Imagina como se fosse um projeto do Git, você tem a versão dela aqui. Para não demorar para achar esse Hello World, eu posso fazer um ingrap Hello World. E ele vai pegar somente a parte do Hello World. Então, ela sem descompressão está com 13.3 Kbytes, é muito pequeno. E o ID é essa imagem aqui, correspondente ao Hello World. Então, agora ela está na minha máquina. Então, se eu executar o comando novamente, a gente não vai ver mais aquela mensagem que ele não encontrou local e vai baixar. Ele já pega a imagem que já está local, que é muito mais rápido. Mas a qualquer momento também a gente pode matar essa imagem, aí vai acontecer o mesmo processo. Mas aqui nesse Docker Run, ele vai levantar um novo container, sempre. Estou executando aqui, ele está levantando um novo container, está levantando um novo container, está levantando um novo container. Então, são os processos que vão sendo executados na minha máquina. Agora, vamos fazer aqui o seguinte. Vamos executar o Nginx. Vou pegar aqui uma versão específica. Essa versão, eu acredito que esteja na minha máquina até porque ele não precisa baixar então eu vou rodar aqui o Nginx como esse container vai rodar ali o Nginx que é um serviço que vai ficar rodando indefinidamente aí nós vamos ver aqui o log da execução ele levantou o Nginx aqui ele está ali rodando o meu terminal está preso, não consigo fazer mais nada. E aí eu tenho um comando para ver os containers que estão executando na minha máquina. A gente vai fazer um docker container ls. Está aqui. Então, eu tenho um id também para o container que está executando, a qual imagem ele se refere, o comando que iniciou esse container, todo container vai ter um comando que vai startá-lo, que é dessa forma que está aqui. Ele foi criado há 29 segundos atrás e o status está up, e ele foi criado a 29 segundos atrás e o status está up, porque ele poderia estar como destruído aqui, poderia estar como, na verdade, destruído não, poderia estar como parado. Tem a porta também que ele está rodando lá dentro, a gente já viu o conceito de namespace, então não adianta você tentar acessar na sua máquina que você não vai conseguir, a gente vai ver isso depois. E um nome aleatório. O Docker vai criando nomes aleatórios. Nomes têm que ser únicos. O ID ele já cria aleatoriamente. Mas o nome eu posso delimitar se eu quiser. Mas olha que interessante essa questão. Por que ele não mostrou o Hello World aqui? O Hello World morreu. Esse container ls, que também eu posto um outro alias para ele, o docker ps, a mesma coisa, ele só mostra os containers que estão ativos. Se eu fizer o docker ls, docker container ls menos a, ou docker pscontainer-ls-a ou docker-ps-a, ele vai mostrar para mim containers que não estão em execução. Aqui tem ali o exit. Ele saiu. Para ver o Hello World, a gente pode fazer um Hello World aqui. Você não tem que executar isso, provavelmente você não tem nada na sua máquina se você está iniciando agora. Mas aqui eu tenho vários containers. Mas por que eu tenho vários? Porque cada vez que você está executando um docker run, um novo container que é criado, o container executou, morre, e ele fica registrado aqui. Então, está vendo? Dois minutos atrás, dois minutos, seis minutos, oito minutos, e ele vai criando os nomes aleatórios. Então, esses dois comandos aqui são muito úteis. Como eu faço para poder parar esse index aqui? Se eu dar um Ctrl C, ele volta o terminal para mim. Então, a gente pode fazer aqui também agora um docker container ls não vai ter nada, porque eu não tenho nenhum container executando. Agora, com o "-a", com o wrapper do enginex, eu tenho esse que foi executado. Então, ele está com status que ele foi fechado. Isso aqui significa que ele não está executando no momento. Se eu quiser também fazer uma execução de um container, fazendo limitação, lembra lá do cgroups? Se eu quiser fazer uma limitação de memória e CPU. Não é obrigado você passar os dois? Se eu quiser fazer uma limitação de memória e de CPU. Não é obrigado você passar os dois, mas eu posso fazer assim. Docker run. Aí eu coloco menos menos CPUs. E aqui eu coloco como se fosse porcentagem. Eu quero que esse Nginx execute com 50%. E o tanto de memória RAM máximo vai ser 512M. Tem que colocar o M para ser um mega ali. Então, o resultado vai ser o mesmo, mas agora eu enjaulei mais esse container ainda, porque ele vai ter 50% da minha CPU e vai ser considerado a CPU que você tem disponível na sua máquina e 512 MB de memória. Então, isso aqui é muito comum quando a gente está num cenário que eu quero limitar os recursos ou quando eu estou lá em produção para ele não executar tudo porque eu posso executar réplicas desse container e tudo mais. Então, a gente já viu aqui como que é um pouco da dinâmica. Docker Run é o comando que sempre a gente levanta um novo container. Então, pessoal,