Refletir a organização de diretórios no docker em uma API em Plumber

Bom dia!

Estou desenvolvendo uma API em plumber. Como a quantidade de endpoints é grande, faz-se necessário organizar os arquivos em diretórios por sua função. Em linhas gerais, mantenho um arquivo main.R no root e cada pasta contém vários arquivos, cada um com um endpoint diferente. A organização de pastas é parecida com isso:

project
    main.R
    Dockerfile
    sub_dir_1
        file_1_1.R
        file_1_2.R
    sub_dir_2
        file_2_1.R
        file_2_2.R

O Dockerfile está organizado assim:

FROM rstudio/plumber

COPY main.R /
COPY sub_dir_1/file_1_1.R /
COPY sub_dir_1/file_1_2.R /
COPY sub_dir_2/file_2_1.R /
COPY sub_dir_2/file_2_2.R /

EXPOSE 8000/tcp
CMD ["/main.R"]

No entanto, quando eu copio os arquivos eles ficam organizados assim:

main.R
file_1_1.R
file_1_2.R
file_2_1.R
file_2_2.R

Minha pergunta é:

Como copiar os arquivos no docker para que reflitam a organização de diretórios original?

Acabou que descobri como resolver o problema. Vou deixar a pergunta aqui caso alguém tenha essa mesma dúvida e precise da solução.

A função COPY pode receber o caminho dos arquivos e onde ele ficará alocado. No primeiro “argumento” vai o arquivo a ser copiado e no segundo o local que ele será alocado no docker. Fica assim:

FROM rstudio/plumber

COPY main.R /
COPY sub_dir_1/file_1_1.R sub_dir_1/
COPY sub_dir_1/file_1_2.R sub_dir_1/
COPY sub_dir_2/file_2_1.R sub_dir_2/
COPY sub_dir_2/file_2_2.R sub_dir_2/

EXPOSE 8000/tcp
CMD ["/main.R"]

Ou, se quiserem ler todos os arquivos terminados em R dentro do diretório, fica desse jeito:

FROM rstudio/plumber

COPY main.R /
COPY sub_dir_1/*.R sub_dir_1/
COPY sub_dir_2/*.R sub_dir_2/

EXPOSE 8000/tcp
CMD ["/main.R"]

Espero que alguém se beneficie dessa resposta!

1 curtida