Você está na página 1de 151

Windows Containers

Fabio Hara
Product Marketing Manager | App Innovation | Cloud Infrastructure | Communities
@fabiohara
github.com/fabioharams
fb.com/fabioharatecnologia
Agenda
• Conceitos básicos de container
• Integrando com Docker.
• Desenvolvimento com Containers.
• Runtime do Microsoft Container
• Laboratórios
Intelligent Cloud – Intelligent Edge

Multi- Artificial Serverless


Device, Intelligence
Multi-sense
Conceitos básicos de
Containers.
Containers
Uma nova forma de construir, distribuir, implantar para instâncias de
aplicações

}
Aplicações tradicionalmente

}
construídas e implantadas em
servidores físicos (relação 1:1) Pacotes e apps em
Novas aplicações necessitam de execução com
sistemas físicos para isolamento de Containers
Físico recursos

Físico / Virtual

}
Altas taxas de consolidação e melhor
utilização Principais benefícios
Implantação rápida de aplicativos em Raída aceleração de implantação de Apps
relação ao método tradicional
(servidores físicos) Esforço reduzido para implantar Apps
Aplicativos implantados em VMs Amplo Desenvolvimento e testes
com alta taxa de sucesso de Baixo custo associado com implantação de apps
Virtual compatibilidade
Alta taxa de consolidação
Apps beneficiadas com Recursos de
VM (ex: Live migration, HA)
Por que Containers?
Aplicações com alta inovação para um mundo móvel baseado em Cloud

Containers oferecem produtividade e


liberdade DevOps
Permite apps ‘write-once, run-anywhere’
Pode ser implantada como app distribuída
multi-tier em modelos IaaS/PaaS
Containers oferecem alta abstração para
Developers micro serviços

Melhora familiaridade com modelos de


implantação em IT
Provê ambiente padronizado para
desenvolvimento, QA e times de produção
Integrar pessoas, processos e ferramentas para
Abstrai diferenças em distribuições de SO e processos otimizados de Desenvolvimento de apps
infraestrutura
Operações focam em Infraestrutura padronizada
Alta utilização e densidade de computação |
Operações escalabilidade avançada Developers focam em contruir, implanter e testar apps
Containers
Ambiente isolado de runtime para aplicações hospedadas Container

}
Dependencias: Cada aplicação tem suas próprias
dependências que incluem tanto software (serviços,
bibliotecas) e hardware (CPU, memória, armazenamento).
Virtualização: Mecanismo de container é um mecanismo
muito leve de virtualização que isola estas dependências por App A App B
aplicação, “empacotando” em containers virtuais. Binários/Bibliotecas Binários/Bibliotecas

SO de Host Compartilhado: Container executa em um


processo isolado no espaço de User Mode no SO do Host,
compartilhando o kernel com outros containers. Camada de gerenciamento de container
Flexível: Diferenças por baixo do SO e Infraestrutura são
abstraídas, permitindo implantação mais ampla SO Host
Rápido: Containers podem ser criados quase com suporte para containers
instantaneamente, permitindo rapida escalabilidade vertical e
horizontal em resposta às demandas. Servidor
Containers
Como diferem de maquinas virtuais? Virtual

}
Machine

Dependencias: Cada app virtualizada inclui a App,


binários e bibliotecas necessárias e SO Guest (que
pode incluir vários gigabytes)
SO Independente : Cada VM pode ter um SO App A App B
Binários/Biblioteca Binários/Biblioteca
diferente das demais VMs (inclusive diferente do
SO do Host)
Flexível: VMs podem ser migradas para outros SO Guest SO Guest
hosts para balancear utilização de Recursos e para
manutenção de hosts, sem interrupção
Hypervisor
Seguro: Altos níveis de Recursos e isolamento de
segurança para principais cargas de trabalho
virtualizadas.
Servidor
Máquina Virtual (VM) vs Contêiner
Máquina Virtual (VM) vs Contêiner
Máquina Virtual (VM) vs Contêiner
Como funcionam os contêiners?
Contêineres do Windows
Modo de usuário do host

Processos do
sistema
Session
Manager

Gerenciamento
Local Security de contêineres
Authority

Docker
Etc... Engine

Kernel do Windows
Contêineres do Windows
Modo de usuário do host

Processos do
sistema
Session
Manager

Gerenciamento
Local Security de contêineres Contêiner do
Authority
Windows Server
Docker
Etc... Engine

Kernel do Windows
Contêineres do Windows
Modo de usuário do host

Processos do
sistema
Session
Manager

Gerenciamento
Local Security de contêineres Contêiner do
Authority
Windows Server
Docker
Etc... Engine Processos
do sistema

Kernel do Windows
Contêineres do Windows
Modo de usuário do host

Processos do
sistema
Session
Manager

Gerenciamento
Local Security de contêineres Contêiner do
Authority
Windows Server
Docker
Etc... Engine Processos Processo(s)
da(s)
do sistema aplicação(ões)

Kernel do Windows
Contêineres do Windows
Modo de usuário do host

Processos do
sistema
Session
Manager

Gerenciamento
Local Security de contêineres Contêiner do
Authority
Windows Server
Docker
Etc... Engine Processos Processo(s)
da(s)
do sistema aplicação(ões)

Kernel do Windows
Contêineres do Windows
Modo de usuário do host

Processos do
sistema
Session
Manager

Gerenciamento
Local Security de contêineres Contêiner do Contêiner do
Authority
Windows Server Windows Server
Docker
Etc... Engine Processos Processo(s)
da(s)
Processos Processo(s)
da(s)
do sistema aplicação(ões) do sistema aplicação(ões)

Kernel do Windows
Contêineres do Windows
Modo de usuário do host

Processos do
sistema
Session
Manager

Gerenciamento
Local Security de contêineres Contêiner do Contêiner do
Authority
Windows Server Windows Server
Docker
Etc... Engine Processos Processo(s)
da(s)
Processos Processo(s)
da(s)
do sistema aplicação(ões) do sistema aplicação(ões)

Kernel do Windows Kernel do Windows

Hipervisor do Hyper-V
Contêineres do Windows
Modo de usuário do host

Processos do
sistema
Máquina virtual
Session Especificamente otimizado
Manager para executar um contêiner
Gerenciamento
Local Security de contêineres Contêiner do Contêiner do
Authority
Windows Server Windows Server
Docker
Etc... Engine Processos Processo(s)
da(s)
Processos Processo(s)
da(s)
do sistema aplicação(ões) do sistema aplicação(ões)

Kernel do Windows Kernel do Windows

Hipervisor do Hyper-V
Contêineres do Windows
Modo de usuário do host

Isolamento do Hyper-V
Processos do
sistema
Máquina virtual
Session Especificamente otimizado
Manager para executar um contêiner
Gerenciamento
Local Security de contêineres Contêiner do Contêiner do
Authority
Windows Server Windows Server
Docker
Etc... Engine Processos Processo(s)
da(s)
Processos Processo(s)
da(s)
do sistema aplicação(ões) do sistema aplicação(ões)

Kernel do Windows Kernel do Windows

Hipervisor do Hyper-V
Novo na
Contêineres do Windows versão 1709

Modo de usuário do
Isolamento do Hyper-V Isolamento do Hyper-V
host
Container
Runtime Máquina virtual Máquina virtual
Especificamente otimizado Especificamente otimizado
para executar um contêiner para executar um contêiner
Docker
Engine Contêiner do Contêiner do Contêiner Linux
Windows Server Windows Server
Container Processos Processo(s)
Processos Processo(s) Processos Processo(s)
da(s) da(s) da(s)
do sistema aplicação(ões) do sistema aplicação(ões) do sistema aplicação(ões)

Kernel do Windows Kernel do Windows Kernel do Linux

Hipervisor do Hyper-V
Ecossistema de Container

Container Run-Time Container Images Image Repository

Aplicações

Linux Frameworks
de aplicação
Que problemas os Conteiners resolvem?
Funciona na minha
máquina
Conjunto de problemas de IT (sempre)
Patches quebram as instalações
Pastas de implantação
Causam Shadow IT, tensão entre
Dev/Ops
Etc
Integrando com Docker.
Integração com Docker
União de investimentos estratégicos para direcionar o futuro dos
containers
Datacenter
Docker: Mecanismo open source de cliente
que automatize a implantação de
qualquer aplicação como portátil, Dockerized app
como um container auto-suficiente
que pode ser executado em qualquer
Execute em
lugar. qualquer lugar
Parceria: Permitir o cliente Docker Windows Server Linux
gerenciar multiplas aplicações de Container Container
multi-container para containers Microsoft Provedor
Windows e Linux, independente do Azure de serviço
Docker
Host de hospedagem ou provedor de
nuvem

Investimentos
Estratégicos
} Investimentos no Windows Server 2016
Desenvolvimento Open source do
Azure suportado para APIs abertas de
orquestração do Docker
Federação das imagens do Docker Hub
Docker Engine para Windows Server para a galeria do Azure Gallery e Portal
Integração com Docker
União de investimentos estratégicos para direcionar o futuro dos
containers
Docker Hub: Coleção de aplicações abertas Docker.exe
(e com curadoria) disponíveis para Docker Client Exemplos:
docker run
download. https://hub.docker.com docker images

Colaboração: Trazendo Windows Server Windows


Linux
Server
containers para o ecossistema de Docker Docker Remote API
para expandir o alcance das comunidades de Docker Engine Docker Engine Exemplos:
GET images/json
desenvolvedores. (Daemon) (Daemon)
POST containers/create

Docker Engine: Docker Engine para Windows Server Linux Container


Windows Server containers será Container Support Support (LXC)

desenvolvido sob projeto open source da


Docker.
Docker client: Clientes Windows serão
capazes de usar o mesmo cliente padrão
Docker em múltiplos ambientes de
desenvolvimento.
Ambientes de SO de Container
Nano Server Server Core

Altamente otimizado Altamente compatível

Aplicações Aplicações tradicionais


“Born in the cloud”
Runtime do Microsoft
Container.
Tipos de Containers Windows
• Windows Server Container
• Provê isolamento de aplicações através de tecnologia de isolamento de processos e
namespaces. Um container Windows Server compartilha o kernel com o container host e todos
os containers em execução no mesmo host
• Hyper-V Container
• Executa cada conatiner em uma VM altamente otimizada. Nesta configuração o kernel do host
não é compartilhado com os demais containers Hyper-V
Fundamentos de Container
• Container Host
• Máquina física ou virtual configurada com o recurso de Windows Container

• Container OS image
• Containers são implantados através de imagens. A imagem de SO do container é a 1° camada para as
várias camadas de imagem que criam um container. Esta imagem provê o ambiente de sistema
operacional

• Container Image
• Uma imagem de container contém a base do SO, aplicações e todas as dependências (das aplicações)
necessárias para implantar um container

• Container Registry
• Imagens de container são armazenadas em um Container registry e podem ser baixadas por demanda

• Dockerfile
• Usados para automatizar a criação de imagens de containers
Runtime do Microsoft Container
Windows Server Container

TRUSTED
Altamente Escalável e
HOSTING Seguro Eficiente MULTI-TENANCY
Automatizável Elástico

Hyper-V Container

Hosting PUBLIC
WORKLOAD Altamente Escalável e
Compartilhado Seguro Eficiente MULTI-TENANCY
CONTROLADO Automatizável Elástico
Windows container 101

Aplicativo

sO

Hardware
Windows container 101

Máquinas virtuais tradicionais = virtualização de hardware


VM VM VM
Aplicativo

SO

Hardware
Windows container 101

Máquinas virtuais tradicionais = virtualização de hardware


VM VM VM
Aplicativo

SO

Hardware
Windows container 101

SO

Hardware

Máquinas virtuais tradicionais = virtualização de hardware


VM VM VM
Aplicativo

Os

Hardware
Windows container 101
Containers = Virtualização do sistema operacional

SO Aplicativos

Kernel

Hardware

Máquinas virtuais tradicionais = virtualização de hardware


VM VM VM
Aplicativo

SO

Hardware
Windows container 101
Containers = Virtualização do sistema operacional

Recipiente Recipiente Recipiente

SO Aplicativos

Kernel

Hardware

Máquinas virtuais tradicionais = virtualização de hardware


VM VM VM
Aplicativo

SO

Hardware
Windows container 101
Containers = Virtualização do sistema operacional

Recipiente Recipiente Recipiente

SO Aplicativos

Kernel

Hardware

Máquinas virtuais tradicionais = virtualização de hardware


VM VM VM
Aplicativo

SO

Hardware
Windows container 101
Containers = Virtualização do sistema operacional Containers do Windows Server
Velocidade máxima e densidade
Recipiente Recipiente Recipiente
Container Container Container

SO Aplicativos

Kernel
Kernel

Hardware

Containers Hyper-V
Máquinas virtuais tradicionais = virtualização de hardware Isolamento + desempenho
Containers Containers Containers
VM VM VM
Aplicativo

SO
Kernel Kernel Kernel

Hardware Hyper-V
Docker time! - High Level Architecture

}
Docker
Universal Control Plane

Container
Docker Docker Docker Docker Docker
Client PowerShell Compose Registry Swarm
Development and
Management Toolset

Docker Engine

Operating System Container Runtime


Como instalar
Windows 10 Windows Server 2016
 https://www.Docker.com/Docker-  Install-Module -Name
Windows DockerMsftProvider -Repository
PSGallery -Force
 Install-Package -Name docker
-ProviderName DockerMsftProvider
 Restart-Computer -Force
Criação de Imagem
Criação de Imagem

Repositório Imagem de SO Visão do


Local
do container
C:\Windows\* Container
Criação de Imagem

C:\Windows\*
Sandbox vazio

Repositório Imagem de SO Visão do


Local
do container C:\Windows\* Container
Criação de Imagem
C:\nodeJS

C:\Windows\*
Sandbox vazio

Repositório Imagem de SO Visão do


Local
do container C:\Windows\* Container
Criação de Imagem
C:\nodeJS

C:\Windows\*
Sandbox C:\nodeJs C:\nodeJS

Repositório Imagem de SO Visão do


Local
do container C:\Windows\* Container
Criação de Imagem

Sandbox C:\nodeJs

Repositório Imagem de SO Visão do


Local
do container C:\Windows\* Container
Criação de Imagem

Framework
de Aplicação Framework
de Aplicação C:\nodeJs

Repositório Imagem de SO Visão do


Local
do container C:\Windows\* Container
Criação de Imagem

Sandbox Empty

Framework de
Aplicação Framework C:\Windows\*
de Aplicação C:\nodeJs C:\nodeJS

Repositório Imagem de SO Visão do


Local
do container C:\Windows\* Container
Criação de Imagem
C:\myApp

Sandbox Empty

Framework
de Aplicação Framework C:\Windows\*
de aplicação C:\nodeJs C:\nodeJS

Repositório Imagem de SO Visão do


Local
do container C:\Windows\* Container
Criação de Imagem
C:\myApp

Sandbox C:\myApp

Framework
de Aplicação Framework C:\Windows\*
de Aplicação C:\nodeJs C:\nodeJS
C:\myApp

Repositório Imagem de SO Visão do


Local
do container C:\Windows\* Container
Criação de Imagem

Sandbox C:\myApp

Framework
de Aplicação Framework
de Aplicação C:\nodeJs

Repositório Imagem de SO Visão de


Local
do container C:\Windows\* Container
Criação de Imagem

Imagem C:\myApp
de Aplicação

Framework
de Aplicação Framework
de Aplicação C:\nodeJs

Repositório Imagem de SO Visão do


Local
do container C:\Windows\* Container
Desenvolvimento com
Containers.
Processo de Desenvolvimento usando Containers

Repositório
Central

Application
Framework

Repositório
Local
Processo de Desenvolvimento usando Containers

Repositório
Central

Application Desenvolvedores pod


em es
seus frameworks de ap colher
Framework puxá-los localmente d licação e Application
e repositórios
centrais Framework

Repositório
Local
Processo de Desenvolvimento usando Containers

Repositório
Central

Application Desenvolvedores pod


em es
seus frameworks de ap colher
Framework puxá-los localmente d licação e Application
e repositórios
centrais Framework
Dependências necess
ár
automaticamente iden ias são
tificadas
e baixadas localmen
te
Repositório
Local
Processo de Desenvolvimento usando Containers
using System;
class Program
{
static void Main()
{

}
}

Repositório
Desenvolvedores usam a mesma Central
linguagem de programação e
ambientes aos quais estão
habituados

Application
Framework Application
Framework

Repositório
Local
Processo de Desenvolvimento usando Containers
using System;
class Program
{
static void Main()
{

}
}

Repositório
central

Application
Framework Application
Framework

Aplicações são compiladas e feito


assembled do mesmo jeito que os
Repositório desenvolvedores estão habituados
Local
Processo de Desenvolvimento usando Containers
using System;
class Program
{
static void Main()
{

}
}

Repositório
Central
Uma
co n t n o v a
a i
a ap iner é fe magem
licaç ita c de
um d ão , o n
Application esen escrita tend
v o lv p
edor or
Framework Application
Framework

Repositório
Local
Processo de Desenvolvimento usando Containers
using System;
class Program
{
static void Main()
{

}
}

Repositório
Central
A nova imagem
d
aplicação pode o container de
se
para o repositó r “empurrada”
rio central

Application
Framework Application
Framework

Repositório
Local
Processo de Desenvolvimento usando Containers

Repositório
Central

Application
Framework
Processo de Desenvolvimento usando Containers

Utilizado parateste
unitário
Repositório
Compartilhado com Central
outros desenvolvedores

Application
Framework
Processo de Desenvolvimento usando Containers

Utilizado parateste
unitário
Repositório
Compartilhado com Central
outros desenvolvedores

Em estágio para Application


Framework
integração ou QA
Processos de DevOps com Containers
Desenvolvedores atualizam,
interagem e implantam containers
atualizados

3
Operações colaboram com desenvolvedores
para provêr métricas de Apps e Insights

Desenvolvedores controem e
testam apps em containers, Operações automatizam
usando ambiente de 1 Central 2 implantação e monitoram
Desenvolvimento (ex: Visual Repository
apps do repositório central
Studio)

Containers enviados para


o repositório central
A conexão com Azure
Suporte mais amplo para contêineres em
Azure

Instância do contêiner
Serviço de App Service Fabric Serviço de contêiner Azure 3RD Party
Azure

Azure Container Registry Docker Hub

Escolha de ferramentas de
desenvolvedor e clientes
Sem tocar em um única linha de código
ou envolvimento do desenvolvedor

Aplicação existente Modernização Implantar

Validar
No local
Converter Publicar

VM Contêiner Azure Container


Registry Azure
Kubernetes no Windows

Fabio Hara
Product Marketing Manager | App Innovation | Cloud Infrastructure | Communities
@fabiohara
github.com/fabioharams
fb.com/fabioharatecnologia
Onde os desenvolvedores gastam tempo...
Depurando aplicativos existentes

Ajustando aplicativos existentes

Adicionando "recursos" para aplicativos existentes

Corrigindo o recurso que alguém adicionou

Construindo uma nova aplicação


(talvez... se houver tempo)
Onde os App Admins gastam tempo...
Manutenção de aplicativos existentes

Reimplantando aplicativos existentes

Diagnosticar problemas com aplicativos existentes

Solucionando problemas de adições de recursos

Implantando um novo aplicativo


(talvez... se houver tempo)
“Reciclando” o que já existe
Não podemos jogar fora todos os aplicativos antigos.

Não podemos parar de adicionar recursos.

Não podemos parar de manter apps antigos.

Podemos facilitar...

Nós podemos usar ferramentas novas/código com apps existentes...


Por onde começar?
Containerize Aplicativos Existente
Container para portabilidade, eficiência e confiabilidade

Transformar MONOLITHS Para microservices


Novo código e transformando existentes código

Acelerar novas aplicações


Desenvolvimento de aplicativos nativos de nuvem
ágil
Passo 1: Construir seu
aplicativo!
Container
Orchestration
Orquestradores de contêineres populares:
• Docker Swarm
• Kubernetes
• Service Fabric
• OpenShift
 Host de contêiner/tempo de  Host de contêiner/tempo de
execução execução
 Camada de gerenciamento de  Camada de gerenciamento de
O que os Orquestradores de contâiner fornecem?
contêineres contêineres
 Modelo declarativo para aplicativos de vários  Orquestrador de
hosts  Alta contêineres
confiabilidade
 Reconciliação de estado desejada  Monitoramento da saúde
 Dimensionamento dinâmico  Recursos de segurança (e muito mais!)
Passo 1: Construir seu Passo 2: Implantar em escala.
aplicativo!
Por que
kubernetes?
Desafios de um mundo container
 Load Balancing
 Distribuindo o tráfego entre contâiners em escala
 Naming e Discovery
 Como os contâiners ou grupos se encontram?
 Logging e Monitoring
 Manter o controle do que os contâners estão fazendo
 Debugging e Introspection
 Entre dentro dos containers em execução
 Networking
 Diferenciando as redes de contêineres das redes host em escala
Características do kubernetes

 Self-Healing
 Dimensionamento horizontal
 Rollback e Rollouts automatizados
 Detecção de serviços e balanceamento de carga
 Automático binpacking Automaticamente coloca
containers com base em seus
 Orquestração de armazenamento requisitos de recursos e outras
restrições, sem sacrificar a
Gerenciamento de Secrets e Configuração disponibilidade. Misture cargas
de trabalho críticas e de melhor
esforço a fim de impulsionar a
utilização e economizar ainda
mais recursos.
Construindo kubernetes no Windows
 #SIG-grupo de trabalho do Windows
 Apprenda, Google, Microsoft, Red Hat
 Kubernetes 1,5 Alpha Release-dezembro 2016

 Desde o Alpha inicial


 Base built OVS/OVN suporte para Software Defined Network multi-
plataforma
 Integração com Azure Storage e Azure Networking
 Métricas de recursos
 CNI baseado em plugins de rede
 E mais por vir
Demo

Cargas de trabalho
mistas no ACS
Como é que funciona?

Nó do Windows Nó Linux
Como é que funciona?

Nó do Windows Nó Linux
Como é que funciona?

Nó do Windows Nó Linux
Como é que funciona?

Nó do Windows Nó Linux
Diagrama de implantação do Windows
OpenShift = Kubernetes nível Enterprise
Compilar, implantar e gerenciar aplicativos com contêineres
Recipiente Recipiente Recipiente Recipiente Recipiente

Auto-serviço

Catálogo de serviços
(runtimes de linguagem, middleware, bancos de dados,...)

Automação de compilação Automação de implantação

Gerenciamento do ciclo de vida do aplicativo


(CI/CD)

Gerenciamento de contentores e clusters


(KUBERNETES)

LOGS &
Rede Armazenamento Registro Segurança
métricas

Automação de infra-estrutura e cockpit

Contêiner Runtime & Packaging


dE)

HOST atômico

Red Hat Enterprise Linux


Demo

Gerenciando contêineres do Windows


Server
Kubernetes no Windows - Futuro

Windows Server Windows Server Future


2016 version 1709 • Continued network
• Multiple containers per plugin development
• First Windows release
• Multiple containers per
with containers pod (process isolation)
pod with Hyper-V
• 1 container per pod • Faster kernel-mode kube- isolation
• Multiple net interfaces proxy • Linux & Windows pods
required • CNI Plugin on same host
• Local storage only • SMB mounts supported
• User-mode kube-proxy
Onde os App Admin's gastam tempo...
Manutenção de aplicativos existentes

Diagnosticar problemas com aplicativos existentes

Reimplantando aplicativos existentes

Implantando um novo aplicativo – feito!


Windows Server
version 1709
Canal de manutenção de
Canal semi-anual
longo prazo

Finalidade geral servidores de Aplicações de Contêiner e Hosts de


arquivos,
cargas de trabalho convencionais e de
contêineres, Hosts Hyper-
Cenários convergentes que se beneficiam de
terceiros, aplicações e outras funções
Recomendados inovação mais rápida
de infraestrutura

Cada 2 – 3 anos Cada 6 meses


Nova versão

5 anos de apoio mainstream


18 meses
+5 anos de suporte extendido Suportado para

Disponível nas
Standard e Datacenter
Edições do Windows Server Edições

Todos os clientes através de todos Software Assurance


os canais Quem pode usar e Cloud

Server Core e Servidor


Server Core e
com a experiência da área de
Opções de Nano Server
trabalho Instalação
O que há de novo no fall release (1709)

Application innovation Management reimagined


O que há de novo no fall release (1709)

Application innovation

Imagem de Nano Server otimizada para container


Aumento em densidade de containers e performance
Management
reimagined
.NET Core 2.0
SMB support para containers

Linux containers com Hyper-V isolation


Windows Subsystem for Linux
Windows Server v1709 – principais melhorias

ISO image Clean Install


Windows Server 2016 5.75 GB 14.9 GB
Server with Desktop Experience

Windows Server 2016 5.75 GB 11.15 GB


Server Core

ISO image Clean Install


Windows Server version 1709 2.77 GB 6.6 GB
Server Core
Nano Server, version 1709

Compressed—size on download Uncompressed—size on disk

Base + .NET Base + .NET


image Core runtime image Core runtime

Windows Server 2016 383 MB 413 MB Windows Server 2016 1.05 GB 1.15 GB
Nano Server Nano Server

Windows Server v1709 78 MB 107 MB Windows Server v1709 195 MB 262 MB


Nano Server Nano Server
© Copyright Microsoft Corporation. All rights reserved.
Obrigado!
© Copyright Microsoft Corporation. All rights reserved.
Laboratórios práticos
• Windows Server 2016 instalado em cada máquina
• Minimo de 4GB de RAM
• Ideal: suporte à virtualização (Intel-VT ou AMD-V)

• Caso não tenha máquinas de alunos com WS2016


então utilize a imagem pronta com Windows
Server 2016 Datacenter + Containers
• Recomendando fazer update após setup
Laboratórios práticos
• Conexão com internet (não usar proxy)
• Alguns laboratórios exigem trabalhar em dupla
• Dica para as atividades práticas:
• Powershell não é case-sensitive
• Docker é case sensitive

• Atenção: download das imagens de Windows


Server Core requer muito tempo e banda de
internet. Faça o download prévio das imagens:
1. Find-ContainerImage
2. Save-ContainerImage -Name NanoServer -Path c:\container-image
Lab 1

Instalando Containers
Instalar serviço de container e Docker
1. Abrir PowerShell em modo Administrativo
• Install-Module -Name DockerMsftProvider -Repository PSGallery -Force
• Install-Package -Name docker -ProviderName DockerMsftProvider
• Restart-Computer -Force
2. Faça Windows Update após reiniciar
3. Verificar instalação
1. Get-WindowsFeature Containers
2. Get-Service Docker
Instalar imagens de base
1. Abrir PowerShell em modo administrativo
2. Comando Docker para listar repositório público com
imagens da Microsoft
1. Docker search microsoft

3. Ex: baixe a imagem de Windows Server Core


1. Docker pull microsoft/windowsservercore
Verificando imagens instaladas
• Abrir Explorer
• C:\ProgramData\Microsoft\Windows\images

• Visualizando via PowerShell e Docker


Preparando imagens
• Adicionar TAG para a imagem ser utilizada
• docker tag windowsservercore:10.0.14300.1000 windowsservercore:latest
• docker tag windowsservercore:10.0.14300.1016 nanoserver:latest
• Visualizar imagens existentes
• Docker images
• Get-containerimage
Implantando Containers
1. Abrir PowerShell em modo Administrativo
1. Docker search Microsoft
2. OU
3. Docker search *

2. Baixando container
1. docker pull microsoft/iis:windowsservercore

3. Iniciar container em background (-d), mapear porta do


host p/ o container (-p) e executar PING para manter
container no ar
1. docker run -d -p 80:80 microsoft/iis:windowsservercore ping -t localhost

4. Visualizando container em execução (ps)


1. Docker ps -a
Visualisando Web Site
1. Verificar qual IP está em uso no Host
1. Ipconfig
2. Usar outro computador na sua rede e digitar no browser
o IP do Host (passo 1)
Desligando container
1. Visualizar container em execução e anotar nome
1. Docker ps

2. Remover container (rm) à força (-f)


1. Docker rm –f fervent_wright
3. Visualizar containers ativos
1. Docker ps -a
Executando containers “por demanda”
1. Abrir PowerShell em modo Administrativo
2. Iniciar container em modo interativo (-it), mapear porta do host
p/ o container (-p) e visualizar comando
1. docker run -it -p 80:80 microsoft/iis:windowsservercore ping -t localhost

3. Abrir outro PowerShell em modo administrativo e visualizar


containers
1. Docker ps

4. Voltar para 1° janela do PowerShell com comando PING e


derrubar container
1. CTRL + C

5. Voltar para 2° janela do PowerShell com comando Docker ps e


executar novamente
Editando conteúdo de container
1. Abrir PowerShell em modo Administrativo
2. Criar novo container e executar CMD
1. docker run -it -p 80:80 microsoft/iis:windowsservercore cmd
3. Apagar pagina inicial do IIS
1. del C:\inetpub\wwwroot\iisstart.htm
4. Criar nova pagina
1. echo “Teste do @fabiohara" > C:\inetpub\wwwroot\index.html
5. Fechando sessão do container
1. Exit
Editando conteúdo de container (cont...)
1. Verificar nome do container
1. Docker ps –a
2. Criar nova imagem de container (commit)
1. Docker commit nome_container modificado-iis
3. Visualizar imagens criadas
1. Docker images
Lab extra

Dockerfile
Sintaxe (exemplos)
1. Informar imagem de container a ser usada
1. FROM windowsservercore

2. Executar comando (exec form ou shell form)


1. RUN [“powershell”, “New-item”, “c:\\teste”]
2. Ou
3. RUN powershell new-item c:\teste
4. RUN dism.exe /online /enable-feature /all /featurename:iis-webserver /norestart
5. RUN powershell.exe –command c:\vcredist_x86.exe /quiet

3. Copiar dados
1. COPY teste1.txt c:/temp/
2. COPY diretorio1 /sqldemo/

4. ADD (similar ao COPY)


1. ADD teste2.txt c:/temp/
2. ADD https://www.python.org/ftp/python/3.5.1/python-3.5.1.exe /temp/python-3.5.1.exe
Sintaxe (exemplos)(cont...)
1. Diretório de trabalho
1. WORKDIR c:\\windows
2. WORKDIR c:\\app1\\dev

2. Comando padrão para ser executado no deploy de uma


instância de container (exec form e shell form)
1. CMD [“c:\\app1\\dev\\httpd.exe”, “-x”]
2. OU
3. CMD c:\\app1\\dev\\httpd.exe –x
Sintaxe (exemplos)(cont...)
1. Varias linhas de comando via ESCAPE (caractere \ ou `)
1. RUN powershell.exe -Command \
2. $ErrorActionPreference = 'Stop'; \
3. wget https://www.python.org/ftp/python/3.5.1/python-3.5.1.exe -OutFile c:\python-3.5.1.exe ; \
4. Start-Process c:\python-3.5.1.exe -ArgumentList '/quiet InstallAllUsers=1 PrependPath=1' -Wait ; \
5. Remove-Item c:\python-3.5.1.exe -Force

2. Usando caractere `
1. FROM windowsservercore
2. RUN powershell.exe -Command `
3. $ErrorActionPreference = 'Stop'; `
4. wget https://www.python.org/ftp/python/3.5.1/python-3.5.1.exe -OutFile c:\python-3.5.1.exe ; `
5. Start-Process c:\python-3.5.1.exe -ArgumentList '/quiet InstallAllUsers=1 PrependPath=1' -Wait ; `
6. Remove-Item c:\python-3.5.1.exe -Force
Sintaxe (exemplos)(cont...)
1. Comandos PowerShell no Dockerfile
1. FROM windowsservercore
2. RUN powershell -command Expand-Archive -Path c:\apache.zip
-DestinationPath c:\
2. Chamada REST
1. FROM windowsservercore
2. RUN powershell.exe -Command \
3. $ErrorActionPreference = 'Stop'; \
4. Invoke-WebRequest https://www.python.org/ftp/python/3.5.1/python-
3.5.1.exe -OutFile c:\python\python-3.5.1.exe ; \
5. Start-Process c:\python\python-3.5.1.exe -ArgumentList '/quiet
InstallAllUsers=1 PrependPath=1' -Wait ; \
Sintaxe (exemplos)(cont...) Invoke-webrequest e WebClient
por enquanto não são suportados
no Nano Server (TP5)
1. Comando PowerShell no Dockerfile
1. FROM windowsservercore
2. RUN powershell -command Expand-Archive -Path c:\apache.zip -DestinationPath c:\

2. Chamada REST (usando invoke-webrequest)


1. FROM windowsservercore
2. RUN powershell.exe -Command \
3. $ErrorActionPreference = 'Stop'; \
4. Invoke-WebRequest https://www.python.org/ftp/python/3.5.1/python-3.5.1.exe -OutFile c:\python\python-3.5.1.exe ; \
5. Start-Process c:\python\python-3.5.1.exe -ArgumentList '/quiet InstallAllUsers=1 PrependPath=1' -Wait ; \
6. Remove-Item c:\python\python-3.5.1.exe –Force

3. Chamada REST (usando biblioteca .Net WebClient)


1. FROM windowsservercore
2. RUN powershell.exe -Command \
3. $ErrorActionPreference = 'Stop'; \
4. (New-Object System.Net.WebClient).DownloadFile('https://www.python.org/ftp/python/3.5.1/python-
3.5.1.exe','c:\python\python-3.5.1.exe') ; \
5. Start-Process c:\python\python-3.5.1.exe -ArgumentList '/quiet InstallAllUsers=1 PrependPath=1' -Wait ; \
6. Remove-Item c:\python\python-3.5.1.exe -Force
Sintaxe (exemplos)(cont...)
1. PowerShell script no Dockerfile
1. FROM windowsservercore
2. ADD script.ps1 /windows/temp/script.ps1
3. RUN powershell.exe -executionpolicy bypass c:\windows\temp\script.ps1
Criando imagems via Dockerfile
1. Criar diretório para repositório do Dockerfile
1. Powershell new-item c:\build\dockerfile –force

2. Editar Dockerfile com Notepad


1. Notepad c:\build\dockerfile

3. Criar nova imagem (usando microsoft/iis:windowsservercore) e


executar comando
1. Copie e cole o seguinte texto
1. FROM microsoft/iis:windowsservercore
2. RUN echo "Hello World – teste de Dockerfile" > c:\inetpub\wwwroot\index.html
2. Salvar e fechar notepad

4. Criar nova imagem a partir do Dockerfile


1. CD build
2. Docker build –t teste2 .
3. OU
4. Docker build –t iis-dockerfile c:\build
Criando imagens via Dockerfile (cont...)
• Visualizar imagens disponíveis
• Docker images

• Vsualizar histórico de criação da imagem


• Docker history nome_imagem

• Implantar novo container baseado em imagem


• docker run -d -p 80:80 iis-dockerfile ping -t localhost

• Teste: verificar IP do host e abrir browser em outra maquina usando este IP


• Verificar nome do container em execução
• Docker ps

• Remover container (rm)


• Docker rm –f nome_container

• Extra: remover imagem (rmi)


• Docker rmi –f id_do_container
Lab 2

Instalando imagens via Docker


Hub
Baixando imagem do Docker Hub
1. Abrir PowerShell em modo administrativo e listar
imagens de container disponíveis
1. Find-containerimage

2. Listar imagens do Docker Hub


1. Docker search *

3. Baixar imagem com Apache para Windows Server Core


1. Docker pull microsoft/sample-httpd:windowsservercore

4. Baixar imagem com Apache para Nano Server


1. Docker pull microsoft/sample-httpd:nanoserver

5. Listar imagens locais


1. Docker images
Lab extra

Usando VM como Host de


Containers
Habilitar Hyper-V Container em uma VM do
Hyper-V
1. Instalar VM com Windows Server 2016 e
desligar
2. Executar comandos PowerShell no Host
1. #colocar o nome da VM
2. $vm = "<virtual-machine>"
3. #configurar o virtual processor
4. Set-VMProcessor -VMName $vm -ExposeVirtualizationExtensions $true -Count 2
5. #desativar dynamic memory
6. Set-VMMemory $vm -DynamicMemoryEnabled $false
7. #habilitar mac spoofing
8. Get-VMNetworkAdapter -VMName $vm | Set-VMNetworkAdapter -MacAddressSpoofing On
Lab 3

Implantando Windows
Containers e Hyper-V
Containers
Preparar Host
1. Verificar se Host suporta virtualização
1. Mínimo de 4GB de RAM para laboratório
2. Windows Server 2016
3. Processador suportando Intel-VT ou AMD-V
1. Msinfo32 para verificar se processador suporta virtualização

2. Instalar Role de Hyper-V


1. Install-windowsfeature hyper-v

3. Reiniciar servidor (caso não reinicie após instalação)


1. Restart-computer -force
(Opcional) Habilitar Hyper-V Container em uma
VM do Hyper-V
1. Instalar VM com Windows Server 2016 e
desligar
2. Executar comandos PowerShell no Host
1. #colocar o nome da VM
2. $vm = "<virtual-machine>"
3. #configurar o virtual processor
4. Set-VMProcessor -VMName $vm -ExposeVirtualizationExtensions $true -Count 2
5. #desativar dynamic memory
6. Set-VMMemory $vm -DynamicMemoryEnabled $false
7. #habilitar mac spoofing
8. Get-VMNetworkAdapter -VMName $vm | Set-VMNetworkAdapter -MacAddressSpoofing On
Usando VM Nano Server como host de
Containers
1. Copiar arquivo ISO do Windows Server 2016 localmente
e montar volume
1. Double click no arquivo ISO e entrar no diretório \NanoServer
2. Copiar pasta NanoServerImageGenerator para c:\Nano

2. Importar módulo
1. Import-module .\NanoServerImageGenerator -verbose

3. Abrir PowerShell em modo Administrativo e criar


imagem de Nano Server
1. New-NanoServerImage -Edition Standard -DeploymentType Guest -MediaPath e:\ -TargetPath
.\Nano\Nano.vhd -ComputerName Nano -containers -storage
Criar VM Nano no Hyper-V
1. Criar diretório para armazenar VM (ex: c:\VM\Nano)
2. Copiar arquivo Nano.VHD para pasta
3. Criar VM com nome Nano e usar VHD existente
(Nano.VHD)
Criando Container Hyper-V
1. Modo de isolamento (não executar)
1. Docker run –it --isolation=hyperv nanoserver cmd
2. Prompt Powershell será aberto em modo CMD

2. Modo normal
1. Docker run –d windowsservercore ping localhost –t
2. Copiar ID

3. Visualizando processo do ping via Docker


1. Docker top “ID_copiado”
2. Aparecerá o process ID e o comando (ping)

4. Visualizando processo do ping pelo Windows


1. Get-process –name ping
2. Aparecerá mesmo process ID acima
Criando Container Hyper-V (cont...)
1. Iniciar container em modo isolado
1. docker run -d --isolation=hyperv nanoserver ping -t localhost
2. Copiar ID

2. Visualizando processo do ping via Docker


1. Docker top “ID_copiado”

3. Visualizando processo via Windows


1. Get-process –name ping
2. Não aparecerá o ID listado no comando “docker top”

4. Visualizando o container isolado


1. Get-process –name vmwp ou via Task Manager
Lab 4

Gerenciando dados
Criando volumes de dados
1. Executar container e criar volume
1. Docker run –it –v c:\novo-volume-dados windowsservercore cmd
2. Criar arquivo na pasta c:\novo-volume-dados
1. Echo “teste de volume de dados” > c:\novo-volume-dados\testevolume1.txt
2. Dir
3. Exit
4. Visualizar volume no Host em c:\ProgramData\docker\volumes
Montando volume de dados
1. Criar pasta no Host e copiar arquivos
1. Criar pasta c:\origem
2. Copiar arquivos pequenos para esta pasta
2. Executar container montando volume de dados
existente no Host (c:\origem) para dentro do container
(c:\destino
1. Docker run –it –v c:\origem:c:\destino windowservercore cmd
2. Command Prompt será aberto
3. Visualizar conteúdo
1. Através do Command Prompt entrar na pasta c:\destino e visualizar
conteúdo (DIR)
Montando um único arquivo
1. Criar pasta e arquivo de teste no host
1. New-item -type directory –path c:\origem2
2. Echo “teste com arquivo único1” > c:\origem2\teste1.txt
3. Echo “teste com arquivo único2” > c:\origem2\teste2.txt
4. Echo “teste com arquivo único3” > c:\origem2\teste3.txt

2. Executar container e mapear arquivo


1. Docker run –it –v c:\origem2\teste1.txt windowsservercore cmd

3. Visualizar conte[udo de diretório de dentro do container


1. Cd origem2
2. Dir

4. Inspecionando volume compartilhado


1. Docker inspect nome_container
Lab extra

Gerenciando recursos
Gerenciando recursos
1. Controlando recurso de CPU (1-10000, default 5000)
para 2 processadores virtuais
1. Docker run –it --cpu-shares 2 –name dockerdemo windowsservercore
cmd

OBS: CPU e IO ainda não é suportado em


Hyper-V Containers
IO ainda não é suportado com volume de
dados
Lab extra

VM Nano com Hyper-V


containers
OBS: Instalação de imagens
ainda não está disponível (TBD)
Opcional – VM Nano com Hyper-V containers

1. Tambem conhecido como Nested Virtualization


2. Caso queira criar containers hyper-V dentro da VM
Nano Server basta executar o script PowerShell abaixo
1. #colocar o nome da VM
2. $vm = "<virtual-machine>"
3. #configurar o virtual processor
4. Set-VMProcessor -VMName $vm -ExposeVirtualizationExtensions $true -Count 2
5. #desativar dynamic memory
6. Set-VMMemory $vm -DynamicMemoryEnabled $false
7. #habilitar mac spoofing
8. Get-VMNetworkAdapter -VMName $vm | Set-VMNetworkAdapter -MacAddressSpoofing On
Habilitando regras de Firewall no Nano Server

1. Logon na console do Nano Server e acesse “Inbound


Firewall Rules”
2. Entrar em cada regra de “File and Printer Sharing” e
habilitar regra
1. Pressionar tecla F4 para enable
2. Status da opção “Enable” será “Allow”

3. Opcional – habilitar gerenciamento remoto via WinRM


1. Entrar na aba “Windows remote Management” e pressionar tecla ENTER 2 vezes

4. Verificar qual IP é utilizado pelo Nano


1. Aba “Networking” e selecionar adaptador Ethernet
Instalar Docker na VM Nano Server
• Nano Server não suporta Invoke-WebRequest
• Download local (ex: via Host) do Docker
• Invoke-WebRequest https://aka.ms/tp5/b/dockerd -OutFile .\dockerd.exe
• Invoke-WebRequest https://aka.ms/tp5/b/docker -OutFile .\docker.exe

• Conectar remoto na VM Nano Server


• Abrir PowerShell em modo Administrativo e digitar comando:

• Criar pasta C:\Docker, compartilhar e copiar conteúdo baixado


• New-item –type directory c:\docker
• New-SmbShare –name DOCKER –path c:\docker
• Grant-SmbShareAccess –name DOCKER –AccountName Administrators –AccessRight Full -force
Instalar Docker na VM Nano Server (cont..)

• Registrar serviço do Docker no Windows


• & “c:\docker\dockerd.exe” --register-service

• Inicializar serviço do Docker


• Start-service docker

• Instalar Package Provider para Windows Containers


• Install-packageprovider ContainerImage –force –verbose

• Baixar e instalar imagem base de Nano Server


• Install-containerimage –name NanoServer –version 10.0.14300.1010
• Obs: comando ainda não está disponível para Host Nano
Lab extra

Configurando Docker
Configurando Docker no Windows
• Arquivo daemon.json
• C:\ProgramData\docker\config\daemon.json
• Caso arquivo não exista então pode ser criado
• Obs: nem todos parâmetros do daemon.json são aplicáveis ao Docker para
Windows
• Permitir conexão do Docker daemon na TCP 2375
• Opção 1 – daemon.json
• "hosts": ["tcp://0.0.0.0:2375", "npipe://"]

• Opção 2 – SC Config (via CMD.exe)


• sc config docker binpath= "\"C:\docker\dockerd.exe\" --run-service -H tcp://0.0.0.0:2375"
Lab extra

Removendo Imagens
Removendo imagens instaladas
• Powershell
• Uninstall-ContainerOSImage –fullname
CN=Microsoft_NanoServer_10.0.14300.1016
• Docker
• Remover imagens
• Docker rmi windowsservercoreiis

• Remover containers
• Docker rm
Links adicionais
• Msdn.microsoft.com/virtualization/windowscontainers
• Docs.docker.com
• Azure.microsoft.com/en-us/blog/containers-docker-windows-
and-trends
• blogs.technet.microsoft.com/windowsserver/2015/10/28/a-
closer-look-at-windows-server-and-hyper-v-containers-with-
mark-russinovich/
• Technet.microsoft.com/en-us/library/mt126167.aspx
• mva.microsoft.com/pt-br/training-courses/docker-conceitos-e-
prtica-12185
• mva.microsoft.com/en-US/training-courses/whats-new-in-
windows-server-2016-16457

Você também pode gostar