Pular para o conteúdo principal

Dockerfile

· Leitura de 4 minutos

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! :)