// Tutorial //

Como Instalar e Usar o Docker no Ubuntu 16.04

Published on February 21, 2017
Default avatar
By finid
Developer and author at DigitalOcean.
Português
Como Instalar e Usar o Docker no Ubuntu 16.04

Introdução

O Docker é uma aplicação que torna simples e fácil executar processos de aplicação em um contêiner, que é como uma máquina virtual, apenas mais portátil, mais amigável, e mais dependente do sistema operacional do host. Para uma introdução detalhada aos diferentes componentes do contêiner Docker, confira The Docker Ecosystem: An Introduction to Common Components.

Existem dois métodos para a instalação do Docker no Ubuntu 16.04. Um dos métodos envolve instalá-lo em uma instalação existente do sistema operacional. A outra envolve lançar um servidor com uma ferramenta chamada Docker Machine que instala o Docker automaticamente nele.

Nesse tutorial, vamos aprender como instalá-lo e utilizá-lo em uma instalação existente do Ubuntu 16.04.

Pré-requisitos

Para seguir esse tutorial, você vai precisar do seguinte:

Nota: O Docker requer uma versão de 64 bits do Ubuntu, bem como uma versão de kernel maior ou igual a 3.10. O Droplet padrão de 64 bits do Ubuntu 16.04 atende a esses requisitos.

Todos os comandos nesse tutorial devem ser executados como usuário não-root. Se o acesso de root for requerido para o comando, ele será precedido pelo sudo. Initial Setup Guide for Ubuntu 16.04 explica como adicionar usuários e dar a eles o acesso ao sudo.

Passo 1 — Instalando o Docker

O pacote de instalação do Docker disponível no repositório oficial do Ubuntu 16.04 pode não ser a última versão. Para obter a maior e mais recente versão, instale o Docker a partir do repositório oficial do Docker. Essa seção lhe mostra como fazer isso.

Mas primeiro, vamos atualizar o banco de dados de pacotes:

  1. sudo apt-get update

Agora, vamos instalar o Docker. Adicione ao sistema a chave GPG oficial do repositório do Docker:

  1. sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D

Adicione o repositório do Docker às fontes do APT:

  1. sudo apt-add-repository 'deb https://apt.dockerproject.org/repo ubuntu-xenial main'

Atualize o banco de dados de pacotes com os pacotes do Docker a partir do novo repositório adicionado:

  1. sudo apt-get update

Certifique-se de que você está instalando a partir do repositório do Docker em vez do repositório padrão do Ubuntu 16.04:

  1. apt-cache policy docker-engine

Você deverá ver uma saída semelhante à seguinte:

Output of apt-cache policy docker-engine
docker-engine:
  Installed: (none)
  Candidate: 1.11.1-0~xenial
  Version table:
     1.11.1-0~xenial 500
        500 https://apt.dockerproject.org/repo ubuntu-xenial/main amd64 Packages
     1.11.0-0~xenial 500
        500 https://apt.dockerproject.org/repo ubuntu-xenial/main amd64 Packages

Observe que o docker-engine não está instalado, mas o candidato para instalação é do repositório Docker do Ubuntu 16.04. O número da versão do docker-engine pode ser diferente.

Finalmente, instale o Docker:

  1. sudo apt-get install -y docker-engine

O Docker agora será instalado, o daemon iniciado, e o processo habilitado para iniciar no boot. Verifique que ele está executando:

  1. sudo systemctl status docker

A saída deve ser similar ao seguinte, mostrando que o serviço está ativo e em execução:

[ secondary_label Output]
● docker.service - Docker Application Container Engine
   Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
   Active: active (running) since Sun 2016-05-01 06:53:52 CDT; 1 weeks 3 days ago
     Docs: https://docs.docker.com
 Main PID: 749 (docker)

A instalação do Docker lhe fornece não apenas o serviço Docker (daemon) mas também o utilitário de linha de comando docker, ou o cliente Docker. Vamos explorar como utilizar o comando docker mais tarde nesse tutorial.

Passo 2 — Executando o Comando Docker sem Sudo (Opcional)

Por padrão, executar o comando docker requer privilégios de root - isto é, você tem de prefixar o comando com sudo. Ele também pode ser executado por um usuário no grupo docker, que é automaticamente criado durante a instalação do Docker. Se você tentar executar o comando docker sem prefixá-lo com sudo ou sem ser do grupo docker, você obterá uma saída semelhante a essa:

Output
docker: Cannot connect to the Docker daemon. Is the docker daemon running on this host?. See 'docker run --help'.

Se você quiser evitar digitar sudo sempre que você executar o comando docker, adicione o seu usuário ao grupo docker:

  1. sudo usermod -aG docker $(whoami)

Você precisará sair do Droplet e voltar novamente com o mesmo usuário para habilitar essa alteração.

Se você precisar adicionar um usuário com o qual você não está logado ao grupo docker, declare aquele usuário explicitamente usando:

  1. sudo usermod -aG docker username

O restante desse artigo assume que você está executando o comando docker como um usuário do grupo docker. Se você escolher não fazer dessa forma, por favor prefixe os comandos com sudo.

Passo 3 — Utilizando o Comando Docker

Com o Docker instalado e funcionando, agora é hora de começar a familiarizar-se com o utilitário de linha de comando. Utilizar o docker consiste em passar a ele uma cadeia de opções seguida de argumentos. A sintaxe assume essa forma:

  1. docker [option] [command] [arguments]

Para ver todos os subcomandos disponíveis, digite:

  1. docker

A partir do Docker 1.11.1, a lista completa de subcomandos disponíveis inclui:

Output
attach Attach to a running container build Build an image from a Dockerfile commit Create a new image from a container's changes cp Copy files/folders between a container and the local filesystem create Create a new container diff Inspect changes on a container's filesystem events Get real time events from the server exec Run a command in a running container export Export a container's filesystem as a tar archive history Show the history of an image images List images import Import the contents from a tarball to create a filesystem image info Display system-wide information inspect Return low-level information on a container or image kill Kill a running container load Load an image from a tar archive or STDIN login Log in to a Docker registry logout Log out from a Docker registry logs Fetch the logs of a container network Manage Docker networks pause Pause all processes within a container port List port mappings or a specific mapping for the CONTAINER ps List containers pull Pull an image or a repository from a registry push Push an image or a repository to a registry rename Rename a container restart Restart a container rm Remove one or more containers rmi Remove one or more images run Run a command in a new container save Save one or more images to a tar archive search Search the Docker Hub for images start Start one or more stopped containers stats Display a live stream of container(s) resource usage statistics stop Stop a running container tag Tag an image into a repository top Display the running processes of a container unpause Unpause all processes within a container update Update configuration of one or more containers version Show the Docker version information volume Manage Docker volumes wait Block until a container stops, then print its exit code

Para ver as chaves disponíveis para um comando específico, digite:

  1. docker subcomando-docker --help

Para ver informações globais de sistema sobre o Docker, utilize:

  1. docker info

Passo 4 — Trabalhando com Imagens do Docker

Os contêineres Docker são executados a partir de imagens Docker. Por padrão, ele puxa essas imagens do Docker Hub, um cadastro de imagens gerenciado pela Docker, a empresa por trás do projeto Docker. Qualquer um pode construir e hospedar imagens Docker no Docker Hub, assim muitas aplicações e distribuições Linux que você vai precisar para rodar o Docker tem imagens que são mantidas no Docker hub.

Para verificar se você pode acessar e baixar imagens a partir do Docker hub, digite:

  1. docker run hello-world

A saída, que deve incluir o que se segue, deve indicar que o Docker está executando corretamente:

[secondary-label Output]
Hello from Docker.
This message shows that your installation appears to be working correctly.
...

Você pode procurar por imagens disponíveis no Docker Hub utilizando o comando docker com o subcomando search. Por exemplo, para procurar por uma imagem Ubuntu, digite:

  1. docker search ubuntu

O script vai rastrear o Docker Hub e retornar uma listagem de todas as imagens cujo nome corresponde à string de pesquisa. Nesse caso, a saída será semelhante à seguinte:

Output
NAME DESCRIPTION STARS OFFICIAL AUTOMATED ubuntu Ubuntu is a Debian-based Linux operating s... 3808 [OK] ubuntu-upstart Upstart is an event-based replacement for ... 61 [OK] torusware/speedus-ubuntu Always updated official Ubuntu docker imag... 25 [OK] rastasheep/ubuntu-sshd Dockerized SSH service, built on top of of... 24 [OK] ubuntu-debootstrap debootstrap --variant=minbase --components... 23 [OK] nickistre/ubuntu-lamp LAMP server on Ubuntu 6 [OK] nickistre/ubuntu-lamp-wordpress LAMP on Ubuntu with wp-cli installed 5 [OK] nuagebec/ubuntu Simple always updated Ubuntu docker images... 4 [OK] nimmis/ubuntu This is a docker images different LTS vers... 4 [OK] maxexcloo/ubuntu Docker base image built on Ubuntu with Sup... 2 [OK] admiringworm/ubuntu Base ubuntu images based on the official u... 1 [OK] ...

Na coluna OFICIAL, OK indica uma imagem construída e suportada pela empresa por trás do projeto. Uma vez que você tenha identificado a imagem que você gostaria de usar, você pode baixá-la para seu computador utilizando o subcomando pull, dessa forma:

  1. docker pull ubuntu

Depois de uma imagem ter sido baixada, você pode então executar um contêiner usando a imagem com o subcomando run. Se uma imagem não tiver sido baixada quando o docker é executado com o subcomando run, o cliente Docker irá primeiro baixar a imagem, depois executar um contêiner utilizando-a:

  1. docker run ubuntu

Para ver as imagens que foram baixadas em seu computador, digite:

  1. docker images

A saída deve se parecer com algo assim:

Output
REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu latest c5f1cf30c96b 7 days ago 120.8 MB hello-world latest 94df4f0ce8a4 2 weeks ago 967 B

Como você verá adiante nesse tutorial, imagens que você utiliza para executar contêineres podem ser modificadas e utilizadas para gerar novas imagens, que podem então ser carregadas (pushed é o termo técnico) para o Docker Hub ou outro registro Docker.

Passo 5 — Executando um Contêiner Docker

O contêiner hello-world que você executou previamente é um exemplo de contêiner que executa e sai, depois de emitir uma mensagem de teste. Os contêineres, contudo, podem ser muito mais úteis do que isso, e eles podem ser interativos. Afinal, eles são semelhantes às maquinas virtuais, apenas com recursos mais amigáveis.

Como um exemplo, vamos executar um contêiner utilizando a última imagem do Ubuntu. A combinação das chaves -i e -t fornece a você acesso ao shell interativo dentro do contêiner:

  1. docker run -it ubuntu

Seu prompt de comando deve mudar para refletir o fato de que você está agora trabalhando dentro do contêiner e deve assumir essa forma:

Output
root@d9b100f2f636:/#

Importante: Observe o id do contêiner no prompt de comando. Nesse exemplo, ele é d9b100f2f636.

Agora você pode executar qualquer comando dentro do contêiner. Por exemplo, vamos atualizar o banco de dados de pacotes dentro do contêiner. Não é necessário prefixar qualquer comando com sudo, porque você está operando dentro do contêiner com privilégios de root:

  1. apt-get update

A seguir instale qualquer aplicação nele. Vamos instalar o NodeJS, por exemplo.

  1. apt-get install -y nodejs

Passo 6 — Confirmando Alterações em um Contêiner para uma Imagem Docker

Quando você inicia uma imagem Docker, você pode criar, modificar, e deletar arquivos da mesma forma que você faz em uma máquina virtual. As alterações que você realiza somente serão aplicadas àquele contêiner. Você pode iniciá-lo e pará-lo, mas uma vez que você o destrói com o comando docker rm, as alterações serão perdidas para sempre.

Essa seção mostra como salvar o estado de um contêiner como uma nova imagem Docker.

Após a instalação do nodejs dentro do contêiner Ubuntu, você tem agora um contêiner executando uma imagem, mas o contêiner é diferente da imagem que você utilizou para criá-lo.

Para salvar o estado do contêiner como uma nova imagem, primeiro saia dele:

  1. exit

Depois, confirme as alterações para uma nova instância de imagem Docker utilizando o seguinte comando. A chave -m é para a mensagem que ajuda você e outras pessoas saberem quais alterações você fez, enquanto que a chave -a é utilizada para especificar o autor. O ID do contêiner é o que você anotou anteriormente no tutorial quando você iniciou a sessão interativa de docker. A menos que você tenha criado repositórios adicionais no Docker Hub, o repositório é geralmente o seu nome de usuário do Docker Hub:

  1. docker commit -m "What did you do to the image" -a "Author Name" id-do-contêiner repositório/nome_da_nova_imagem

Por exemplo:

  1. docker commit -m "added node.js" -a "Sunday Ogwu-Chinuwa" d9b100f2f636 finid/ubuntu-nodejs

Nota: Quando você confirma ou faz commit de uma imagem, a nova imagem é salva localmente, isto é, no seu computador. Posteriormente nesse tutorial, você irá aprender como carregar uma imagem para um registro Docker como o Docker Hub de forma que ela possa ser acessada e utilizada por você e por outras pessoas.

Após a conclusão dessa operação, a listagem de imagens Docker no seu computador agora deve mostrar a nova imagem, bem como a antiga de onde ela se derivou:

  1. docker images

A saída deve ser semelhante a essa:

Output
finid/ubuntu-nodejs latest 62359544c9ba 50 seconds ago 206.6 MB ubuntu latest c5f1cf30c96b 7 days ago 120.8 MB hello-world latest 94df4f0ce8a4 2 weeks ago 967 B

No exemplo acima, ubuntu-nodejs é a nova imagem, que foi derivada da imagem ubuntu existente no Docker Hub. A diferença no tamanho reflete as alterações que foram realizadas. E nesse exemplo, a alteração foi que o NodeJS foi instalado. Assim, da próxima vez que você precisar executar um contêiner utilizando Ubuntu com NodeJS pré-instalado, você pode simplesmente utilizar a nova imagem. Imagens podem também ser construídas a partir do que é chamado Dockerfile. Mas esse é um processo mais avançado que está fora do escopo deste artigo.

Passo 7 — Listando Contêineres Docker

Após a utilização do Docker por um tempo, você terá muitos contêineres ativos (executando) e inativos em seu computador. Para visualizar os ativos, utilize:

  1. docker ps

Você verá uma saída semelhante à seguinte:

Output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f7c79cc556dd ubuntu "/bin/bash" 3 hours ago Up 3 hours silly_spence

Para ver todos os contêineres - ativos e inativos, passe ao comando a chave -a:

  1. docker ps -a

Para ver o último contêiner que você criou, passe ao comando a chave -l:

  1. docker ps -l

A paralisação de um contêiner executando ou ativo é tão simples como digitar:

  1. docker stop id-do-contêiner

O container-id pode ser encontrado na saída do comando docker ps.

Step 8 — Carregando Imagens Docker para um Repositório Docker

O próximo passo lógico depois da criação de uma nova imagem a partir de uma imagem existente é compartilhá-la com alguns de seus amigos, com o mundo inteiro no Docker Hub, ou com outro registro Docker que você tenha acesso. Para carregar uma imagem para o Docker Hub ou qualquer outro registro Docker, você deve possuir uma conta lá.

Essa seção lhe mostra como carregar uma imagem para o Docker Hub. Para aprender como criar seu próprio registro Docker particular, confira How To Set Up a Private Docker Registry on Ubuntu 14.04.

Para criar uma conta no Docker Hub, registre-se no Docker Hub. Posteriormente, para carregar a sua imagem, primeiro faça o login no Docker Hub. Você será solicitado a se autenticar:

  1. docker login -u username-do-registro-docker

Se você especificou sua senha corretamente, a autenticação será realizada com sucesso. Então, você poderá carregar sua própria imagem utilizando:

  1. docker push username-do-registro-docker/nome-da-imagem-docker

Levará algum tempo para completar, e quando estiver completo, a saída será semelhante à seguinte:

Output
The push refers to a repository [docker.io/finid/ubuntu-nodejs] e3fbbfb44187: Pushed 5f70bf18a086: Pushed a3b5c80a4eba: Pushed 7f18b442972b: Pushed 3ce512daaf78: Pushed 7aae4540b42d: Pushed ...

Após carregar uma imagem para um registro, ela deve ser listada no painel de sua conta, como aquele mostrado na imagem abaixo:

Se uma tentativa de envio resultar em um erro desse tipo, então você provavelmente não fez login:

Output
The push refers to a repository [docker.io/finid/ubuntu-nodejs] e3fbbfb44187: Preparing 5f70bf18a086: Preparing a3b5c80a4eba: Preparing 7f18b442972b: Preparing 3ce512daaf78: Preparing 7aae4540b42d: Waiting unauthorized: authentication required

Faça login, depois tente o envio novamente.

Conclusão

Há muito mais sobre o Docker do que o que foi tratado nesse artigo, mas isso deve ser suficiente para você começar a trabalhar com ele no Ubuntu 16.04. Assim como a maioria dos projetos open source, o Docker é construído a partir de uma base de código de desenvolvimento rápido, assim tenha o hábito de visitar a página do blog do projeto para as últimas informações.

Adicionalmente confira os outros tutoriais de Docker na comunidade DigitalOcean.


Want to learn more? Join the DigitalOcean Community!

Join our DigitalOcean community of over a million developers for free! Get help and share knowledge in our Questions & Answers section, find tutorials and tools that will help you grow as a developer and scale your project or business, and subscribe to topics of interest.

Sign up
About the authors
Default avatar
finid

author

Developer and author at DigitalOcean.

Default avatar
Tammy Fox

editor

Developer and author at DigitalOcean.

Default avatar
Developer and author at DigitalOcean.

Still looking for an answer?

Was this helpful?
2 Comments

This textbox defaults to using Markdown to format your answer.

You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!

Olá, este tutorial parece não estar mais funcional, atualizaram a forma de inalação, e no site do Docker é bem confuso. Teriam um novo tutorial simplificado nos moldes deste?

Sensacional!