Docker

De TheNets Wiki
Ir para: navegação, pesquisa

Introdução

O que é PaaS e IaaS?

Os anos entre 2012 até 2017 ficaram marcados pela ascensão de serviços como a Amazon Web Services, Google Cloud Platform e Microsoft Azure. Na época o foco deles era disponibizar hardwares dedicados para servidores e ambientes virtualizados e escaláveis. Ambos os casos se enquadram na categoria de Infrastructure as a service. Ou seja, são serviços que disponibilizam máquinas, físicas ou virtuais, através de algum tipo de gerenciador, como uma painel de controle web ou uma API. Nesse modelo, não é necessário que o contratante precise entender como a infraestrutura funciona, um acesso SSH ou VNC é dado já pré-configurado.

Já o Platform as a service é uma infraestrutura em nuvem focada em apenas uma tipo de plataforma e toda a parte de redes, armazenamento, certificados e outras coisas que precisam ser criadas manualmente em um modelo IaaS é dado pronto para utilização no modelo PaaS. Este é o caso de novos tipos de serviços disponibilizados pelas três grandes provedoras de servidores na nuvem citadas acima e muitas outras que têm surgido e se fortalecido nos desde 2015, como o Heroku e o OpenShift que oferecem, por exemplo, o Docker como a plataforma de deploy.

Container e máquinas virtuais

Explicar isolamento das máquinas virtuais.

As tecnologias de contêineres seguem os padrões do containerd.

Explicar o kernel do Linux.

Outros projetos

https://dzone.com/articles/five-key-open-source-projects-from-docker-for-deve

O que é Docker

https://www.docker.com/what-docker

https://www.docker.com/what-container

Quem utiliza?

  • Google
  • Microsoft
  • Canonical
  • Netflix
  • PayPal
  • Visa
  • Cisco
  • HP
  • e muitas outras grandes empresas...

Três grandes ramificações:

Ferramentas e sites importantes:

Docker: Instalação

  • Requisitos
    • SO suportados
      • Windows 10 Pro (atualizado)
      • Windows Server 2016 (atualizado)
      • Linux x64 (kernel atualizado)

Instalação do Docker no Windows 10 Pro

1. Para utilizar o Docker for Windows é obrigatório que esteja com Windows 10 Fall Creators Update ou mais recente. O Docker será executado dentro de uma máquina virtual utilizado o Hyper-V da Microsoft, portante ele também precisará ser instalado. Abra o PowerShell como administrador e execute:

# Instale o Hyper-v
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All

2. Baixe e instale o Docker for Windows: https://download.docker.com/win/stable/Docker%20for%20Windows%20Installer.exe

Documentação:

Instalação do Docker no Windows Server 2016

1. Para utilizar o Docker for Windows no Windows Server 2016 é necessário que esteja com as últimas atualizações da Microsoft. O Docker será executado dentro de uma máquina virtual utilizado o Hyper-V da Microsoft, portante ele também precisará ser instalado. Abra o PowerShell como administrador e execute:

# Instale o Hyper-v
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All

# Problema conhecido:
# Pode acontecer de não instalar o "Hyper-V Management Tool" com o
# comando acima. Para forçar a instalação dele, utilize o comando:
Install-WindowsFeature -Name Hyper-V -IncludeManagementTools -Restart

2. Baixe e instale o Docker for Windows: https://download.docker.com/win/stable/Docker%20for%20Windows%20Installer.exe

3. Quando o servidor reiniciar, será necessário criar um virutal switch do Hyper-V, que será utilizado pela VM do Docker para se comunicar com a internet e com outros nós do cluster, caso o Swarm ou o Kubernetes seja ativado:

# Crie o novo Virtual Switch com acesso externo
New-VMSwitch -name ExternalSwitch -NetAdapterName Ethernet -AllowManagementOS $true

4. Cria a máquina virtual para o Docker com o docker-machine:

# Criar a VM para o Docker
docker-machine.exe create -d "hyperv" --hyperv-virtual-switch "ExternalSwitch" docker

Documentação:

Instalação do Docker no Linux

Para instalar no Linux, primeiro instale o Docker Community Edition utilizando o script de instalação do próprio Docker e depois dê direitos ao seu usuário para poder acessar o socket do Docker.

# Instala do Docker automaticamente
curl -sSL https://get.docker.io | sudo sh

# Adiciona o usuário atual ao grupo do Docker
sudo usermod -aG docker $(getent passwd "$(id -u)" | cut -d: -f1)

# Reinicia o sistema (necessário para alguns Linux)
sudo shutdown -rf 0

O básico

Comandos básicos

Trabalhar com containers:

docker container --help

docker container ls
docker container rm <nome_container>
docker container [...]

O mesmo serve para redes, imagens, senhas...

Hello world

Como criar um container simples com a imagem do ubuntu:latest. Executar o echo com a mensagem “Hello World”:

docker run --rm -it ubuntu echo "hello world"

Entrar em um container

Entrar em um container com Ubuntu com bash interativo e instalar um determinado pacote:

docker run --rm -it ubuntu /bin/bash
apt update
apt install -y inettools

Executar um container em background

Como instalar serviços do Docker Hub como o Gogs.

docker run --name=gogs -p 10022:22 -p 10080:3000 -v /tmp/gogs/:/data gogs/gogs

Criar uma rede

Como instalar MySQL + phpMyAdmin (detalhado no meu blog):

# Criar diretório para persistir os dados no host
mkdir -p /opt/mysql

# Cria uma rede
docker network create gdg_network

# Criar container do MySQL
docker run --name mysql --network gdg_network -v /opt/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD="pass_here" -p 3306:3306 -d mysql:5.7.22

# Criar container do phpMyAdmin com acesso ao MySQL
docker run --name phpmyadmin -e PMA_HOST=mysql --network gdg_network -p 8080:80 -d phpmyadmin/phpmyadmin:edge

Criando meu primeiro Dockerfile

Exemplo de projeto para executar um servidor PHP.

# ./Dockerfile

FROM ubuntu:16.04

RUN apt-get update && apt-get dist-upgrade -y && \
    apt-get install -y php php-zip php-xml

ADD ./index.php /root/index.php

WORKDIR /root

ENTRYPOINT ["php", "-S", "0.0.0.0:80"]
# ./Makefile

NAME = thenets/gdg
TAG = latest
SHELL = /bin/bash

build: pre-build docker-build post-build

pre-build:

post-build:

docker-build:
	docker build -t $(NAME):$(TAG) --rm .

shell:
	docker run -it --rm -p 8888:80 $(NAME):$(TAG) $(SHELL)

build-shell: build shell

build-test: build test

test:
	docker run -it --rm --name debug -p 8888:80 $(NAME):$(TAG)
# ./index.php

<?php

echo "GDG Itajubá õ/<br>Nothing is true; everything is permitted.";

Onde aprender mais?

Katacoda

Conteúdo voltado especialmente para DevOps. Ensino dinâmico utilizando máquinas virtuais via browser.

Playground for Docker: https://www.katacoda.com/courses/docker/playground

LinuxTips

Excelente canal do YouTube com conteúdo que ensina de maneira prática a utilização do Docker.

Servers for Hackers

O conteúdo que programadores precisam saber sobre servidores.