Created: 2017-05-04 11:23 | Updated: 2017-05-04 11:23 |
Neste artigo vou descrever minha aventura na instalação do Docker no Debian Jessie.
Remova as possíveis instalações antigas:
sudo apt-get purge lxc-docker*
sudo apt-get purge docker.io*
Instale os pacotes adicionais necessários ao Docker:
sudo apt-get install apt-transport-https ca-certificates \
curl software-properties-common
Adicione a chave pública do repositório ao chaveiro do APT:
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
Adicione o repositório do Docker. Neste caso, há duas opções: criar um arquivo específico para o repositório do Docker ou adicionar o repositório diretamente no arquivo sources.list do sistema. Em qualquer das opções, o resultado é o mesmo, mas eu acho que manter os repositórios extras em arquivos separados parece ser mais "gerenciável", mas isto vai do gosto de cada um. Seguem os dois modos de adição do repositório:
Médoto manual: crie o arquivo /etc/apt/sources.list.d/docker.list com o seguinte conteúdo (ou adicione a seguinte linha no arquivo /etc/apt/sources.list):
deb [arch=amd64] https://download.docker.com/linux/debian jessie stable
Observe que esta configuração assume que o Debian utilizado é o Jessie (8.x).
Usando ferramentas de sistema: use o comando apt-add-repository, conforme a seguir. Neste caso, o repositório será adicionado ao arquivo /etc/apt/sources.list:
sudo add-apt-repository "deb [arch=amd64] \ https://download.docker.com/linux/debian $(lsb_release -cs) stable"
Os comandos a seguir independem da opção escolhida para adicionar o repositório do Docker no sistema.
Atualize a lista de pacotes:
sudo apt-get update
Por fim, cerifique-se de que o APT está pronto para obter o Docker do repositório correto (aquele configurado no arquivo /etc/apt/sources.list.d/docker.list/)::
apt-cache policy docker-ce
A saída deste comando deve ser similar à seguinte:
docker-ce:
Installed: (none)
Candidate: 17.03.1~ce-0~debian-jessie
Version table:
17.03.1~ce-0~debian-jessie 0
500 https://download.docker.com/linux/debian/ jessie/stable
amd64 Packages
17.03.0~ce-0~debian-jessie 0
500 https://download.docker.com/linux/debian/ jessie/stable
amd64 Packages
Feitos os preparativos iniciais, atualize a lista de pacotes (se ainda não o fez):
sudo apt-get update
Instale o Docker::
sudo apt-get install docker-ce
Observação: o manual do Docker solicita a criação do grupo de usuários docker, passo que não foi executado aqui porque o pacote Docker-CE para Debian já faz isso automaticamente como parte do processo de instalação.
Habilite o serviço:
sudo systemctl enable docker.service
Inicie o serviço:
sudo systemctl start docker.service
Vamos verificar algumas informações do Docker:
sudo docker info
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 17.03.1-ce
Storage Driver: aufs
Root Dir: /var/lib/docker/aufs
Backing Filesystem: extfs
Dirs: 0
Dirperm1 Supported: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host macvlan null overlay
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 4ab9917febca54791c5f071a9d1f404867857fcc
runc version: 54296cf40ad8143b62dbcaa1d90e520a2136ddfe
init version: 949e6fa
Kernel Version: 3.16.0-4-amd64
Operating System: Debian GNU/Linux 8 (jessie)
OSType: linux
Architecture: x86_64
CPUs: 4
Total Memory: 3.769 GiB
Name: vctsrv007
ID: STI3:MULG:URZO:TYD6:F3DQ:2VKE:YOMY:3M5L:IECP:WU26:YAUF:F6NT
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
WARNING: No memory limit support
WARNING: No swap limit support
WARNING: No kernel memory limit support
WARNING: No oom kill disable support
WARNING: No cpu cfs quota support
WARNING: No cpu cfs period support
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false
Observe as mensagens de warning. Isto ocorre porque o kernel padrão do Debian no fechamento deste documento (3.16.0-4-amd64) não foi compilado com as opções necessárias. Há, basicamente, duas soluções para este problema: testar o kernel-4.9, obtido no repositório Debian Backports; ou baixar, configurar, compilar e instalar um kernel à partir do código fonte, disponível em http://kernel.org.
Usar um kernel do repositório no Debian Backports facilita o trabalho e é mais rápido, no entanto, pode ser que a versão existente neste repositório não seja a mais atual, mas, mesmo assim, considero a opção mais prática, até porque o Debian costuma aplicar os patches de segurança nos kernels disponíveis em seus repositórios. Além disso, a configuração de um kernel para a compilação não é uma tarefa simples, exigindo conhecimento avançado de hardware e das opções de configuração para compilação. Vamos partir para a instalação do kernel disponível no Debian Backports.
Para instalar o kernel (ou qualquer outro pacote) do repositório Debian Backports, deve-se incluir o repositório backports na lista de repositórios do APT, caso este repositório não tenha sido configurado na instalação. Edite o arquivo /etc/apt/sources.list e adicione as seguintes linha:
# jessie-backports, previously on backports.debian.org
deb http://ftp.br.debian.org/debian/ jessie-backports main contrib non-free
deb-src http://ftp.br.debian.org/debian/ jessie-backports main contrib non-free
Atualize a lista de pacotes:
sudo apt-get update
Consulte as versões de kernel disponíveis agora:
apt-get search linux-image
linux-headers-3.16.0-4-amd64 - Header files for Linux 3.16.0-4-amd64
linux-image-3.16.0-4-amd64 - Linux 3.16 for 64-bit PCs
linux-image-3.16.0-4-amd64-dbg - Debugging symbols for Linux \
3.16.0-4-amd64
linux-image-amd64 - Linux for 64-bit PCs (meta-package)
linux-image-amd64-dbg - Debugging symbols for Linux amd64 \
configuration (meta-package)
nvidia-kernel-3.16.0-4-amd64 - NVIDIA binary kernel module for \
Linux 3.16.0-4-amd64
linux-headers-4.9.0-0.bpo.2-amd64 - Header files for Linux \
4.9.0-0.bpo.2-amd64
linux-headers-4.9.0-0.bpo.2-rt-amd64 - Header files for \
Linux 4.9.0-0.bpo.2-rt-amd64
linux-image-4.9.0-0.bpo.2-amd64-dbg - Debugging symbols for \
Linux 4.9.0-0.bpo.2-amd64
linux-image-4.9.0-0.bpo.2-amd64-unsigned - Linux 4.9 for 64-bit \
PCs
linux-image-4.9.0-0.bpo.2-rt-amd64-dbg - Debugging symbols for \
Linux 4.9.0-0.bpo.2-rt-amd64
linux-image-4.9.0-0.bpo.2-rt-amd64-unsigned - Linux 4.9 for \
64-bit PCs, PREEMPT_RT
linux-headers-4.9.0-2-grsec-amd64 - Header files for Linux \
4.9.0-2-grsec-amd64
linux-image-4.9.0-2-grsec-amd64 - Linux 4.9 for 64-bit PCs, \
Grsecurity protection
linux-image-grsec-amd64 - Linux image meta-package, grsec \
featureset
linux-image-rt-amd64 - Linux for 64-bit PCs (meta-package), \
PREEMPT_RT
linux-image-rt-amd64-dbg - Debugging symbols for Linux \
rt-amd64 configuration (meta-package)
linux-image-4.9.0-0.bpo.2-amd64 - Linux 4.9 for \
64-bit PCs (signed)
linux-image-4.9.0-0.bpo.2-rt-amd64 - Linux 4.9 for 64-bit PCs, \
PREEMPT_RT (signed)
Instale a versão 4.9.0-0 do kernel e também os headers, para o caso de ser necessário compilar algum módulo futuramente (observe a flag -t jessie-backposts, que informa ao comando apt-get que o pacote deve ser instalado à partir do repositório Debian Backports):
sudo apt-get install -t jessie-backports \
linux-image-4.9.0-0.bpo.2-amd64 \
linux-headers-4.9.0-0.bpo.2-amd64
Reinicie o sistema. Depois de reiniciado, verifique a versão do kernel em execução:
uname -a
Linux vctsrv007 4.9.0-0.bpo.2-amd64 #1 SMP
Debian 4.9.18-1~bpo8+1 (2017-04-10) x86_64 GNU/Linux
Tente iniciar o Docker, mas provavelmente ele irá falhar:
sudo systemctl start docker.service
Job for docker.service failed. See 'systemctl status docker.service' \
and 'journalctl -xn' for details.
Isto ocorre porque trocamos o kernel. Neste caso, será necessário remover todo o conteúdo do diretório /var/lib/docker/, mas atenção, todas as imagens instaladas no Docker serão perdidas (não é um problema neste caso, porque ainda não instalamos nenhuma imagem, mas fica a dica):
rm -rf /var/lib/docker/*
Agora, inicie o Docker:
systemctl start docker.service
Consulte novamente as informações do Docker:
docker info
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 17.03.1-ce
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host macvlan null overlay
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 4ab9917febca54791c5f071a9d1f404867857fcc
runc version: 54296cf40ad8143b62dbcaa1d90e520a2136ddfe
init version: 949e6fa
Kernel Version: 4.9.0-0.bpo.2-amd64
Operating System: Debian GNU/Linux 8 (jessie)
OSType: linux
Architecture: x86_64
CPUs: 4
Total Memory: 3.761 GiB
Name: vctsrv007
ID: STI3:MULG:URZO:TYD6:F3DQ:2VKE:YOMY:3M5L:IECP:WU26:YAUF:F6NT
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
WARNING: No swap limit support
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false
Ainda há uma mensagem de warning: "No swap limit support". Esta mensagem indica que o Docker é incapaz de impor um limite na quantidade de swap que os processos em execução no container estão usando. Para habilitar este suporte, é preciso que o kernel seja compilado com as opções MEMCG_SWAP_ENABLED e CGROUP_FREEZER. O kernel do Debian Backports usado na instalação (4.9.0-0.bpo.2-amd64) não foi compilado com a opção MEMCG_SWAP_ENABLED.
Esta mensagem não tem nenhuma relação com a existência de espaço para swap no sistema operacional e, exceto para os casos onde houver containers concorrentes e que deva ser garantido swap isolado entre eles, esta mensagem pode ser ignorada com segurança.
Com a instalação finalizada, já podemos testar o Docker.
Para testar o Docker, pode-se utilizar uma imagem diretamente do repositório Docker Hub:
sudo docker run hello-world
Se corretamente instalado e operacional, uma mensagem similar à seguinte deve ser apresentada:
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
78445dd45222: Pull complete
Digest: sha256:c5515758d4c5e1e838e9cd307f6c6a0d620b5e07e6f927b07d05f6d12a1ac8d7
Status: Downloaded newer image for hello-world:latest
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/
Liste as imagens do Docker:
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest 48b5124b2768 3 months ago 1.84 kB
Com isso, a instalação do Docker está finalizada e operando normalmente.
Se desejado, pode-se remover a imagem de teste:
docker rmi -f 48b5124b2768
Untagged: hello-world:latest
Untagged: hello- world@sha256:
c5515758d4c5e1e838e9cd307f6c6a0d620b5e07e6f927b07d05f6d12a1ac8d7
Deleted: sha256:\
48b5124b2768d2b917edcb640435044a97967015485e812545546cbed5cf0233
Agora não há nenhuma imagem instalada:
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE