# Principais comandos #### docker run Cria um novo contêiner, o inicia e executa o comando especificado (quando nada é especificado, executa o comando padrão). ```bash docker run hello-world ``` Você verá uma saída como: ```bash Hello from Docker! This message shows that your installation appears to be working correctly. (...) ``` No comando anterior o terminal é direcionado para dentro do contêiner. Para iniciá-lo no modo *avulso* (`detached`) utilizaremos o parâmetro `-d`: ```bash docker run -d hello-world ``` O terminal exibirá o `ID` de criação do contêiner, algo como: ```bash bdcaba00ed90289490331613191d1ec2010dbc94330b532b4da8f7714e417d8e ``` Quando um nome (parâmetro `--name="nome"`) não é fornecido, o Docker criará o container com um nome aleatório, geralmente composto de 2 palavras (nome1\_nome2).
**Exemplo**: inspiring\_euclid
**Dica**: Todos os comandos de manipulação de contêiners docker poder ser utilizados se referenciando o `nome do contêiner` ou o seu respectivo `ID`.
#### docker ps Lista os contêineres disponíveis na máquina. Por padrão, somente aqueles que estão atualmente executando serão exibidos. Para listar todos, utilize o parâmetro `-a`: ```bash docker ps -a ``` No nosso exemplo, você verá algo como:CONTAINER\_ID | IMAGE | COMMAND | CREATED | STATUS | PORTS | NAMES |
---|---|---|---|---|---|---|
14a72c95d77b | hello-world | "/hello" | 1 minute ago | Exited (0) 1 minutes ago | unruffled\_bartik |
**Dica**: Um contêiner pode ser finalizado por ter terminado de executar a rotina para qual ele foi designado (Exemplo: processamento de um arquivo texto) ou por ter encontrado um erro no serviço (Exemplo: configuração incorreta, como um erro de sintaxe, no servidor web). Quando se cria um contêiner, pode-se definir qual o [política padrão de reinicialização](https://github.com/compose-spec/compose-spec/blob/master/spec.md#restart) quando ele é encerrado: `no`, `always`, `on-failure`, `unless-stopped`.
#### docker stop Encerra a execução de um contêiner. Mesma lógica do comando anterior. ```bash docker stop 14a72c95d77b ```**Dica**: A execução do container é paralisada, no entanto o container não é removido do host.
#### docker restart Reinicia a execução de um contêiner( stop e start). Mesma lógica dos comandos anteriores. #### docker rm Remove um contêiner do host. Você pode utilizar `docker ps -a` para listar a relação de contêineres disponíveis, e removê-lo por `nome` ou `id`. ```bash docker rm 14a72c95d77b ```O comando `docker rm` somente remove containers que não estão em execução. Para remover um container em execução, use `docker rm -f`
Para conferir a remoção, vamos checar novamente os containers criados no host: ```bash docker ps -a ``` #### docker images Conferir as imagens docker atualmente disponíveis no host: ```bash docker images ```Quando uma imagem docker não está disponível localmente, o docker tentará fazer o download da imagem docker em um repositório docker (Ex: hub.docker.com). Caso o repositório seja privado, será necessário efetuar o login neste repositório para ter acesso às imagens.
#### docker pull Faz o download da imagem docker do repositório para o host: ```bash docker pull alpine ``` Você verá uma saída como: ```bash Using default tag: latest latest: Pulling from library/alpine ec99f8b99825: Pull complete Digest: sha256:b89d9c93e9ed3597455c90a0b88a8bbb5cb7188438f70953fede212a0c4394e0 Status: Downloaded newer image for alpine:latest docker.io/library/alpine:latest ```Quando você não especifica uma `tag`, o docker tomará como valor padrão a tag `latest`. O padrão de nomenclatura da imagem é `nome-da-imagem`:`nome-da-tag`.
Fazer o download de uma imagem docker em uma tag específica (tag: `3.20.1`): ```bash docker pull alpine:3.20.1 ``` Você verá uma saída como: ```bash 3.20.1: Pulling from library/alpine Digest: sha256:b89d9c93e9ed3597455c90a0b88a8bbb5cb7188438f70953fede212a0c4394e0 Status: Downloaded newer image for alpine:3.20.1 docker.io/library/alpine:3.20.1 ``` Depois de baixarmos as imagens, vamos conferir novamente as imagens disponíveis: ```bash docker images ``` Saída: ```bash REPOSITORY TAG IMAGE ID CREATED SIZE alpine 3.20.1 a606584aa9aa 12 days ago 7.8MB alpine latest a606584aa9aa 12 days ago 7.8MB ``` #### docker rmi Remove a imagem do host. No entanto, só é possível remover as imagens que não está sendo utilizadas por nenhum contêiner no host. ```bash docker rmi alpine ``` Para ver a lista de todas as imagens baixadas para o host utilize `docker images` #### docker exec Executa um comando dentro de um contêiner que está em execução. - Primeiro executaremos um contêiner criado a partir de uma imagem do Ubuntu, em modo `detached`: ```bash docker run --name ubuntu_bash -d -it ubuntu ``` - Vamos conferir se o contêiner está em execução sem problemas: ```bash docker ps -a ``` Saída: ```bash CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 759d52725ffe ubuntu "/bin/bash" 7 seconds ago Up 6 seconds ubuntu_bash ``` - Agora executaremos o comando `ls -la` dentro do contêiner: ```bash docker exec ubuntu_bash ls -la ``` Saída: ```bash total 56 drwxr-xr-x 1 root root 4096 Jul 3 12:50 . drwxr-xr-x 1 root root 4096 Jul 3 12:50 .. -rwxr-xr-x 1 root root 0 Jul 3 12:50 .dockerenv lrwxrwxrwx 1 root root 7 Apr 22 13:08 bin -> usr/bin drwxr-xr-x 2 root root 4096 Apr 22 13:08 boot drwxr-xr-x 5 root root 360 Jul 3 12:50 dev drwxr-xr-x 1 root root 4096 Jul 3 12:50 etc drwxr-xr-x 3 root root 4096 Jun 5 02:06 home lrwxrwxrwx 1 root root 7 Apr 22 13:08 lib -> usr/lib lrwxrwxrwx 1 root root 9 Apr 22 13:08 lib64 -> usr/lib64 drwxr-xr-x 2 root root 4096 Jun 5 02:02 media drwxr-xr-x 2 root root 4096 Jun 5 02:02 mnt drwxr-xr-x 2 root root 4096 Jun 5 02:02 opt dr-xr-xr-x 399 root root 0 Jul 3 12:50 proc drwx------ 2 root root 4096 Jun 5 02:05 root drwxr-xr-x 4 root root 4096 Jun 5 02:06 run lrwxrwxrwx 1 root root 8 Apr 22 13:08 sbin -> usr/sbin drwxr-xr-x 2 root root 4096 Jun 5 02:02 srv dr-xr-xr-x 13 root root 0 Jul 3 12:50 sys drwxrwxrwt 2 root root 4096 Jun 5 02:05 tmp drwxr-xr-x 12 root root 4096 Jun 5 02:02 usr drwxr-xr-x 11 root root 4096 Jun 5 02:05 var ``` - Para logar dentro do contêiner e executar comandos diretamente de lá (`exit` para sair): ```bash docker exec -it ubuntu_bash bash ``` Saída: ```bash root@759d52725ffe:/# ``` Note que você está dentro do terminal do contêiner, com o usuário `root`. Saia do contêiner: ```bash root@759d52725ffe:/# exit exit ``` #### docker stats Exibe o consumo de recursos dos containers em execução no host: ```bash docker stats ``` Saída (exemplo): ```bash CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS e95bd53f6904 apache-ecampus 0.00% 98.92MiB / 512MiB 19.32% 22.6MB / 48.3MB 1.86MB / 12.3kB 8 77aa8c8f5d9b pgadmin4 0.03% 202.9MiB / 31.18GiB 0.64% 53MB / 14MB 5.07MB / 22.3MB 20 c3f5ff58225d lumen-pm 0.01% 52.88MiB / 31.18GiB 0.17% 318kB / 0B 5.41MB / 8.19kB 8 7659f7c19173 void-mail 6.08% 18.43MiB / 512MiB 3.60% 8.5MB / 9MB 6.45MB / 0B 2 4edcb809e7f8 apache-void 0.01% 11.64MiB / 512MiB 2.27% 13.1MB / 349kB 188kB / 8.19kB 7 39294708453c apache-diploma 0.00% 2.672MiB / 512MiB 0.52% 348MB / 41.2MB 1.4MB / 9.72MB 2 c0187b82297c apache-relatorio 0.00% 4.535MiB / 512MiB 0.89% 308MB / 7.45MB 3.44MB / 0B 2 ca7dd8afcbe3 laravel-mangaba 0.01% 124.9MiB / 31.18GiB 0.39% 318kB / 0B 10.9MB / 13.3MB 8 6e79d13253aa laravel-assinador 0.00% 152.2MiB / 31.18GiB 0.48% 1.95MB / 1.71MB 3.42MB / 9.5MB 8 f782b4d255c6 rebrow-assinador 0.01% 22.86MiB / 31.18GiB 0.07% 318kB / 0B 4.89MB / 324kB 1 38aa0954d19c web-ckan 0.01% 183.2MiB / 31.18GiB 0.57% 22.8MB / 22.6MB 36.9kB / 4.31MB 11 80e596827889 apache-moodlev3 0.01% 10.5MiB / 512MiB 2.05% 13.1MB / 352kB 12.3kB / 4.1kB 6 670a68bc71ff postgres-ecampus 0.26% 168.2MiB / 31.18GiB 0.53% 50MB / 654MB 23.6MB / 505MB 7 e9265ae24b14 conector-ufvjm 0.25% 187.9MiB / 31.18GiB 0.59% 9.31MB / 8.72MB 16.4kB / 8.36MB 43 7aff38a1598f phpmyadmin 0.01% 41.53MiB / 31.18GiB 0.13% 318kB / 0B 422kB / 1.98MB 7 fb98fc81448a postgres-mangaba 0.01% 18.11MiB / 31.18GiB 0.06% 318kB / 0B 1.45MB / 14.4MB 7 27739272e682 apache-ldapadmin 0.01% 13.84MiB / 31.18GiB 0.04% 670kB / 289kB 8.19kB / 12.3kB 8 30bf52a8d11a solr-ckan 0.11% 335.9MiB / 31.18GiB 1.05% 4.08MB / 3.75MB 45.1kB / 68.8MB 48 8481f13f87b7 postgres-pressiga 0.67% 43.35MiB / 31.18GiB 0.14% 4.14MB / 3.74MB 4.86MB / 71.7MB 7 6d1e7ba2556d maria-pm 0.06% 97.93MiB / 31.18GiB 0.31% 319kB / 0B 11.1MB / 2.17MB 31 35aac4c5e8ca redis-ckan 0.20% 3.551MiB / 31.18GiB 0.01% 340kB / 20.8kB 520kB / 0B 5 ade1ecfeb5e8 postgres-conector 0.01% 20.16MiB / 31.18GiB 0.06% 9.03MB / 8.98MB 4.83MB / 23MB 7 6e0fe48184b3 datapusher-ckan 0.02% 25.97MiB / 31.18GiB 0.08% 319kB / 0B 16.4kB / 111kB 1 15e396ca1835 postgres-ckan 0.00% 27.46MiB / 31.18GiB 0.09% 17.7MB / 17.3MB 8.09MB / 43.1MB 12 2fafc1c89a6c redis-assinador 0.18% 7.848MiB / 31.18GiB 0.02% 319kB / 0B 4.1kB / 0B 5 5daf93ede22b postgres-moodle 0.00% 21.84MiB / 31.18GiB 0.07% 318kB / 0B 5.52MB / 20.1MB 7 dc3216f22764 mailhog 0.00% 14.86MiB / 31.18GiB 0.05% 940kB / 574kB 2.86MB / 1.89MB 18 7237c9d8ab05 cache-ecampus 0.03% 8.301MiB / 31.18GiB 0.03% 2.37MB / 925kB 16.4kB / 0B 10 3819a952c8e6 ldap-ufvjm 0.03% 724.1MiB / 31.18GiB 2.27% 2.59MB / 1.19MB 586kB / 445MB 4 e05b811b58bc postgres-assinador 0.01% 28.07MiB / 31.18GiB 0.09% 2.03MB / 1.63MB 12.3MB / 43.5MB 7 ``` Para liberar a saída do terminal novamente use o atalho `Ctrl + C`. #### docker logs Exibe no terminal os logs do contêiner (parâmetro `-f` pode ser utilizado para travar a tela exibindo os logs, `Ctrl + C` para sair): ```bash docker logs ubuntu_bash ``` Remover o container criado para realizar os testes: ```bash docker rm -f ubuntu_bash ``` Saída: ```bash ubuntu_bash ``` #### Referências [docker command CLI](https://docs.docker.com/reference/cli/docker/) [List of Docker Commands with Examples](https://www.devteam.space/blog/list-of-docker-commands-with-examples/)