Como criei um ambiente de produção com Docker e RStudio Server

Se você já tentou trabalhar com R em produção (um crime para alguns) sabe das dificuldades de criar um ambiente em que as suas análises irão rodar sem problemas, principalmente em relação a pacotes e dependências.
Para casos mais simples, em que apenas é preciso controlar os pacotes do R, já existem soluções prontas como o packrat e o renv. No entanto, no caso em que é necessário o controle sobre as dependências do SO (compiladores ou softwares específicos) temos um problema não tão trivial em mãos.
Uma solução
Como trabalhamos diariamente com R aqui na empresa onde estou e temos que gerar relatórios reprodutíveis tanto localmente quanto em cloud, pensamos em uma forma de criar um ambiente básico de datascience em que todas as análises seriam criadas. Dessa forma, qualquer membro da equipe de datascience conseguiria rodar e dar manutenção nessas análises sem maiores problemas.
Como seria bom ter uma máquina portatil que funcionaria em qualquer lugar e que seria possível controlar tudo, inclusive o sistema operacional, certo? Pois é, isso é possível com a tecnologia de conteinerização usando Docker (uma maravilha do mundo moderno).
Legal, mas como faz isso??
Para facilitar, estou partindo do pressuposto que a máquina em que esse processo será feito roda alguma distribuição linux como SO.
Os passos para fazermos a mágia acontecer são esses a seguir:
Instalar docker e docker-compose
O primeiro passo é instalar o docker. Por gosto pessoal e costume, também utilizo o docker-compose para facilitar a gestão de containers. Essas serão as únicas dependência das máquinas em que serão criados os ambientes com R.
Para instalar essas ferramentas é possível seguir os passos da própria documentação do Docker e docker-compose.
Criar um Dockerfile
Para começar, é preciso criar uma pasta para o projeto e dentro dela criar um arquivo Dockerfile
. No caso, criaremos uma pasta chamada docker_R
para exemplificar .
mkdir docker_R && cd docker_R && touch Dockerfile
Após criar o Dockerfile, é preciso abrí-lo em algum editor de texto e usar a seguinte sintaxe:
FROM rocker/verse:3.6.3
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
libsqlite3-dev \
libssl-dev
RUN R -e "install.packages('RSQLite')"
Nesse caso, já usamos a imagem pronta do rocker como base, o que facilita muito o trabalho por já conter o R e RStudio server instalados.
A vantagem de escrever o Dockerfile ao invés de só “puxar” o docker do rocker é poder especificar as dependências de linux (libsqlite3-dev
e libssl-dev
) e de R (RSQLite
) que forem interessantes para a sua aplicação.
Criar um docker-compose.yml
Para ficar um pouco mais cômodo de se lidar com o docker, é possível criar um arquivo docker-compose.yml
com a seguinte estrutura:
version: '3'
services:
rstudio:
build: .
container_name: container_rstudio
environment:
USER: "usuario"
PASSWORD: "senha"
ports:
- 8787:8787
Esse documento informa que o nome do container será “container_rstudio”, o usuário da sessão será “usuário” e a senha “senha”, uma vez que o RStudio Server precisa de login. Além disso, o RStudio Server será acessível pela porta 8787.
Buildar e iniciar o docker
Assim que o Dockerfile e o docker-compose estiverem prontos é preciso buildar e iniciar o docker para acessá-lo. Para isso, utilize o seguinte comando dentro da pasta em que se encontram os arquivos Dockerfile
e docker-compose.yml
:
docker-compose build
Esse processo poderá demorar um pouco, mas aproveite para tomar um café enquanto isso :) .
Depois que aparecer uma mensagem de Successfully Build
é só usar o comando docker-compose start
e acessar o RStudio Server pela porta 8787, se estiver rodando localmente é só ir no http://localhost:8787/ e Voilà!
Obs: a vantagem desse processo é que é possível “levantar” esse ambiente em qualquer máquina com docker, seja localmente ou em cloud, assim fica muito mais fácil fazer a “portabilidade” das análises.
Pronto! Agora você pode cometer o crime de usar R em produção sem medo de ser feliz!