<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Lucas Pereira Reis</title>
    <description>The latest articles on DEV Community by Lucas Pereira Reis (@lucasreis).</description>
    <link>https://dev.to/lucasreis</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F535690%2Fc1812cf1-9944-4dc9-a22a-123846881949.jpeg</url>
      <title>DEV Community: Lucas Pereira Reis</title>
      <link>https://dev.to/lucasreis</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/lucasreis"/>
    <language>en</language>
    <item>
      <title>Executando Jupyter Lab com Docker e Docker Compose</title>
      <dc:creator>Lucas Pereira Reis</dc:creator>
      <pubDate>Tue, 03 Aug 2021 16:01:40 +0000</pubDate>
      <link>https://dev.to/lucasreis/executando-jupyter-lab-com-docker-e-docker-compose-35b2</link>
      <guid>https://dev.to/lucasreis/executando-jupyter-lab-com-docker-e-docker-compose-35b2</guid>
      <description>&lt;h2&gt;
  
  
  Introdução
&lt;/h2&gt;

&lt;p&gt;Atualmente temos opções online para o Jupyter Notebook/Lab como Google Colab, Kaggle, SageMaker e etc., mas ainda é comum precisarmos executar esta aplicação em nossa máquina local. Em um setup inicial, é necessário preparar todo o ambiente antes de começar a trabalhar e caso utilize um notebook compartilhado, podemos ter problemas de compatibilidade de pacotes ou versões.&lt;/p&gt;

&lt;p&gt;O Docker fornece um ambiente isolado e que pode ser compartilhado por diferentes máquinas sem necessidade de dependências externas, podendo ajudar no setup de ambiente do Jupyter Lab.&lt;/p&gt;

&lt;h2&gt;
  
  
  Preparação
&lt;/h2&gt;

&lt;p&gt;Para seguir os passos apresentados neste artigo, é necessário ter instalado em sua máquina o Docker e Docker Compose, o tutorial de cada um pode ser encontrado em seus respectivos sites.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.docker.com/engine/install/ubuntu/" rel="noopener noreferrer"&gt;https://docs.docker.com/engine/install/ubuntu/&lt;/a&gt;&lt;br&gt;
&lt;a href="https://docs.docker.com/compose/install/" rel="noopener noreferrer"&gt;https://docs.docker.com/compose/install/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Caso esteja utilizando o Windows, é recomendável instalá-los via WSL2. Recomendo seguir os passos informados no repositório abaixo:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/codeedu/wsl2-docker-quickstart" rel="noopener noreferrer"&gt;https://github.com/codeedu/wsl2-docker-quickstart&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Criação da imagem Docker
&lt;/h2&gt;

&lt;p&gt;Após a instalação das ferramentas, o primeiro passo necessário é criar um imagem do Docker para o Jupyter Lab. Neste artigo não será abordado com detalhes a utilização do Docker, mas é recomendado estudá-lo posteriormente.&lt;/p&gt;

&lt;p&gt;É comum termos imagens já prontas, criadas e disponibilizadas por outros desenvolvedores, com o Jupyter não é diferente, o projeto &lt;strong&gt;Docker Stacks&lt;/strong&gt; disponibiliza diferentes imagens com determinado setup inicial.&lt;/p&gt;

&lt;p&gt;Para este artigo será utilizado uma imagem específica para Data Science com Python chamada &lt;code&gt;jupyter/scipy-notebook&lt;/code&gt; que já vem pré-instalado diversos pacotes comuns como numpy, pandas, scikit-learn. Caso você deseja começar do zero a instalação, então é recomendado utilizar a &lt;code&gt;jupyter/minimal-notebook&lt;/code&gt;. Abaixo tem o link com todas as imagens disponíveis:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://jupyter-docker-stacks.readthedocs.io/en/latest/using/selecting.html" rel="noopener noreferrer"&gt;https://jupyter-docker-stacks.readthedocs.io/en/latest/using/selecting.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Com a imagem definida, podemos começar criando nosso Dockerfile informando o seguinte código:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;FROM jupyter/scipy-notebook
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Por enquanto é só isso mesmo, como dito antes esta imagem já possui as bibliotecas tradicionais já instaladas, e assim não é necessário realizar algum comando inicial, caso você queira instalar alguma biblioteca adicional, basta executar o &lt;code&gt;pip&lt;/code&gt; conforme abaixo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;FROM jupyter/scipy-notebook
RUN pip install requests feature_engine
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Executando a imagem com Docker
&lt;/h2&gt;

&lt;p&gt;Após a criação do arquivo, é necessário "buildar" a imagem para o Docker utilizá-la quando for necessário:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker build -t jupyter_lab .
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para a imagem pode ser qualquer nome desejado, como &lt;code&gt;jupyter_lab&lt;/code&gt;, certifique-se de executar o comando no diretório do Dockerfile. Por fim, crie um container com a nova imagem:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker run -p 8888:8888 -v $(pwd):/home/jovyan/work -e JUPYTER_ENABLE_LAB=yes jupyter_lab
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Alguns comentários a respeito deste comando:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;O argumento em &lt;code&gt;-v&lt;/code&gt; informa o volume do container, é importante informá-lo para que os notebooks criados não sejam perdidos caso o container seja removido. Este comando permite o Docker compartilhar o volume com o diretório atual, assim tudo que for criado dentro ou fora do Docker estará disponível em sua máquina.&lt;/li&gt;
&lt;li&gt;Esta variável de ambiente com o valor &lt;code&gt;yes&lt;/code&gt; diz que queremos usar o Jupyter Lab ao invés do Jupyter Notebook.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Após executá-lo você irá observar no seu terminal o Jupyter sendo executado e disponibilizando a url para você acessá-lo. Desta forma atual, o Jupyter já está funcionando normalmente, mas optei por trazer um conteúdo adicional caso tenha interesse.&lt;/p&gt;

&lt;h2&gt;
  
  
  Executando a imagem com Docker Compose
&lt;/h2&gt;

&lt;p&gt;Basicamente o Docker Compose é uma ferramenta para definir e executar múltiplos containers. Para este artigo, sua utilidade mais importante é que possível definir no próprio código o volume, porta, variáveis de ambiente do seu container, ao invés de passar por linha de código conforme mostrado anteriormente.&lt;/p&gt;

&lt;p&gt;Crie um arquivo &lt;code&gt;docker-compose.yml&lt;/code&gt; no diretório atual e insira os seguintes comandos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;version: &lt;span class="s2"&gt;"3"&lt;/span&gt;

services: 
  jupyter_lab:
    container_name: jupyter_lab
    build: &lt;span class="nb"&gt;.&lt;/span&gt;
    ports: 
      - &lt;span class="s2"&gt;"8888:8888"&lt;/span&gt;
    environment: 
      - &lt;span class="nv"&gt;JUPYTER_ENABLE_LAB&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;yes
    &lt;/span&gt;volumes: 
      - .:/home/jovyan/work
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Basicamente pegamos o comando passado por linha de comando para o Docker e trouxemos para um arquivo &lt;code&gt;.yml&lt;/code&gt;. Assim, facilitando a fácil reusabilidade do container. Agora só é necessário executar os comandos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker-compose build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker-compose up
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Este primeiro comando de &lt;code&gt;build&lt;/code&gt; só é necessário na primeira vez que você executar, após isto basta informar o &lt;code&gt;up&lt;/code&gt; ou o &lt;code&gt;down&lt;/code&gt; para parar o container. Com o Docker Compose fica mais produtivo executar seu Jupyter Lab mais rapidamente.&lt;/p&gt;

&lt;p&gt;Apenas algumas considerações finais:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Para executar o comando &lt;code&gt;docker-compose&lt;/code&gt; você precisa estar no diretório onde se encontra o arquivo.&lt;/li&gt;
&lt;li&gt;Neste artigo utilizamos como o volume o diretório atual, caso você precise acessar um notebook em outra pasta, o Jupyter não irá encontrá-lo. Para isso seria interessante informar um caminho que agregue todos os seus notebooks no volume.&lt;/li&gt;
&lt;li&gt;Por curiosidade: &lt;code&gt;jovyan&lt;/code&gt; é o nome de usuário padrão, usado para descrever os membros da &lt;a href="https://jupyter.readthedocs.io/en/latest/community/content-community.html#what-is-a-jovyan" rel="noopener noreferrer"&gt;comunidade&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Palavras Finais
&lt;/h2&gt;

&lt;p&gt;Muito obrigado pela sua atenção! Este foi meu primeiro artigo então com certeza tem muita coisa para melhorar, então se possível pode deixar seu feedback ou alguma dúvida :).&lt;br&gt;
Repositório deste artigo:&lt;br&gt;
&lt;a href="https://github.com/llucasreis/docker_jupyterlab" rel="noopener noreferrer"&gt;https://github.com/llucasreis/docker_jupyterlab&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
