Olá, este post irá explicar como criar um Dockerfile para um contentor Ruby que já tem MDL instalado. Por favor, verifique o meu anterior post para compreender melhor o Docker.
O que é o t?
Um Dockerfile é um documento de texto que contém todos os comandos que um utilizador poderia chamar na linha de comando para montar uma imagem. Utilizando a construção da doca os utilizadores podem criar uma construção automática que executa sucessivamente várias instruções de linha de comando.
Tal como o Vagrant que usa um ficheiro vagabundo para criar e personalizar uma máquina virtual de acordo com as suas necessidades, o Docker usa um ficheiro de doca para criar e personalizar um contentor! Podem ser semelhantes, mas são muito diferentes! (pode aprender como usar o Vagrant para criar um Windows Server vm aqui)
Como já foi dito anteriormente, para este exemplo, vamos criar um recipiente de rubi com mdl instalado. Por isso, precisamos de começar o nosso ficheiro portuário:
FROM ruby:latest
FROM cria uma camada a partir da última imagem Ruby Docker.
FROM ruby:latest
WORDIR /mdl
A instrução WORDIR define o directório de trabalho para qualquer instrução RUN, CMD, ENTRYPOINT, COPY e ADD que a siga no Dockerfile. Se o WORKDIR não existir, será criado mesmo que não seja utilizado em qualquer instrução subsequente do Dockerfile.
FROM ruby:latest
WORDIR /mdl
RUN gem install mdl
O RUN tem 2 formas:
- comando RUN (forma shell, o comando é executado numa shell, que por defeito é /bin/sh -c no Linux ou cmd /S /C no Windows)
- RUN ["executável", "param1", "param2"] (formulário exec)
No nosso exemplo, a RUN executa um comando que instala MDL directamente no contentor de rubi
FROM ruby:latest
WORDIR /mdl
RUN gem install mdl
ENTRYPOINT [ "/bin/bash" ]
ENTRYPOINT, tal como RUN, tem 2 formas! Forma Shell ou forma executiva.
A forma exec, que é a forma preferida:
ENTRYPOINT ["executável", "param1", "param2"]
A forma da concha:
ENTRYPOINT comando param1 param2
No nosso caso, estamos a utilizá-lo de forma executiva para que possamos executar a nossa bash. Isto deixará o nosso contentor aberto porque a bash está a funcionar em segundo plano.
Por isso, agora que temos o nosso ficheiro portuário, temos de construir o nosso contentor a fim de o executar!
docker build --tag user/mdl
O comando ---tag* nomeia a imagem do recipiente em questão. E agora que o contentor está construído, podemos executá-lo!
Para tal, será utilizado o seguinte comando:
docker run -tid --name mdl -v /home/vagrant:/mdlfiles user/mdl
Para ter a certeza se o seu contentor está a funcionar correctamente, faça um simples ``docker ps -a```` apenas para ter a confirmação. Ao fazê-lo, irá mostrar-lhe todos os detalhes e estado do seu contentor.
Após confirmar que o contentor está a funcionar, queremos executar mdl* para verificar o nosso ficheiro de marcação. Para o fazer, teremos de executar o comando mdl dentro de uma bash que irá obter o ficheiro .md dentro da pasta que partilhámos e a que demos o nome de "mdlfiles".
docker exec mdl bash -c "mdl /mdfile/myfile.md"
Se tiver algumas inconsistências em relação às regras da ferramenta mdl, obterá um resultado como este:
/mdfile/docker.md:5: MD009 Trailing spaces
/mdfile/docker.md:77: MD009 Trailing spaces
/mdfile/docker.md:25: MD012 Multiple consecutive blank lines
/mdfile/docker.md:51: MD012 Multiple consecutive blank lines
/mdfile/docker.md:13: MD013 Line length
/mdfile/docker.md:52: MD013 Line length
/mdfile/docker.md:54: MD013 Line length
/mdfile/docker.md:89: MD024 Multiple headers with the same content
/mdfile/docker.md:19: MD026 Trailing punctuation in header
/mdfile/docker.md:26: MD026 Trailing punctuation in header
Depois de os corrigir a todos, não deverá ter retorno após o seu comando! :)