Skip to content

Instantly share code, notes, and snippets.

@filipegorges
Created November 11, 2017 22:14
Show Gist options
  • Save filipegorges/51af4fd1791eca688c6ace666a20b7c4 to your computer and use it in GitHub Desktop.
Save filipegorges/51af4fd1791eca688c6ace666a20b7c4 to your computer and use it in GitHub Desktop.
Configuração do Docker no Hyper-V (Windows)

Docker + Hyper-V (Windows 10)

Step-by-step

  1. Ativar a feature Hyper-V na tela Windows Features (Requer Windows 10 PRO, ou Windows Server com Hyper-V)
  2. Reiniciar
  3. Seguir o passo a passo da sessão Example, até o step TRÊS (https://docs.docker.com/machine/drivers/hyper-v/)
  4. Abrir o PowerShell como Administrador, e execute: docker-machine create –d hyperv --hyperv-virtual-switch "Primary Virtual Switch" default
  5. Criar ou mover a pasta do projeto para a pasta C:/Users
  6. Botão direito na pasta, Properties -> Security
  7. Clicar em Edit, seleciona Users, marca Full control, clica em Apply
  8. Adicionar seu Dockerfile na pasta do teu projeto
  9. Abrir o PowerShell e navegar até a pasta do seu projeto
  10. Executar docker build -t nome_da_imagem .
  11. Na sua barra de tarefas (na seta ao lado da sua conexão de rede, no windows), clique com o botão direito na baleia do Docker -> Settings...
  12. Vá em Shared Drives, marque a caixinha ao lado do Drive C, clique em Apply
  13. De volta ao PowerShell, execute: docker run -p porta_do_host:porta_do_container -v ${PWD}:/pasta_do_workdir_do_container nome_da_imagen comando parametros_se_houver
  14. Abrir o navegador, acessar localhost:porta_mapeada_do_container para visualizar o serviço executado 15: Para parar o serviço, execute CTRL+C, ou docker ps, docker stop id_do_container caso executando container em modo daemon (parâmetro -d).

Comandos usuais

Na docker engine:

  • docker ps lista quais containers estão ativos
  • docker images lista quais imagens estão presentes no sistema
  • docker stop pára um ou mais containers pelo id
  • docker build constrói a imagem em cima do Dockerfile presente no diretório passado como argumento
    • -t define a tag (nome) da imagem
  • docker run:
    • -d roda o container em modo daemon, se quiser rodar dentro do console, basta omitir o parâmetro.
    • -p define a porta a ser mapeada entre host/container
    • -i mantém a STDIN aberta
    • -t aloca um terminal tty
    • -v define o volume do host a ser mapeado para o container (pasta X do host para ser acessado na pasta Y do container), lembrando que é necessário compartilhar o drive no Docker antes.

Exemplo de comando mapeando portas/volumes: docker run –p 3000:3000 –v ${PWD}:/app ruby rails s –b:0.0.0.0 -p 3000

Exemplo de comando abrindo o container via terminal: docker run -i -t -v ${PWD}:/app nome_da_imagem bash

Exemplo de comando acessando um container em execução via terminal: docker exec -i -t id_do_container bash

Na docker-machine:

  • docker-machine ip retorna o IP da docker-machine
  • docker-machine create
    • -d define o driver a ser utilizado pela docker-machine, no caso do Windows, hyperv
    • --hyperv-virtual-switch define a interface a ser utilizada entre docker-machine/host, no caso do exemplo da documentação do docker: "Primary Virtual Switch" Exemplo de comando de criação de docker-machine: docker-machine create –d hyperv --hyperv-virtual-switch "Primary Virtual Switch" default

Exemplo de Dockerfile

# Official Ubuntu image with Ruby installed 
FROM ruby:2.3.0

# Set proxies
ENV http_proxy http://my-proxy.com:8088 
ENV https_proxy https://my-proxy.com:8088 
 
# Update package lists and install dependencies 

RUN apt-get update && apt-get install -y \ 
    build-essential \ 
    libpq-dev \ 
    nodejs \ 
  && rm -rf /var/lib/apt/lists/* 
  
# Define where the application will live inside the image 
ENV APP_HOME /app 

# Create the application folder 
RUN mkdir -p $APP_HOME 

# Set the workind directory inside the image 
WORKDIR $APP_HOME 

# Add Gemfile and install dependencies 
COPY Gemfile* $APP_HOME/ 

RUN bundle install 

Exemplo de docker-compose.yml

version: '3' 
services:  
  db:     
    image: postgres 
  web:     
    build: . 
    command: rails s -b 0.0.0.0 -p 3000     
    volumes:       
      - .:/app 
    ports: 
      - "3000:3000"     
    depends_on:       
      - db  

Sintaxe do comando:

  • docker-compose build: constrói imagens a partir de Dockerfiles presentes no path informado em build.
  • docker-compose up: orquestra serviços definidos no docker-compose.yml e suas dependências.
  • docker-compose up serviço: executa somente o serviço selecionado, com suas dependências (pode ser acessado via host)
  • docker-compose run serviço: executa somente o serviço selecionado, com suas dependências (não pode ser acessado via host)

O campo command define qual comando será executado por default quando chamado o serviço, podendo passar argumentos para o serviço quando quiser executar um comando diferente a nível de container.

Para informar multiplos parâmetros, command pode chamar o bash: command: bash -c "comando_1 && comando_2 && comando_3"

O nome dos serviços definidos se torna o hostname do serviço, exemplo: meu_servico_web pode ser chamado diretamente dentro do código da aplicação em execução em um container dentro da mesma rede criada pelo docker-compose (https://meu_serico_web:3001).

Exemplo: docker-compose run web rails console


Resources

@menino360
Copy link

O passo 3 já não é exequível, alguma alternativa ou novas instruções?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment