Olá pessoal!!!
Bora pro nosso segundo Post no Blog \o/.
O intuito desse post não é explicar o que é Container, o que é Docker, contar história, etc. (Embora isso seja de EXTREMA importância na minha opinião, por isso indico fortemente que leiam).
Quero mostrar de forma prática e obetiva os COMANDOS INICIAIS para quem está chegando no Docker, esse post será o primeiro de uma sequência de posts a respeito de Containers Docker que irei fazer conforme a evolução dos meus estudos!
Let’s go!
>> Instalando o Docker com a versão mais recente
O legal dessa forma de instalação é que o script já faz TUDO pra você, inclusive adicionar o daemon do Docker para startar automático na inicialização do Sistema Operacional!
~# curl -fsSL https://get.docker.com |sh
>> Verificando a versão instalada
No comando abaixo vemos que a versão já é a Community Edition do Docker que é indicado pelo sufixo da versão “ce”.
~# docker --version Docker version 17.04.0-ce, build 4845c56
>> Verificando o status do Docker
Aqui podemos ver que o nosso Docker está “rodando” e prontinho pra ser utilizado!
~# ps -ef |grep docker root 3209 2572 0 14:03 pts/0 00:00:00 grep --color=auto docker root 26076 1 0 11:08 ? 00:00:11 /usr/bin/dockerd -H fd:// root 26086 26076 0 11:08 ? 00:00:06 docker-containerd -l unix:///var/run/docker/libcontainerd/docker-containerd.sock --metrics-interval=0 --start-timeout 2m --state-dir /var/run/docker/libcontainerd/containerd --shim docker-containerd-shim --runtime docker-runc
ou…
~# service docker status ● docker.service - Docker Application Container Engine Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled) Active: active (running) since Seg 2017-04-10 11:08:59 BRT; 2h 55min ago Docs: https://docs.docker.com Main PID: 26076 (dockerd) Tasks: 23 Memory: 42.7M CPU: 18.000s CGroup: /system.slice/docker.service ├─26076 /usr/bin/dockerd -H fd:// └─26086 docker-containerd -l unix:///var/run/docker/libcontainerd/docker-containerd.sock --metrics-interval=0 --start-timeout 2m --state-dir /var/run/docker/libcontainerd/containerd --shim docker-containerd-shim --runtime docke Abr 10 11:08:58 DPN0001 dockerd[26076]: time="2017-04-10T11:08:58.709056490-03:00" level=warning msg="Your kernel does not support cgroup rt runtime" Abr 10 11:08:58 DPN0001 dockerd[26076]: time="2017-04-10T11:08:58.709568932-03:00" level=info msg="Loading containers: start." Abr 10 11:08:59 DPN0001 dockerd[26076]: time="2017-04-10T11:08:59.027930392-03:00" level=info msg="Firewalld running: false" Abr 10 11:08:59 DPN0001 dockerd[26076]: time="2017-04-10T11:08:59.349098599-03:00" level=info msg="Default bridge (docker0) is assigned with an IP address 172.17.0.0/16. Daemon option --bip can be used to set a preferred IP address" Abr 10 11:08:59 DPN0001 dockerd[26076]: time="2017-04-10T11:08:59.642264956-03:00" level=info msg="Loading containers: done." Abr 10 11:08:59 DPN0001 dockerd[26076]: time="2017-04-10T11:08:59.651402163-03:00" level=warning msg="Couldn't run auplink before unmount /var/lib/docker/tmp/docker-aufs-union009513144: exec: \"auplink\": executable file not found in $PAT Abr 10 11:08:59 DPN0001 dockerd[26076]: time="2017-04-10T11:08:59.706979282-03:00" level=info msg="Daemon has completed initialization" Abr 10 11:08:59 DPN0001 dockerd[26076]: time="2017-04-10T11:08:59.707033307-03:00" level=info msg="Docker daemon" commit=4845c56 graphdriver=aufs version=17.04.0-ce Abr 10 11:08:59 DPN0001 dockerd[26076]: time="2017-04-10T11:08:59.719064883-03:00" level=info msg="API listen on /var/run/docker.sock" Abr 10 11:08:59 DPN0001 systemd[1]: Started Docker Application Container Engine.
>> Rodando o nosso primeiro container \o/
Como primeiro container vamos rodar o famoso e mais clichê de todos “hello-world”…hehe é uma imagem oficial localizada no Docker Hub, de um container que simplesmente executa exibe um output e morre.
Nesse output ele traz informações dos passos que foram realizados à partir do momento em que você executa o comando.
~# docker run hello-world Hello from Docker! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker ID: https://cloud.docker.com/ For more examples and ideas, visit: https://docs.docker.com/engine/userguide/
Para gerar essa mensagem o Docker realizou os seguintes passos:
…Trazudindo para o portugês é claro
- 1. O Docker client conecta no Docker daemon.
- 2. O Docker daemon faz o “pull” da imagem “hello-world” do Docker Hub.
- 3. O Docker daemon cria um novo container à partir da imagem que ele baixou e executa a saída que lemos.
- 4. O Docker daemon transmitiu essa saída para o cliente Docker, que enviou para o seu terminal.
* Congrats, você executou o seu primeiro container com Docker!!! *
>> Verificando a imagem que foi baixada do Docker Hub
~# docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest 48b5124b2768 2 months ago 1.84kB
>> Verificando o container que foi executado
No caso o container não está em execução, por isso utilizei o parâmetro “-a” de “all”, caso o contrário o comando iria retornar somente os containers em execução naquele momento.
~# docker container ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 95546983d05b hello-world "/hello" 12 seconds ago Exited (0) 11 seconds ago eloquent_morse
Para saber as informações detalhadas a respeito do container o comando abaixo vai “inspecionar” o container trazendo diversas informações, mesmo que o container não esteja rodando no momento.
~# docker container inspect 95546983d05b
A saída desse comando será no formato JSON com informações de networking (IP, MACADDRESS, GATEWAY, DNS, etc), volume (se existe algum volume montado), imagem, portas, cpu, mem, entre outras informações a respeito daquele container
Futuramente iremos utilizar o “inspect” para verificar outros recursos.
>> Removendo o container e a imagem de teste
Legal, testei e agora quero apagar a imagem e o container, e ai?
Por ser um teste, você não vai querer deixar coisas desnecessárias no seu ambiente, para isso vamos remover o container criado e a imagem
~# docker container rm 95546983d05b 95546983d05b
~# docker image rm 48b5124b2768 Untagged: hello-world:latest Untagged: hello-world@sha256:c5515758d4c5e1e838e9cd307f6c6a0d620b5e07e6f927b07d05f6d12a1ac8d7 Deleted: sha256:48b5124b2768d2b917edcb640435044a97967015485e812545546cbed5cf0233 Deleted: sha256:98c944e98de8d35097100ff70a31083ec57704be0991a92c51700465e4544d08
Pronto!
>> Conclusão
Como eu deixei claro no início do post essa foi só uma “pincelada” bem básica pra já dar água na boca para os próximos posts.
Nos próximos posts vou detalhar mais os aspectos do Docker, configurações e criarei cenários para que possamos avançar em nossos estudos!!!
Até a próxima!
Obrigado!
>> Referências
https://docs.docker.com/engine/installation/
https://docs.docker.com/engine/getstarted/step_one/
docker help
08/06/2017 at 8:43 pm
Muito bom, acabo de executar. Não foi preciso instalar nenhum iso de SO. Usei meu próprio desktop.
Rodei o docker em um “Linux Mint 18.1 Serena”, funfou de boa….
Parabéns Rodrigo pela imensa dedicação para a comunidade.
CurtirCurtido por 2 pessoas
08/06/2017 at 9:02 pm
Sensacional!!! …fico feliz em contribuir e é gratificante quando sabemos que o nosso esforço está incentivando outros a se esforçarem, assim todos crescemos.
Obrigado man, e força nos estudos que existe MUITO ainda a ser explorado…Abraço brow!!!
CurtirCurtido por 1 pessoa