Olá pessoal,
Esse é o segundo artigo da nossa série sobre como usar o Docker para realizar atividades de desenvolvimento no Windows 10. No primeiro artigo mostrei um passo a passo de como preparar o ambiente e também fizemos um breve tour em algumas funcionalidades do Docker através do uso da imagem docker/whalesay.
Já nesse artigo irei demonstrar como desenvolver aplicações usando containers Docker. E uma das principais vantagens disso é que você não precisará instalar várias ferramentas e softwares na sua própria máquina. Ao invés disso, você irá fazer o download (pull) de uma imagem, criar um container Docker a partir dessa imagem e então desenvolver usando esse container.
Pesquisando e usando Imagens Docker
Conforme vimos no artigo anterior, o Docker disponibiliza em seu site uma lista de imagens públicas que você pode baixar e usar:
Por exemplo, vamos buscar a imagem httpd
(imagem do Apache Httpd). Ao clicar em detalhes da imagem httpd, vemos informações de como usar essa imagem tanto a partir de Dockerfile (que será explorado mais adiante) ou diretamente via linha de comando.
Vamos experimentar usar essa imagem para executar em container. Para isso, abra o Prompt de comando ou Powershell e execute o comando a seguir:
C:\>docker run -d -p 8080:80 --name meu-apache httpd:2.4
Onde:
1. -d define que o container irá rodar em segundo plano (-d).
2. -p 8080:80 mapeia a porta TCP 80 (porta default do Apache Httpd) do container para a porta 8080 da nossa máquina local.
3. --name permite a você dar um nome para o container.
4. httpd:2.4 define a imagem e versão que iremos usar. Se especificar apenas httpd, a última (latest) será baixada.
Para informações detalhadas do comando, execute
docker run --help
Como resultado, o Docker irá verificar se a imagem httpd existe localmente e, se não existir, ele irá baixar a imagem. Depois disso ele irá rodar um container Docker usando essa imagem. Para verificar se o container está rodando, execute o comando docker ps
Agora já podemos verificar o Apache Httpd rodando na porta TCP 8080 da nossa máquina. Podemos usar tanto o endereço http://172.0.0.1:8080/ como http://localhost:8080/:
Compartilhamento de arquivos com o container
O container executado a pouco só fornece um servidor Apache Httpd a partir da imagem que baixamos. Porém, queremos usufruir do container publicando páginas Web. Para isso precisamos compartilhar com o container nossos arquivos de desenvolvimento local. Para fazer isso, precisamos primeiro configurar o Docker dando a ele permissão de compartilhar nosso drive onde estão os arquivos.
- Acesse as configurações do Docker clicando com o botão inverso do mouse na baleia que deve estar disponível nos ícones na sua barra de tarefas:
- Na aba “Shared Drives” selecione o drive a ser compartilhado:
Feito isso, vamos voltar para a linha de comando.
- Pare e remova o container que foi criado a pouco. Temos que fazer isso para criar outro container com a customização de compartilhamento de volume.
C:\>docker stop meu-apache
meu-apacheC:\>docker rm meu-apache
meu-apache - Crie uma pasta onde serão colocados os arquivos HTML.
- Execute o novo container passando agora o parâmetro
-v
para fornecer volume que disponibiliza uma pasta local em um caminho dentro do container. Para o Httpd Apache, o caminho que nos interessa para publicar o HTML é o/usr/local/apache2/htdocs/
C:\>docker run -d -p “8080:80” -v //C/dev/MeuSiteWeb/:/usr/local/apache2/htdocs/ --name meu-apache httpd:2.4
Note que a notação para o caminho da pasta no Windows é definido como
//C/dev/MeuSiteWeb/
Se tentarmos agora acessar novamente o mesmo endereço Web no Browser, notem que é exibida mensagem de erro 404 Not Found:
Isso acontece porque nossa pasta C:\dev\MeuSiteWeb
está vazia. Precisamos então criar nossas páginas Web. No meu caso usarei o Visual Studio Code para abrir a pasta C:\dev\MeuSiteWeb
e criar meu arquivo HTML.
Segue código do arquivo HTML que criei usando o Bootstrap:
<!DOCTYPE html> <html> <head> <title>Meu Site Web no Container Docker</title> <meta charset="utf-8"> <!-- Latest compiled and minified CSS --> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> <!-- jQuery library --> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> <!-- Latest compiled JavaScript --> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> </head> <body> <div class="container"> <h1>Nova Pagina</h1> <p>Está página está sendo acessada via compartilhamento de volume.</p> </div> </body> </html>
Se atualizarmos de novo a página no browser, notem que será exibido o conteúdo que acabamos de criar na nossa máquina local. Isso sem precisarmos reiniciar o container ou fazer qualquer outra intervenção.
Próximos Passos
Apresentei nesse artigo como rodar um container Apache e como fazer compartilhamento de pastas locais para dentro do container. Os outros artigos da série exploram outras possibilidades do Docker, como:
– Criar uma infraestrutura de containers Nginx, PHP e MySQL para desenvolver aplicação Web PHP, demonstrando como realizar comunicação entre diferentes containers.
– Criar imagens personalizadas e subir no nosso Docker Registry (registro de imagens Docker) para posteriormente compartilhar com outras pessoas.
– Criar imagens personalizadas e subir no nosso Docker Registry (registro de imagens Docker) para posteriormente compartilhar com outras pessoas.
E fiquem a vontade para sugerir exemplos para demonstrarmos aqui. Abraços e até a próxima.
Muito bom. Quase não se encontra material do docker para o windows, alguns que encontrei foi sem a integração com hyper-v. Porém ainda estou com dificuldades. Instalei o apache e funcionaou mas quando fiz o mapeamento para minha própria pasta ele não encontra o meu index.html, acredito estar direcionando para outro lugar. Já conferi várias vezes: docker run -d -p 8080:80 -v //c/dev/app/:/usr/local/apache2/htdocs/ –name meu-apache httpd:2.4 meu arquivo index.html está na pasta C:/dev/app pode me ajudar??
CurtirCurtir
Olá Elsio, tudo bem?
Eu executei o comando que você passou e funcionou aqui. Então acredito que esse problema é porque faltou configurar compartilhamento de drives no Docker. Tente aplicar novamente as mudanças referentes ao compartilhamento do drive C conforme descrevi no tópico “Compartilhamento de arquivos com o container”. Se mesmo assim não funcionar, me avise para vermos como resolver.
Abraços,
João
CurtirCurtir
João obrigado pelo retorno. Já havia feito o compartilhamento no docker e não funcionou, digitei então o comando no powershell (docker run –rm -v c:/Users:/data alpine ls /data) e aí sim passou a funcionar. Pelo que entendi então para fazer este compartilhamento tenho que antes de mais nada rodar este comando para concluir o mapeamento? Serve para todos os containers? Este alpine seria um container para compartilhamento? Como posso alterar o arquivo de configuração do apache?
Estava utilizando também o gitbash mas este comando não tem o mesmo efeito depois de um bom tempo aparece a informação: ls: C:/Program Files/Git/data: No such file or directory.
Grato!!
CurtirCurtir
Olá Elsio, tudo bem?
Na verdade a configuração do compartilhamento feita no Docker só indica que o seu Drive poderá ser compartilhado com o container quando ele for criado. Desse modo, quando for executado o comando “docker run”, você poderá compartilhar volumes do seu drive com o container. Você só precisará fornecer o argumento “-v”.
Já sobre comando “docker run –rm -v c:/Users:/data alpine ls /data” que você mencionou, ele não é necessário para fazer o compartilhamento funcionar. Segue explicação sobre ele:
–rm: indica que o container deverá ser excluído quando for finalizado. Por padrão ele não é excluído.
-v c:/Users:/data: você está compartilhando sua pasta “c:/Users” no caminho “/data” do container. Este caminho deve estar definido no container.
alpine: é uma imagem Docker que possui o Alpine Linux. Quando você especifica somente o nome da imagem, ele baixa a ultima versão disponível (equivamente a alpine/latest)
ls /data: é o comando que você está executando no container. Neste caso você está listando a pasta /data
Um detalhe: esse container será criado com base na imagem alpine/latest, executará o comando “ls /data” e depois finalizará, sendo excluído. Isso acontece porque o comando “ls /data” não se mantém ativo. Já um container com Apache se mantém ativo porque o servidor Apache se mantém em execução aguardando requisições HTTP.
Por fim, para alterar o arquivo de configuração do Apache, você deve compartilhar o seu arquivo de configuração “httpd.conf” para substituir o arquivo de configuração padrão “/usr/local/apache2/conf/httpd.conf”. No meu outro artigo (https://talkitbr.com/2016/11/01/usando-docker-no-windows-10-parte-3/) eu explico como alterar a configuração de um servidor nginx. No caso do Apache seria o mesmo procedimento, mas para o arquivo httpd.conf
Bom, espero ter ajudado. Mas fique a vontade para trazer mais perguntas. E obrigado pelo comentário!
Abraços,
João
CurtirCurtir