JupyterLabをDockerコンテナで立ち上げる(#データ解析用)
データ分析用のみならず、データ取得のスクレイピングコードの作成と実行まで、JupyterLab内で完結できるように作成している。「Python」、「Base R」、「Julia」と基本的なデータ分析用のプログラミング言語にも対応している。ただし、これらのコードをそのまま立ち上げるとコンテナイメージが約22GBとサイズが大きいため、全体の立ち上げに1時間30分程度かかる。そのため、適時修正してから実行すること。これらのファイルを作成し、同じディレクトリ内に置いてから立ち上げること。
※コードの保守性を高めるために、各プログラミング言語に対応するライブラリの管理を分割し、別途ファイルを作成してから Dockerfile に読み込ませている。
docker-compose.yml
services:
datasciense:
container_name: mylab
build:
context: .
dockerfile: Dockerfile
ports:
- "8888:8888"
volumes:
- ./Mount_Directory:/Mount_Directory # 任意のディレクトリを作成する
environment:
- LANG=ja_JP.UTF-8
- TZ=Asia/Tokyo
command: jupyter lab --ip=0.0.0.0 --allow-root --NotebookApp.token=''
Dockerfile
## ☆"Anaconda"を使用しない"DS"環境構築☆
FROM ubuntu:22.04
## ロケールとタイムゾーンの環境変数を設定
ENV LANG ja_JP.UTF-8
ENV TZ=Asia/Tokyo
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
## 必要なパッケージ(apt-get) ##
RUN apt-get update && apt-get install -yq --no-install-recommends \
# 共通部分
python3-pip \
python3-dev \
sudo \
vim \
curl \
wget \
unzip \
tzdata \
git \
# JupyterNotebook:「Save and Export Notebook AS」機能を実装する※日本語の文字化け対策
pandoc \
texlive-xetex \
texlive-fonts-recommended \
texlive-plain-generic \
texlive-lang-japanese \
texlive-lang-chinese \
# R
r-base \
r-base-dev \
libcurl4-openssl-dev \
# OpenCV
libsm6 \
libxext6 \
libxrender-dev \
libglib2.0-0 \
libgl1 \
# C/C++コンパイラ(Pystan)
build-essential \
gcc \
g++ \
# "Chrome Driver"
gnupg \
jq \
# 画像*動画編集
imagemagick \
ffmpeg \
poppler-utils \
locales && \
locale-gen ja_JP.UTF-8 && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
## 必要なパッケージ(pip)
COPY requirements.txt .
RUN pip install --upgrade pip && \
pip install --break-system-packages -r requirements.txt
## スクレイピング 環境構築
# (01) Google Chrome # google-chrome-stable --version {Google Chrome 132.0.6834.159 #2025-01-31}
RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add && \
echo 'deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main' | tee /etc/apt/sources.list.d/google-chrome.list && \
apt-get update && \
apt-get install -y google-chrome-stable
# (02) ChromeDriver # chromedriver --version {https://googlechromelabs.github.io/chrome-for-testing/#stable}
RUN mkdir -p /opt/chrome && \
CHROME_VERSION=$(google-chrome-stable --version | awk '{print $3}' | awk -F'.' '{print $1"."$2"."$3}')".0" && \
DRIVER_VERSION=$(curl -s "https://googlechromelabs.github.io/chrome-for-testing/known-good-versions-with-downloads.json" | \
jq -r --arg CHROME_VERSION "$CHROME_VERSION" '.versions[] | select(.version==$CHROME_VERSION) | .downloads.chromedriver[] | select(.platform=="linux64") | .url') && \
wget -q -O /opt/chrome/chromedriver-linux64.zip "$DRIVER_VERSION" && \
unzip /opt/chrome/chromedriver-linux64.zip -d /opt/chrome && \
rm /opt/chrome/chromedriver-linux64.zip && \
mv /opt/chrome/chromedriver-linux64/chromedriver /opt/chrome/chromedriver
# ChromeDriver をパスに追加
ENV PATH="/opt/chrome:$PATH"
## 環境構築(R)
COPY install-r-packages.R /usr/local/bin/install-r-packages.R
RUN Rscript /usr/local/bin/install-r-packages.R
## 環境構築(Julia)
RUN wget https://julialang-s3.julialang.org/bin/linux/x64/1.7/julia-1.7.1-linux-x86_64.tar.gz \
&& tar -zxvf julia-1.7.1-linux-x86_64.tar.gz \
&& rm julia-1.7.1-linux-x86_64.tar.gz \
&& mv julia-1.7.1 julia
ENV PATH=/julia/bin:$PATH
COPY install-julia-packages.jl /usr/local/bin/install-julia-packages.jl
RUN julia /usr/local/bin/install-julia-packages.jl
## 作業ディレクトリの作成 # WORKDIR はディレクトリが存在しなくても自動で作成される
WORKDIR /Mount_Directory
## Jupyter NotebookのPDF出力を日本語に対応する|https://zenn.dev/compass/articles/0c1574d9cd155e
RUN sed -i 's/\\documentclass\[11pt\]{article}/\\documentclass\[xelatex,ja=standard\]{bxjsarticle}/' \
/usr/local/share/jupyter/nbconvert/templates/latex/index.tex.j2
## JupyterLab の起動
CMD ["jupyter", "lab", "--ip=0.0.0.0", "--allow-root", "--LabApp.token=''"]
requirements.txt
#=======================
# 2025-02-05:作成日
#=======================
# 共通 (JupyterLab)
jupyterlab==4.2.5
jupyterlab-language-pack-ja-JP
# ==============================================================
# JupyterNotebook:「Save and Export Notebook AS」機能を実装する
# ==============================================================
nbconvert==7.16.4
mistune==3.0.2 # HTML
ipywidgets==8.1.5
anywidget==0.9.13
# =============== #
# データサイエンス
# =============== #
numpy==2.1.1
pandas==2.2.2
matplotlib==3.9.2
japanize-matplotlib==1.1.3
seaborn==0.13.2
plotly==6.0.0
plotly-geo==1.0.0
scipy==1.14.1
scikit-learn==1.5.1
scikit-image==0.24.0
pystan==3.7.0
# Pytorch (https://pytorch.org/get-started/locally/)
torch==2.4.1
torchvision==0.19.1
torchaudio==2.4.1
# =========================== #
# スクレイピング & 地理空間情報
# =========================== #
psycopg2==2.9.10
pymongo==4.11
Pillow==10.4.0
beautifulsoup4==4.12.3
requests==2.32.3
Scrapy==2.11.2
scrapy-splash==0.9.0
geopandas==1.0.1
geopy==2.4.1
folium==0.17.0
# ========== #
# 事務作業用
# ========== #
openpyxl==3.1.5
PyPDF2==2.0.0
pyautogui==0.9.54
moviepy==1.0.3
pandocfilters==1.5.1
install-r-packages.R
install.packages('IRkernel')
IRkernel::installspec()
install.packages('tidyverse')
install.packages('caret')
install.packages('lme4')
install.packages('survival')
install.packages('rstan')
install.packages('imager')
install.packages('moments')
install.packages('forecast')
install.packages('lubridate')
install.packages('ggrepel')
install.packages('RColorBrewer')
install.packages('ggthemes')
install.packages('gridExtra')
install.packages('maps')
install.packages('shiny')
install.packages('flexdashboard')
install-julia-packages.jl
using Pkg
Pkg.add(["IJulia",
"CSV", "StatsModels", "Optim", "StatsPlots", "ScikitLearn", "DataFramesMeta",
"JSON", "Plots", "PyPlot", "XLSX", "SpecialFunctions", "DataFrames", "GLM",
"ProgressBars", "PDMats", "LinearAlgebra", "Distributions", "UnicodePlots", "PackageCompiler"])
これらのコードを分割して、別途記事でメモする(例:スクレイピング用コード)
コメント(一覧)