# Tutorial do Docker: introdução à popular plataforma de contentores

No nosso tutorial sobre o Docker, explicamos a plataforma de virtualização Docker e fornecemos instruções fáceis de seguir sobre como utilizá-la no seu sistema Ubuntu 22.04.

## Docker: estrutura e funcionalidades

Com o slogan «Build, Ship and Run Any App, Anywhere», a plataforma de contentores de código aberto Docker apresenta-se como uma alternativa flexível e eficiente à emulação de componentes de hardware baseada em máquinas virtuais (VM).

Ao contrário da **virtualização tradicional de hardware**, que implica iniciar diferentes sistemas convidados num mesmo sistema anfitrião (host), o Docker permite que as aplicações sejam executadas como processos isolados dentro do mesmo sistema, graças aos **contentores**. Assim, na virtualização de servidores baseada em contentores, consegue-se uma **virtualização ao nível do sistema operativo**.

[![Imagem: Comparación entre máquinas virtuales y contenedores de Docker](https://www.ionos.com/pt-pt/digitalguide/fileadmin/_processed_/4/6/csm_maquinas-virtuales-vs-contenedores-docker_2c68ee2c14.webp "Comparación entre máquinas virtuales y contenedores de Docker")](https://www.ionos.com/pt-pt/digitalguide/fileadmin/DigitalGuide/Schaubilder/maquinas-virtuales-vs-contenedores-docker.png) Mientras que cada máquina virtual inicia su propio sistema operativo, los contenedores de Docker comparten el núcleo (kernel A principal vantagem da virtualização baseada em contentores reside no facto de as aplicações com requisitos diferentes poderem ser executadas de forma isolada, sem a sobrecarga de sistemas anfitriões separados. Além disso, as aplicações em contentores podem ser utilizadas em **várias plataformas e em diversas infraestruturas**, sem necessidade de as adaptar às configurações de hardware ou software do sistema anfitrião.

O Docker é o projeto de software mais conhecido entre aqueles que oferecem **tecnologia de virtualização baseada em contentores**. A plataforma de código aberto é composta por três componentes principais: o **motor Docker** (Docker Engine), as **imagens Docker** e o repositório **Docker Hub**.

Dica Os contentores e as imagens Docker são geralmente genéricos, mas também podem ser personalizados, se necessário. Podes obter mais informações sobre este assunto no nosso artigo sobre contentores Docker.

### Imagens do Docker

À semelhança das máquinas virtuais, os contentores Docker baseiam-se em imagens Docker, que são modelos de leitura única com todas as instruções necessárias para que o motor Docker crie um contentor. Uma imagem Docker é uma **representação portátil de um contentor**, apresentada na forma de um ficheiro de texto, ou seja, um Dockerfile. Antes de iniciar um contentor num sistema, é carregado um pacote com a imagem correspondente, a menos que esta já esteja armazenada localmente. A imagem carregada contém todos os **sistemas de ficheiros com os parâmetros** necessários para a execução. Um contentor é essencialmente um processo em execução de uma imagem.

### Docker Hub

O Docker Hub é um **registo de repositórios de software** na nuvem, ou seja, funciona como uma espécie de biblioteca para imagens Docker. É um serviço online que contém repositórios públicos e privados. Os repositórios públicos permitem que os utilizadores carreguem as suas próprias imagens e as partilhem com a comunidade. Aqui encontram-se inúmeras imagens Docker oficiais criadas pela equipa de programadores, bem como projetos de código aberto consolidados. Por outro lado, nem todos têm acesso às imagens dos repositórios privados, embora estas possam ser partilhadas dentro da mesma empresa ou num determinado grupo. O repositório do Docker Hub é acessível através de [*hub.docker.com*](https://hub.docker.com/ "Página web de Docker Hub").

### Motor Docker

O cerne de qualquer projeto Docker é o seu motor, uma aplicação **cliente-servidor de código aberto** disponível em todas as plataformas na versão atual.

A arquitetura básica do motor Docker é composta por três componentes principais: um **daemon Docker**, que funciona como servidor, uma **interface de programação (API)** baseada em REST (Representational State Transfer) e o **terminal do sistema operativo** (Command-Line Interface, CLI) como interface de utilizador (cliente).

- **Daemon do Docker**: o motor do Docker utiliza um processo daemon como servidor, que é executado em segundo plano no sistema anfitrião e permite o controlo central do motor. Além disso, é responsável pela criação e gestão de imagens, contentores ou redes.
- **A API REST**: especifica um conjunto de interfaces que permite que outros programas interajam e dêem instruções ao daemon. Um deles é o terminal do sistema operativo.
- **O terminal**: o Docker utiliza o terminal do sistema operativo como programa cliente, o qual interage com o daemon através da API REST e permite aos utilizadores controlar o daemon através de scripts ou comandos.

Dica Em 2017, o motor Docker passou a chamar-se *Docker Community Edition* (abreviado como Docker CE), embora a documentação oficial e os repositórios do Docker continuem a utilizar, na sua maioria, o nome antigo. Para além do Docker CE, existe também o *Docker Enterprise Edition* (Docker EE), que oferece algumas funcionalidades premium. No entanto, o Docker EE não é gratuito e destina-se principalmente a empresas.

Com os comandos do Docker, os utilizadores podem executar, parar ou gerir os contentores de software diretamente a partir do terminal. Utilizando o comando `docker` em conjunto com instruções como `build` (criar), `pull` (transferir) ou `run` (executar), é possível comunicar com o daemon, permitindo que o cliente e o servidor estejam no mesmo sistema. Além disso, também é possível comunicar com o daemon a partir de outro sistema. A comunicação entre o cliente e o servidor pode ser realizada através da API REST, sockets UNIX ou uma interface de rede, dependendo do tipo de ligação necessária.

A imagem seguinte mostra como os **componentes individuais do Docker** se combinam, utilizando os comandos `docker build`, `docker pull` e `docker run` como exemplos:

[![Imagem: Presentación esquemática de la arquitectura Docker](https://www.ionos.com/pt-pt/digitalguide/fileadmin/_processed_/8/4/csm_diagrama-arquitectura-docker_3a86a554bb.webp "Presentación esquemática de la arquitectura Docker")](https://www.ionos.com/pt-pt/digitalguide/fileadmin/DigitalGuide/Schaubilder/diagrama-arquitectura-docker.png) 'La arquitectura Docker se basa en la combinación de cliente (terminal'), servidor (daemon do Docker) e repositório (Docker Hub)“ O comando `docker build` instrui o daemon a criar uma imagem (linha pontilhada), utilizando o **Dockerfile** correspondente. O comando `docker pull` (linha tracejada) é executado quando o utilizador não criou a imagem, mas a obtém de um repositório no Docker Hub. Se for ordenado ao daemon que inicie um contentor com o comando `docker run`, este verifica primeiro se a imagem necessária está armazenada localmente. Se for esse o caso, o contentor é iniciado (linha contínua). Caso contrário, o daemon obtém a imagem diretamente do repositório.

## Trabalhar com o Docker

Chegou a hora de se familiarizar com as **possibilidades de aplicação da plataforma de contentores**. Se ainda não instalou o motor Docker, pode fazê-lo através do terminal do Linux. Encontrará instruções sobre como proceder no nosso artigo«Instalar o Docker no Ubuntu 22.04». A seguir, aprenderá a utilizar o motor Docker a partir da consola, conhecerá as capacidades do Docker Hub e compreenderá por que razão os contentores representam uma revolução na gestão de aplicações.

Dica Se quiser instalar o Docker noutra distribuição Linux ou no Windows, os guias seguintes serão-lhe de grande ajuda:

- Como instalar o Docker no Debian 11
- Como instalar o Docker no Ubuntu 20.04
- Como instalar o Docker no CentOS 7
- Como instalar o Docker no Windows 10
- Como instalar o Docker no Windows 11
- Como instalar o Docker no Raspberry Pi

### Como gerir o motor Docker

Desde a versão 16.04, o Ubuntu utiliza o **programa *systemd***(abreviatura de «system daemon») para gerir processos.*O systemd é*um processo init que também pode ser utilizado noutras distribuições Linux, como o RHEL, o CentOS ou o Fedora, e é geralmente identificado com o ID de processo 1. Como primeiro processo do sistema, o daemon é responsável por iniciar, parar e monitorizar os restantes processos. Nas versões anteriores do Ubuntu (14.10 e anteriores), o*programa upstart* encarregava-se dessas funções.

Também é possível controlar o daemon do Docker através do *systemd*. Na instalação padrão, a plataforma de contentores está configurada para que o daemon seja iniciado automaticamente ao arrancar o sistema. No entanto, a configuração predefinida pode ser alterada utilizando a ferramenta de linha de comandos ***systemctl***.

Para controlar um processo ou verificar o seu estado, pode enviar comandos ao *systemd* através *do systemctl*. A sintaxe desse comando é a seguinte:

```bash
systemctl [OPCIÓN] [COMANDO]
```

Alguns comandos referem-se a determinados recursos, como o Docker. A terminologia do *systemd* refere-se a esses recursos como «units» (unidades). Nesse caso, o comando deriva das instruções correspondentes e do nome da unidade a que se destina.

Se quiser ativar (*enable*) ou desativar (*disable*) o **arranque automático do daemon do Docker**, utilize a ferramenta *systemctl* com os seguintes comandos:

```bash
sudo systemctl enable docker
sudo systemctl disable docker
```

*O systemctl* também permite verificar o **estado de uma unidade**:

```bash
sudo systemctl status docker
```

Se o Docker estiver ativo no sistema Ubuntu, a saída no terminal deverá ser a seguinte:

[![Imagem: La consulta de estado con systemctl muestra que el motor Docker está activo (running)](https://www.ionos.com/pt-pt/digitalguide/fileadmin/_processed_/f/7/csm_docker-status-active-running_f52601bd11.webp "La consulta de estado con systemctl muestra que el motor Docker está activo (running)")](https://www.ionos.com/pt-pt/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/docker-status-active-running.png) Consulta de estado con systemctl: el motor Docker está activo (running) Se o motor do Docker estiver desativado, o estado aparecerá como inativo (*dead*), pelo que será necessário iniciar o daemon do Docker manualmente para executar os contentores.

[![Imagem: La consulta de estado con systemctl muestra: el motor Docker está inactivo (dead)](https://www.ionos.com/pt-pt/digitalguide/fileadmin/_processed_/d/a/csm_docker-status-inactive_cad5668ee9.webp "La consulta de estado con systemctl muestra: el motor Docker está inactivo (dead)")](https://www.ionos.com/pt-pt/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/docker-status-inactive.png) Consulta de estado con systemctl: el motor Docker está inactivo (dead) Se quiser **iniciar, parar ou reiniciar o motor Docker manualmente**, utilize o *systemd* com um dos seguintes comandos:

Para **iniciar o daemon desativado**, utilize *o systemctl* juntamente com o comando `start`:

```bash
sudo systemctl start docker
```

Se o que pretende é **parar o daemon do Docker**, utilize o comando `stop`:

```bash
sudo systemctl stop docker
```

Para **reiniciar o motor**, utilize `restart`:

```bash
sudo systemctl restart docker
```

### Como utilizar o Docker Hub

Se o motor Docker representa o coração da plataforma de contentores, o Docker Hub é a alma do projeto de código aberto, pois é aqui que a comunidade se reúne. Os utilizadores encontram neste **repositório na nuvem** tudo o que precisam para dar vida à sua instalação do Docker.

O serviço online disponibiliza **vários repositórios oficiais com mais de 100 000 aplicações gratuitas**. Os utilizadores também têm a possibilidade de criar as suas próprias imagens e partilhá-las com grupos de trabalho. Para além do apoio profissional prestado pela equipa de programadores, aqui também é possível interagir com a comunidade de utilizadores. No [GitHub](https://github.com/docker/hub-feedback/issues "Página de Github sobre Docker"), os utilizadores têm acesso a um fórum de apoio.

[![Imagem: Docker Hub: apartado de registro](https://www.ionos.com/pt-pt/digitalguide/fileadmin/_processed_/a/0/csm_docker-hub-login-page_d232488fe7.webp "Docker Hub: apartado de registro")](https://www.ionos.com/pt-pt/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/docker-hub-login-page.png) El Docker ID personal se crea de forma gratuita en el apartado del registro / Fuente: hub.docker.com #### Registar-se no Docker Hub

**O registo no Docker Hub é gratuito** e requer apenas um endereço de e-mail e um Docker ID próprio, que será posteriormente utilizado como **nome do espaço pessoal para o repositório** e permite aceder a todos os serviços do Docker. A oferta inclui o Docker Hub, o Docker Cloud, a Docker Store e alguns programas Beta. Além disso, com o **Docker ID**, obtém-se acesso ao centro de assistência do Docker, bem como ao Docker Success Portal e aos [fóruns do Docker](https://www.docker.com/community/ "Foros de la comunidad Docker").

Podes registar-te seguindo estes cinco passos:

1. **Escolha um Docker ID:** durante o registo, deve escolher um nome de utilizador que mais tarde se tornará o seu ID.
2. **Introduza o seu endereço de e-mail:** introduza um endereço de e-mail ativo, pois servirá para confirmar a inscrição no Docker Hub.
3. **Crie uma palavra-passe:** escolha uma palavra-passe.
4. **Envie a inscrição:** clique em «Sign up» para confirmar a sua inscrição. Se todos os dados tiverem sido preenchidos corretamente, será enviado um link de verificação para o endereço fornecido.
5. **Confirme o seu endereço de e-mail:** confirme a sua conta de e-mail clicando no link de verificação.

Depois de se registar, poderá aceder diretamente aos serviços online do projeto Docker a partir do navegador. Aqui poderá criar repositórios e grupos de trabalho, bem como procurar recursos de acesso público através da funcionalidade «Explorar».

[![Imagem: Panel de control de Docker Hub](https://www.ionos.com/pt-pt/digitalguide/fileadmin/_processed_/f/a/csm_docker-hub-dashboard_1d08a8d15d.webp "Panel de control de Docker Hub")](https://www.ionos.com/pt-pt/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/docker-hub-dashboard.png) En el panel de control de Docker Hub puedes administrar los repositorios y grupos de trabajo / Fuente: hub.docker.com Também podes registar-te diretamente a partir da consola do sistema operativo utilizando o comando `docker login`. Podes encontrar uma explicação detalhada sobre o comando na [documentação do Docker](https://docs.docker.com/engine/reference/commandline/login/ "Documentación detallada sobre Docker").

Em princípio, os utilizadores **sem conta nem Docker ID** também podem aceder ao Docker Hub, embora só possam descarregar imagens dos repositórios de acesso público e não possam carregar (*push*) as suas próprias imagens.

#### Criar repositórios no Docker Hub

A **conta gratuita no Docker Hub** inclui um repositório de acesso privado e permite criar quantos repositórios de acesso público quiser. No entanto, pode desbloquear mais repositórios de acesso privado através **de** uma **atualização paga**.

Para criar um repositório, siga os seguintes passos:

1. **Escolha um espaço de nomes:** quando cria um repositório, é-lhe atribuído automaticamente o espaço de nomes do seu Docker ID, embora também lhe possa ser atribuído o de uma organização à qual pertença.
2. **Dê um nome ao repositório:** atribua um nome ao repositório que está a criar.
3. **Adicione uma descrição:** adicione uma descrição ao repositório.
4. **Configure a segurança:** decida se pretende criar um repositório de acesso público (*public*) ou um ao qual apenas você ou a sua organização possam aceder (*private*).

Clique em «Create» para confirmar a criação.

[![Imagem: Docker Hub: formulario para crear un repositorio](https://www.ionos.com/pt-pt/digitalguide/fileadmin/_processed_/a/d/csm_docker-hub-repository-creation_ac7984ce9d.webp "Docker Hub: formulario para crear un repositorio")](https://www.ionos.com/pt-pt/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/docker-hub-repository-creation.png) Tu repositorio se creará directamente en el espacio de nombres de tu Docker ID / Fuente: hub.docker.com #### Criar equipas e organizações

Através do Docker Hub, o Docker oferece uma plataforma na nuvem onde é possível **gerir a criação de imagens de forma centralizada** e **partilhá-las facilmente com grupos de trabalho**, aos quais o Docker denomina «organizações». Tal como acontece com as contas de utilizador, as organizações também recebem um ID individual, através do qual podem descarregar imagens ou partilhá-las com outros utilizadores. As funções e permissões de cada membro são organizadas em equipas. Desta forma, por exemplo, apenas os utilizadores que pertencem ao grupo «Owners» podem criar repositórios privados ou públicos e atribuir permissões de acesso.

Também podes criar e gerir os grupos de trabalho através do painel de controlo. Para mais informações sobre a gestão de equipas e organizações, consulta a [documentação do Docker](https://docs.docker.com/docker-hub/orgs/ "Gestión de organizaciones en Docker").

### Como trabalhar com imagens e contentores

O Docker Hub é o principal ponto de acesso aos recursos oficiais do Docker e constitui o ponto de partida para **a** nossa **introdução à gestão de imagens e contentores**. Aqui, a equipa de programadores apresenta, entre outras, a imagem de demonstração *«whalesay»*, que será utilizada como base no tutorial do Docker que se segue.

#### Descarregar imagens do Docker

Para encontrar a imagem *whalesay*, aceda à página inicial do Docker Hub e introduza o termo *whalesay* na barra de pesquisa situada à direita do logótipo do Docker.

[![Imagem: Función de búsqueda en Docker Hub](https://www.ionos.com/pt-pt/digitalguide/fileadmin/_processed_/c/c/csm_docker-hub-whalesay-repos_eae5c60dab.webp "Función de búsqueda en Docker Hub")](https://www.ionos.com/pt-pt/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/docker-hub-whalesay-repos.png) Busca en la barra de búsqueda de Docker Hub o con la pestaña “Explore” / Fuente: hub.docker.com Nos resultados da pesquisa, clique no recurso com a etiqueta *docker/whalesay* para aceder ao repositório público desta imagem. Os repositórios Docker têm sempre a mesma estrutura: na parte superior, é apresentado o título da imagem, a categoria do repositório e a data da última atualização (*last pushed*).

[![Imagem: Interfaz web de un repositorio Docker](https://www.ionos.com/pt-pt/digitalguide/fileadmin/_processed_/3/e/csm_docker-hub-official-whalesay-repo_2355257104.webp "Interfaz web de un repositorio Docker")](https://www.ionos.com/pt-pt/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/docker-hub-official-whalesay-repo.png) En los repositorios, los usuarios encuentran normalmente toda la información necesaria para la creación de imágenes / Fuente: hub.docker.com Cada repositório Docker inclui também as seguintes secções:

- **Descrição:** descrição detalhada e instruções de utilização.
- **Comando Docker Pull:** consola de linha de comandos para descarregar imagens do repositório (`pull`).
- **Proprietário:** informações sobre o criador do repositório.
- **Comentários:** área de comentários no final da página.

Nas janelas de informação do repositório, pode ver-se que *o whalesay* é uma adaptação do script Perl de código aberto ***cowsay***. O programa, desenvolvido por Rony Monroe em 1999, gera uma representação gráfica ASCII de uma vaca que aparece no terminal do utilizador juntamente com uma mensagem.

Para descarregar a imagem *docker/whalesay*, utilize o comando `docker pull` com a seguinte sintaxe:

```bash
docker pull [OPTIONS] NAME [:TAG|@DIGEST]
```

O comando `docker pull` instrui o daemon a descarregar uma imagem do repositório. Para que ele possa identificar a imagem, deve indicar o seu nome (*NAME*). Também pode indicar ao Docker como deve executar o comando pretendido através de opções (*OPTIONS*) e, opcionalmente, introduzir **tags** (*:TAG*) ou **números de identificação** únicos (*@DIGEST*) que permitem descarregar uma versão específica de uma imagem.

Para criar uma cópia local da imagem *docker/whalesay*, utilize o seguinte comando:

```bash
docker pull docker/whalesay
```

Em geral, isso não é necessário, pois quando se pretende iniciar um contentor, o daemon do Docker descarrega automaticamente as imagens do repositório, caso não as encontre no sistema local.

#### Iniciar imagens do Docker como contentores

Para iniciar uma imagem do Docker, utilize o comando `docker run` com a seguinte estrutura básica:

```bash
docker run [OPTIONS] IMAGE [:TAG|@DIGEST] [CMD] [ARG…]
```

A única parte obrigatória do comando `docker run` é o nome da imagem do Docker que pretende iniciar. No entanto, ao iniciar um contentor, também pode especificar outras opções, TAGs e DIGEST. Além disso, pode combinar o comando `docker run` com outros comandos que são executados ao iniciar o contentor. Neste caso, o comando **CMD** (COMMAND) definido pelo criador, que é executado automaticamente ao iniciar o contentor, é substituído. Com **argumentos adicionais** (*ARG…*), pode definir outras configurações opcionais, como adicionar utilizadores ou transferir variáveis de ambiente (*environment variables*).

Utilize o seguinte comando:

```bash
docker run docker/whalesay cowsay boo
```

para descarregar o script Perl correspondente como imagem e executá-lo num contentor. Verás que *o whalesay* difere bastante do script original.

[![Imagem: Salida en la terminal del contenedor docker/whalesay: la ballena dice “boo”](https://www.ionos.com/pt-pt/digitalguide/fileadmin/_processed_/e/4/csm_docker-run-whalesay-boo-english_82f28f20b7.webp "Salida en la terminal del contenedor docker/whalesay: la ballena dice “boo”")](https://www.ionos.com/pt-pt/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/docker-run-whalesay-boo-english.png) Si se ejecuta “docker/whalesay” con el comando estándar, la ballena de Docker se limita a un breve “boo” Ao executar a imagem *docker/whalesay*, o script exibe na consola um gráfico ASCII com a forma de uma baleia, bem como a mensagem «boo» gerada pelo comando *cowsay*.

Tal como no teste anterior, o daemon irá primeiro procurar a imagem no diretório local de ficheiros. Se não encontrar um pacote com o mesmo nome, inicia um download a partir do repositório do Docker através de um comando pull. Por fim, o daemon irá iniciar o programa cowsay modificado. Assim que terminar, o **contentor será encerrado automaticamente**.

Tal como acontece com *o cowsay*, *o whalesay* do Docker também permite alterar a saída de texto no terminal. Experimenta esta funcionalidade substituindo a mensagem «boo» no comando de saída por outra sequência de caracteres, como uma piada sobre baleias.

```bash
sudo docker run docker/whalesay cowsay What did the shark say to the whale? What are you blubbering about?
```

[![Imagem: Salida en la terminal del contenedor docker/whalesay: la ballena muestra un mensaje de texto personalizado](https://www.ionos.com/pt-pt/digitalguide/fileadmin/_processed_/8/6/csm_docker-run-whalesay-joke_6337d3f36a.webp "Salida en la terminal del contenedor docker/whalesay: la ballena muestra un mensaje de texto personalizado")](https://www.ionos.com/pt-pt/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/docker-run-whalesay-joke.png) La ballena puede mostrar mensajes de texto personalizados #### Visualizar todas as imagens do Docker no sistema local

Para verificar se descarregou uma imagem específica, pode aceder a uma **visão geral de todas as imagens no seu sistema local** utilizando o seguinte comando:

```bash
sudo docker images
```

O comando `docker images` (ou, em alternativa, `docker image ls`) mostra todas as imagens locais, juntamente com informações sobre o tamanho do ficheiro, a etiqueta e o ID de cada imagem.

[![Imagem: Listado de todas las imágenes en el sistema local](https://www.ionos.com/pt-pt/digitalguide/fileadmin/_processed_/3/9/csm_sudo-docker-images-empty_9806635619.webp "Listado de todas las imágenes en el sistema local")](https://www.ionos.com/pt-pt/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/sudo-docker-images-empty.png) La lista de imágenes descargadas muestra “hello-world” y “docker/whalesay” Ao iniciar um contentor, a imagem subjacente é descarregada do repositório como uma cópia e guardada permanentemente no seu computador, o que lhe permite poupar tempo em acessos futuros. Só precisará de uma nova descarga se a fonte da imagem mudar, como acontece quando há uma versão atualizada disponível no repositório.

#### Ver todos os contentores no sistema local

Se quiser **ver todos os contentores** que estão a ser executados ou que já foram executados no sistema, deve utilizar o comando `ocker ps` juntamente com a opção `--all` (abreviado como: `-a`):

```bash
sudo docker ps -a
```

[![Imagem: Vista general de todos los contenedores en el sistema local](https://www.ionos.com/pt-pt/digitalguide/fileadmin/_processed_/5/a/csm_sudo-docker-ps-a-english_74f680383e.webp "Vista general de todos los contenedores en el sistema local")](https://www.ionos.com/pt-pt/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/sudo-docker-ps-a-english.png) La vista general muestra todos los contenedores iniciados en el motor Docker As informações obtidas no terminal incluem o **ID do contêiner** em questão, a **imagem** subjacente, o **comando** executado para o seu arranque, a **hora de arranque** e o seu **estado** atual.

Se quiser ver apenas os contêineres que estão atualmente em execução, utilize o comando `docker ps` sem nenhuma opção:

```bash
sudo docker ps
```

No entanto, neste momento não deverá ter nenhum contêiner em execução no seu sistema.

#### Criar imagens Docker

Já sabes como encontrar imagens no Docker Hub, descarregá-las e executá-las em qualquer sistema onde o motor Docker esteja instalado. No entanto, o Docker não se limita apenas a disponibilizar uma vasta gama de aplicações no seu repositório; também oferece uma grande variedade de recursos para **criares as tuas próprias imagens** e partilhá-las com outros programadores.

Nos capítulos introdutórios deste artigo, vimos que cada imagem do Docker é criada a partir de um **Dockerfile**, que funciona como um conjunto de **instruções para a montagem de imagens**. O Dockerfile é um ficheiro de texto simples que contém todas as instruções de que o Docker necessita para criar uma imagem. Nas secções seguintes, explicaremos como escrever um Dockerfile e como indicar ao Docker que o utilize como ponto de partida para criar a sua própria imagem.

1. **Crie um novo diretório:** a equipa de programadores do Docker recomenda criar um diretório específico para cada Dockerfile, um processo simples de realizar no terminal do Linux. Utilize o seguinte comando para criar um novo diretório com o nome *mydockerbuild*:

```bash
mkdir mydockerbuild
```

[![Imagem: Terminal Ubuntu: el comando mkdir](https://www.ionos.com/pt-pt/digitalguide/fileadmin/_processed_/4/8/csm_mkdir-mydockerbuild-english_b8f27a8820.webp "Terminal Ubuntu: el comando mkdir")](https://www.ionos.com/pt-pt/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/mkdir-mydockerbuild-english.png) Crear nuevos directorios con el comando “mkdir” 2. **Aceda ao novo diretório:** para tal, utilize o comando `cd`.

```bash
cd mydockerbuild
```

[![Imagem: Terminal Ubuntu: el comando cd](https://www.ionos.com/pt-pt/digitalguide/fileadmin/_processed_/6/d/csm_cd-mydockerbuild-english_93ecadd291.webp "Terminal Ubuntu: el comando cd")](https://www.ionos.com/pt-pt/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/cd-mydockerbuild-english.png) El comando “cd” te permite acceder a otro directorio de trabajo 3. **Crie um novo ficheiro de texto:** editores de texto como o Nano e o Vim permitem-lhe criar ficheiros de texto a partir do terminal do Ubuntu. Crie um ficheiro de texto com o nome *Dockerfile* no seu diretório *mydockerbuild*.

```bash
nano Dockerfile
```

[![Imagem: Terminal Ubuntu: crear archivos de texto con Nano](https://www.ionos.com/pt-pt/digitalguide/fileadmin/_processed_/2/4/csm_nano-dockerfile-empty_b2b1b6195b.webp "Terminal Ubuntu: crear archivos de texto con Nano")](https://www.ionos.com/pt-pt/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/nano-dockerfile-empty.png) Nano es un editor de texto que viene preinstalado en todas las versiones de Ubuntu 4. **Escreva o Dockerfile:** o ficheiro de texto que acabou de criar irá conter as instruções necessárias para criar a sua nova imagem. Em vez de criar a imagem do zero, neste tutorial do Docker vamos utilizar o comando *FROM* para usar a imagem *docker/whalesay* como modelo para a sua nova imagem. Utilize *:latest* como tag para indicar que deve ser utilizada a versão mais recente da imagem.

```none
FROM docker/whalesay:latest
```

Até ao momento, a funcionalidade do *docker/whalesay* centra-se em permitir que o utilizador escolha as palavras que saem da boca da baleia, de modo a que, no terminal, apareça exatamente esse texto ao lado do comando de arranque do contentor. Seria muito mais interessante se o script gerasse **automaticamente** novas saídas de texto, o que é possível graças a programas como *o fortunes*, disponível para o sistema Linux, cuja função principal consiste em gerar provérbios e aforismos divertidos. Pode atualizar o índice de pacotes locais e instalar *o fortunes* com o seguinte comando:

```none
RUN apt-get -y update && apt-get install -y fortunes
```

Por fim, defina uma instrução *CMD* que será executada após o comando RUN, desde que não tenha sido substituída pelo comando (`docker run image CMD`). Utilize o seguinte comando para executar o programa *fortunes* com a opção `-a` («Escolher entre todas as bases de dados») e apresentar o resultado através do programa *cowsay* no terminal:

```none
CMD /usr/games/fortune -a | cowsay
```

Neste momento, o Dockerfile deve ter o seguinte conteúdo:

```none
FROM docker/whalesay:latest
RUN apt-get -y update && apt-get install -y fortunes
CMD /usr/games/fortune -a | cowsay
```

Tenha em conta o seguinte: os **comandos** de um Dockerfile estão limitados a **uma única linha** e começam sempre por uma palavra-chave. A sintaxe não distingue entre maiúsculas e minúsculas, embora se tenha estabelecido que as palavras-chave devem ser escritas em maiúsculas.

[![Imagem: El editor de texto Nano en la terminal de Ubuntu](https://www.ionos.com/pt-pt/digitalguide/fileadmin/_processed_/b/b/csm_nano-dockerfile-full_bd1796f06d.webp "El editor de texto Nano en la terminal de Ubuntu")](https://www.ionos.com/pt-pt/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/nano-dockerfile-full.png) Puedes controlar el editor de texto Nano con la combinación de teclas que aparecen en la zona inferior de la ventana 5. **Guarde e feche o ficheiro de texto:** guarde as suas entradas. Se estiver a utilizar o editor Nano, prima a combinação de teclas \[Ctrl\] + \[O\] e confirme com \[Enter\] para guardar. O Nano irá indicar que foram escritas três linhas no ficheiro selecionado. Feche o editor de texto com a combinação de teclas \[Ctrl\] + \[X\].
6. **Crie imagens a partir do Dockerfile:** para criar uma imagem a partir de um Dockerfile, aceda primeiro ao diretório onde se encontram os ficheiros de texto. A imagem é criada com o comando `docker build`. Se pretender atribuir um nome específico à imagem individualmente ou fornecer-lhe uma etiqueta, utilize a opção `-t` juntamente com a combinação do nome escolhido e da etiqueta. O formato padrão é `name:tag`.

No exemplo seguinte, é criada uma imagem com o nome *docker-whale*:

```bash
docker build -t docker-whale .
```

O **ponto** indica que o Dockerfile se encontra no diretório atual, embora também seja possível adicionar um caminho de ficheiros ou um URL para os ficheiros originais.

O processo *de compilação* começa assim que o comando for confirmado com \[Enter\]. Primeiro, o daemon do Docker verifica se dispõe de todos os ficheiros necessários para criar uma imagem, conhecidos como «Context» de acordo com a terminologia do Docker. Em seguida, localiza-se a imagem *docker/whalesay* com a tag *:latest*. Se o Contexto necessário para a imagem estiver completo, o daemon do Docker iniciará o modelo incorporado da imagem utilizando a instrução *FROM* num contentor temporário e, em seguida, prosseguirá com os comandos seguintes do *Dockerfile*. Neste caso, o comando seguinte é um *RUN* que instala o programa *fortunes*.

No final de cada etapa do processo de criação da imagem, o Docker atribui um **ID à camada** (layer) **criada** nessa etapa. É importante ter em conta que cada linha do Dockerfile corresponde a uma camada da imagem construída.

Quando o comando *RUN* termina, o daemon do Docker encerra o contentor temporário utilizado para este fim, elimina-o e inicia um novo contentor temporário para a camada da instrução CMD. Assim que o processo de compilação terminar, o contentor temporário será encerrado e eliminado. O Docker apresentará o ID da nova imagem, da seguinte forma:

```none
Successfully built a8f2048c9ab8
```

[![Imagem: Terminal Ubuntu: notificaciones de estado durante la creación de la imagen](https://www.ionos.com/pt-pt/digitalguide/fileadmin/_processed_/f/6/csm_sudo-docker-build-whale-english_d6b1eb3cf7.webp "Terminal Ubuntu: notificaciones de estado durante la creación de la imagen")](https://www.ionos.com/pt-pt/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/sudo-docker-build-whale-english.png) 'Las imágenes Docker se crean en varias capas (layers')“ A imagem recém-criada aparecerá na lista de imagens armazenadas localmente com o nome *docker-whale*.

```bash
sudo docker images
```

[![Imagem: Terminal Ubuntu: vista general de todas las imágenes](https://www.ionos.com/pt-pt/digitalguide/fileadmin/_processed_/3/9/csm_docker-images-new-docker-whale_4a46337253.webp "Terminal Ubuntu: vista general de todas las imágenes")](https://www.ionos.com/pt-pt/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/docker-images-new-docker-whale.png) La imagen recién creada en el listado con todas las imágenes Para iniciar um contentor com base na imagem que acabou de criar, utilize o comando `sudo docker run` seguido do nome da sua imagem, desta forma:

```bash
sudo docker run docker-whale
```

Se a imagem tiver sido criada corretamente a partir do Dockerfile, a baleia deverá falar com eloquência e demonstrar a sua sabedoria. Tem em conta que, sempre que iniciares o contentor, verás uma frase diferente.

[![Imagem: Contenedor basado en docker-whale: salida del texto en la terminal](https://www.ionos.com/pt-pt/digitalguide/fileadmin/_processed_/1/1/csm_sudo-run-docker-whale-fortunes-english_3bfb9d5385.webp "Contenedor basado en docker-whale: salida del texto en la terminal")](https://www.ionos.com/pt-pt/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/sudo-run-docker-whale-fortunes-english.png) Con fortunes la ballena ASCII generará aforismos #### Atribuir tags às suas imagens do Docker e carregá-las no Docker Hub

Antes de poder carregar a imagem *docker-whale* que criou no Docker Hub e, assim, partilhá-la com a comunidade ou com um grupo específico, deve associá-la a um repositório com o mesmo nome no seu espaço de nomes pessoal. O processo de associação é conhecido como **«tagging»** na terminologia do Docker.

Siga os passos abaixo para publicar uma imagem no Docker Hub:

1. **Criar um repositório:** registe-se no Docker Hub com o seu Docker ID e a sua palavra-passe pessoal. Em seguida, crie um repositório público e denomine-o *docker-whale*.

[![Imagem: Docker Hub: formulario para la creación de un repositorio](https://www.ionos.com/pt-pt/digitalguide/fileadmin/_processed_/3/3/csm_docker-hub-create-docker-whale-repo_1266f7d9ea.webp "Docker Hub: formulario para la creación de un repositorio")](https://www.ionos.com/pt-pt/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/docker-hub-create-docker-whale-repo.png) Crea un repositorio para la imagen que has creado / Fuente: hub.docker.com 2. **Obter o ID da imagem:** utilize o comando `docker images` para obter o identificador da imagem *docker-whale* que criou.

[![Imagem: Vista general de todas las imágenes en la terminal de Ubuntu](https://www.ionos.com/pt-pt/digitalguide/fileadmin/_processed_/5/a/csm_sudo-docker-images-id-english_265f2f9d16.webp "Vista general de todas las imágenes en la terminal de Ubuntu")](https://www.ionos.com/pt-pt/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/sudo-docker-images-id-english.png) El comando “docker images” muestra una lista de todas las imágenes guardadas en el sistema No nosso caso, o ID da imagem é *a8f2048c9ab8*. Precisamos do ID para marcar a imagem no passo seguinte.

3. **Marcar a imagem:** para marcar a imagem *docker-whale*, utilize o comando `docker tag` seguindo o seguinte esquema:

```bash
sudo docker tag [Image-ID][Docker-ID]/[Image-Name]:[TAG]
```

No exemplo atual, o comando que deve introduzir no terminal para utilizar o taggear é o seguinte:

```bash
sudo docker tag a8f2048c9ab8 [Namespace]/docker-whale:latest
```

Para verificar se a imagem foi marcada corretamente, aceda à vista geral com `docker images`. Na lista, o nome do repositório deverá mostrar o seu Docker ID.

[![Imagem: Terminal Ubuntu: vista general de las imágenes antes y después de taggear](https://www.ionos.com/pt-pt/digitalguide/fileadmin/_processed_/6/e/csm_sudo-docker-tag-docker-whale-english_d2345804e2.webp "Terminal Ubuntu: vista general de las imágenes antes y después de taggear")](https://www.ionos.com/pt-pt/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/sudo-docker-tag-docker-whale-english.png) Con “docker tag” vinculas las imágenes con tu Docker ID 4. **Carregar a imagem:** primeiro, inicie sessão no Docker Hub com o comando `docker login`:

```bash
sudo docker login
```

O terminal irá solicitar o seu nome de utilizador (Docker ID) e a sua palavra-passe.

[![Imagem: Accede a Docker Hub a través de la terminal Ubuntu](https://www.ionos.com/pt-pt/digitalguide/fileadmin/_processed_/3/3/csm_sudo-docker-login-english_77fe04ede0.webp "Accede a Docker Hub a través de la terminal Ubuntu")](https://www.ionos.com/pt-pt/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/sudo-docker-login-english.png) Debes registrarte para poder subir una imagen a Docker Hub Depois de entrar, digite o comando `docker push` para carregar a imagem no repositório que criou:

```bash
sudo docker push [Namespace]/docker-whale
```

O processo de carregamento não deve demorar mais do que alguns segundos. O terminal mostra-lhe o estado atual.

[![Imagem: Terminal Ubuntu: notificación de estado tras subir la imagen](https://www.ionos.com/pt-pt/digitalguide/fileadmin/_processed_/c/a/csm_sudo-docker-push-whale-english_44b31ef5fd.webp "Terminal Ubuntu: notificación de estado tras subir la imagen")](https://www.ionos.com/pt-pt/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/sudo-docker-push-whale-english.png) Una vez se ha subido la imagen, se encuentra disponible en Docker Hub con el tag “latest”. Podes ver a tua imagem se acederes ao Docker Hub a partir do navegador.

[![Imagem: Docker-Hub: repositorio [Namespace]/docker-whale en la vista detallada](https://www.ionos.com/pt-pt/digitalguide/fileadmin/_processed_/5/e/csm_docker-hub-push-result_56530d8ebc.webp "Docker-Hub: repositorio [Namespace]/docker-whale en la vista detallada")](https://www.ionos.com/pt-pt/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/docker-hub-push-result.png) En la vista detallada puedes ver la última actualización de tu repositorio / Fuente: hub.docker.com Se quiseres carregar várias imagens num único repositório, utiliza tags diferentes para representar as diferentes versões das imagens. Por exemplo:

```none
[Namespace]/docker-whale:latest
[Namespace]/docker-whale:version1
[Namespace]/docker-whale:version2
```

No separador «Tags», pode aceder a uma visão geral de todas as versões de imagens disponíveis num repositório.

[![Imagem: Docker Hub: pestaña “Tags”](https://www.ionos.com/pt-pt/digitalguide/fileadmin/_processed_/3/9/csm_docker-hub-multiple-versions-tags_e6c43a478d.webp "Docker Hub: pestaña “Tags”")](https://www.ionos.com/pt-pt/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/docker-hub-multiple-versions-tags.png) En la pestaña “Tags” encuentras todas las versiones de una misma imagen / Fuente: hub.docker.com Pelo contrário, as imagens de projetos diferentes devem estar armazenadas em repositórios separados.

Depois de carregar a imagem com sucesso, esta ficará disponível no repositório público para todos os utilizadores do mundo.

5. **Verificação:** verifique se a imagem foi carregada corretamente, tentando descarregá-la.

Primeiro, elimine a versão local da imagem para poder descarregar uma cópia com a mesma etiqueta; caso contrário, o Docker poderá avisar-lhe que a imagem que pretende já se encontra na sua versão mais recente.

[![Imagem: Estado: “Image is up to date” (“la copia local está actualizada”)](https://www.ionos.com/pt-pt/digitalguide/fileadmin/_processed_/f/0/csm_sudo-docker-pull-docker-whale-english_84e2e758c4.webp "Estado: “Image is up to date” (“la copia local está actualizada”)")](https://www.ionos.com/pt-pt/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/sudo-docker-pull-docker-whale-english.png) El comando Pull se interrumpe si la imagen ya existe en local Elimine as imagens locais do Docker utilizando o comando `docker rmi` juntamente com o ID da imagem, que pode ser obtido com `docker images`. Se ocorrer algum conflito, ou seja, se o Docker indicar que o ID da imagem está a ser utilizado noutros repositórios ou num contentor, pode **forçar a eliminação** com a opção `--force` (*abreviado*: `-f`).

```bash
sudo docker rmi -f a8f2048c9ab8
```

[![Imagem: El comando docker rmi con la opción -f (force)](https://www.ionos.com/pt-pt/digitalguide/fileadmin/_processed_/b/f/csm_sudo-docker-rmi-remove-image_75b679b119.webp "El comando docker rmi con la opción -f (force)")](https://www.ionos.com/pt-pt/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/sudo-docker-rmi-remove-image.png) Utiliza el comando “docker rmi” con la opción “-f” para forzar una eliminación Volte à visualização geral de todas as imagens:

```bash
sudo docker Images
```

Os elementos eliminados não devem aparecer na saída do terminal. Utilize o comando `pull` e indique o repositório para descarregar **uma nova cópia da imagem** a partir do Docker Hub:

```bash
sudo docker pull [Namespace]/€
```

[![Imagem: Terminal Ubuntu: descarga desde Docker Hub](https://www.ionos.com/pt-pt/digitalguide/fileadmin/_processed_/4/8/csm_sudo-docker-pull-image-redownload_3dfb6af27f.webp "Terminal Ubuntu: descarga desde Docker Hub")](https://www.ionos.com/pt-pt/digitalguide/fileadmin/DigitalGuide/Screenshots_2023/sudo-docker-pull-image-redownload.png) La imagen que has creado previamente se ha descargado con éxito ## Mais tópicos e tutoriais sobre o Docker

O universo do Docker é vasto e diversificado. Com o tempo, desenvolveu-se um [ecossistema ativo de ferramentas relacionadas com o Docker](https://www.ionos.com/pt-pt/digitalguide/servidores/know-how/ferramentas-docker-o-ecossistema-docker-em-detalhe/). O Docker é particularmente interessante para os administradores, especialmente quando se utilizam aplicações complexas que envolvem vários contentores em diferentes sistemas paralelos. O Docker oferece várias funcionalidades para **orquestrar** um cluster deste tipo. Pode encontrar mais detalhes sobre o assunto no nosso artigo sobre \[orquestração de contentores Docker com Swarm e Compose Se quiser trabalhar com o Docker, pode encontrar **mais tutoriais** no Digital Guide:

- Volumes de contentores Docker
- Tutorial do Docker Compose

O Docker oferece uma versatilidade excecional em **diversos cenários de aplicação**. No nosso Guia Digital, encontrará os seguintes tutoriais:

- Redis em contentores Docker
- Instalar um servidor Teamspeak com o Docker

É importante reconhecer que o Docker nem sempre é a opção mais adequada. Na nossa análise das [alternativas ao Docker](https://www.ionos.com/pt-pt/digitalguide/servidores/know-how/alternativas-aos-contentores-no-docker/), exploramos as principais alternativas. Além disso, apresentamos comparações diretas entre algumas alternativas e o Docker:

- Kubernetes vs. Docker
- Openshift vs. Docker
- Podman vs. Docker


This is a markdown version of: [https://www.ionos.com/pt-pt/digitalguide/servidores/configuracao/tutorial-do-docker-instalacao-e-primeiros-passos/](https://www.ionos.com/pt-pt/digitalguide/servidores/configuracao/tutorial-do-docker-instalacao-e-primeiros-passos/) for AI/LLM consumption.