LoginSignup
3
2

More than 1 year has passed since last update.

【環境構築】dockerでjupyterlabの環境を構築する

Last updated at Posted at 2022-05-28

背景

  • 機械学習をローカル環境のjupyterlabでしていると、ライブラリの依存関係がバグって昔作ったプログラムが動かなくなることがあった。
  • dockerで環境を明示的にして、作ったプログラムが動かなくなる事態を避けたい。
  • なんなら、githubとかにコード上げるときもdockerfileとセットで上げておいて「環境が違うから動かんやんけ。」って思われないリポジトリにしたい。

使用したファイルのgithub

目標

  • dockerで使用するライブラリも明示的に指定したjupyterlab環境を構築する。

前提

  • dockerを多少は使ったことがある。

環境

  • macOS 11.4 (20F71)
  • arm64(M1)

ファイル構成

.
├─ Dockerfile         #どんな「docker images」を作るのか記載された設計図みたいなファイル
├─ docker-compose.yml #「docker container」の起動コマンドをまとめたファイル
├─ requirements.txt   #最初から入れておきたいライブラリを記載しておくファイル
└─ workdir            #「jupyterlab」を立ち上げるカレントディレクトリにするフォルダ(名前はなんでも良い)
   └ 作業で使用するファイルとか

ファイルの中身

Dockerfile
FROM python:3.9@sha256:f3ea0f7b3662c33b650f763a365b2c3e3c7695ab1658fd0987150708b1f5f0e6

COPY requirements.txt .

RUN pip3 install --upgrade pip && \
    pip3 install -r requirements.txt && \
    pip install jupyterlab

WORKDIR /workdir
docker-compose.yml
version: '3'

services:
  jupyterlab:
    restart: always
    build:
      context: .
      dockerfile: Dockerfile
    container_name: jupyterlab
    working_dir: '/workdir'
    tty: true
    volumes:
      - ./workdir:/workdir
    ports:
      - "8080:8080"
    command: jupyter-lab --ip 0.0.0.0 --port=8080 --allow-root --no-browser --NotebookApp.token=''
requirements.txt
#今回はサンプルとしてnumpyとpandasだけにしている
#使いたいライブラリがあればここに記載しておこう
numpy
pandas

起動方法

  • dockerが起動している状態であれば、ファイルがあるカレントで下記コマンドを実行するだけ。
$docker-compose up --build
  • うまくいけば、jupyterlabが自動起動するので、http://127.0.0.1:8080/labにアクセスする。
  • これで、「requirements.txt」に明示的に指定したライブラリが入ったjupyter lab環境で作業ができる。

補足

  • 投稿者はdockerとか詳しくないので、間違ったことを書いてるかもしれないので悪しからず。

参考資料

  • 阿佐 志保,プログラマのためのDocker教科書 第2版 インフラの基礎知識&コードによる環境構築の自動化,翔泳社,2018.

個人ブログ

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2