O Docker permite isolar as aplicações e então decidi experimentar criar uma imagem com a última versão do Perl, mas que executasse uma aplicação definida alhures e montada em tempo de execução.
Então, escrevi uma pequena aplicação com Dancer:
#!/usr/bin/perl
use Dancer2;
get '/hello/:name' => sub {
return "Why, hello there " . params->{name};
};
dance;
É muito simples. Ela criar um servidor que atende a requisições do tipo http://localhost:3000/hello/nomeEntão, o próximo passo foi definir uma imagem para o Docker a partir da última imagem do Perl. O Dockerfile contém:
FROM perl:latest
MAINTAINER forinti
RUN curl -L http://cpanmin.us | perl - App::cpanminus
RUN cpanm Dancer2
EXPOSE 3000
CMD perl /app/hello.pl
As seções são:
- FROM - indica a imagem inicial;
- MAINTAINER - serve apenas para registrar o dono do projeto;
- RUN - executa os comandos exatamente como numa linha de comando;
- EXPOSE - indica a porta que estará disponível para comunicação; e
- CMD - indica o comando que será executado quando o contêiner for criado.
Para facilitar a gerência do contêiner, resolvi usar o docker-compose, conforme o arquivo de configuração abaixo (docker-compose.yml):
version: '3.3'
services:
hello:
build: .
container_name: hello
restart: unless-stopped
volumes:
- type: bind
source: /home/forinti/hello/
target: /app
ports:
- "3000:3000"
Está definido um serviço (hello:) que servirá a porta 3000 (ports: define que a porta 3000 de dentro do contêiner corresponderá à porta 3000 fora do contêiner). O diretório /home/forinti/hello será montado dentro da imagem como /app. Além disso, o serviço será reiniciado, exceto se explicitamente terminado.O diretório /home/forinti/hello contém os seguintes arquivos:
total 20
drwxrwxr-x 2 forinti forinti 4096 Dez 13 15:28 ./
drwxr-xr-x 49 forinti forinti 4096 Dez 13 12:37 ../
-rw-rw-r-- 1 forinti forinti 223 Dez 13 15:27 docker-compose.yml
-rw-rw-r-- 1 forinti forinti 172 Dez 13 15:28 Dockerfile
-rwxrw-r-- 1 forinti forinti 120 Nov 21 16:19 hello.pl*
Para criar a imagem, basta rodar "docker-compose build". E, para iniciar o serviço, "docker-compose up".
$curl -XGET localhost:3000/hello/forinti
Why, hello there forinti
Dá para pegar gosto pela coisa.
Nenhum comentário:
Postar um comentário