- Ativar a feature Hyper-V na tela Windows Features (Requer Windows 10 PRO, ou Windows Server com Hyper-V)
- Reiniciar
- Seguir o passo a passo da sessão Example, até o step TRÊS (https://docs.docker.com/machine/drivers/hyper-v/)
- Abrir o PowerShell como Administrador, e execute:
docker-machine create –d hyperv --hyperv-virtual-switch "Primary Virtual Switch" default
- Criar ou mover a pasta do projeto para a pasta C:/Users
- Botão direito na pasta, Properties -> Security
- Clicar em Edit, seleciona Users, marca Full control, clica em Apply
- Adicionar seu Dockerfile na pasta do teu projeto
- Abrir o PowerShell e navegar até a pasta do seu projeto
- Executar
docker build -t nome_da_imagem .
- 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...
- Vá em Shared Drives, marque a caixinha ao lado do Drive C, clique em Apply
- 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
- Abrir o navegador, acessar localhost:porta_mapeada_do_container para visualizar o serviço executado
15: Para parar o serviço, execute
CTRL+C
, oudocker ps
,docker stop id_do_container
caso executando container em modo daemon (parâmetro-d
).
Na docker engine:
docker ps
lista quais containers estão ativosdocker images
lista quais imagens estão presentes no sistemadocker stop
pára um ou mais containers pelo iddocker 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-machinedocker-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
# 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
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
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
- Docker Compose: https://docs.docker.com/compose/
- Docker Documentation: https://docs.docker.com/
- Docker Forums (suporte): https://forums.docker.com/
- Docker images: https://hub.docker.com/
- Exemplo Docker Rails: https://docs.docker.com/compose/rails/
O passo 3 já não é exequível, alguma alternativa ou novas instruções?