Docker ComposeでAnacondaの環境を構築する方法をまとめました。
目次
- docker-compose.ymlを作成する
- Dockerfileを作成する
- イメージをビルドする
- コンテナを起動する
- コンテナの起動状態を確認する
- ブラウザでJupyter Notebookにアクセスする
- インストール済みのパッケージを確認する
- Jupyter Notebookの動作確認をする
- コンテナを破棄する
- イメージを破棄する
docker-compose.ymlを作成する
docker-compose.yml
にコンテナ起動時の情報を指定します。
version: "3"
services:
jupyter:
build:
context: .
dockerfile: Dockerfile
working_dir: /notebooks
volumes:
- $PWD:/notebooks
ports:
- 8888:8888
command: jupyter notebook --ip 0.0.0.0 --port=8888 --allow-root --no-browser --NotebookApp.token=''
Dockerfileを作成する
Dockerfile
にイメージ作成時の情報を指定します。
RUN
で指定している conda install
コマンドでインストールするパッケージと、-c
オプションでそのパッケージのインストール元のリポジトリを指定します。
FROM continuumio/anaconda3
RUN conda install -y -n base ipykernel --update-deps --force-reinstall &&\
conda install -y -c conda-forge matplotlib tensorflow &&\
conda install -y -c anaconda jupyter pandas scikit-learn seaborn
イメージをビルドする
docker compose build
コマンドでイメージをビルドします。
--no-cache
オプションを指定すると、キャッシュの利用を無効にすることができ、イメージの更新が反映されないなどの不具合を回避することができます。
% docker compose build --no-cache
[+] Building 9871.0s (6/6) FINISHED
=> [jupyter internal] load build definition from Dockerfile 1.5s
=> => transferring dockerfile: 415B 0.8s
=> [jupyter internal] load .dockerignore 1.1s
=> => transferring context: 2B 0.7s
=> [jupyter internal] load metadata for docker.io/continuumio/anaconda3:latest 0.0s
=> CACHED [jupyter 1/2] FROM docker.io/continuumio/anaconda3 0.0s
=> [jupyter 2/2] RUN conda install -y -n base ipykernel --update-deps --force-reinstall && conda install -y -c conda-forg 9667.1s
=> [jupyter] exporting to image 201.8s
=> => exporting layers 201.7s
=> => writing image sha256:78180cb1180860985d25aba78e3b8840b9aa18b666148b7b4412c0a86e70012c 0.0s
=> => naming to docker.io/library/anaconda-jupyter 0.1s
コンテナを起動する
docker compose up
コマンドでコンテナを起動します。
-d
オプションを付けると、コンテナをバックグラウンドで実行することができます。
% docker compose up -d
[+] Building 0.0s (0/0)
[+] Running 1/1
✔ Container anaconda-jupyter-1 Started 0.5s
コンテナの起動状態を確認する
docker compose ps
コマンドでdocker-compose.yml
に関連する起動状態のコンテナを確認します。
% docker compose ps
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
anaconda-jupyter-1 anaconda-jupyter "jupyter notebook --…" jupyter 4 minutes ago Up 7 seconds 0.0.0.0:8888->8888/tcp
ブラウザでJupyter Notebookにアクセスする
ブラウザでhttp://localhost:8888/
にアクセスし、Jupyter Notebookが正常に起動しているか確認します。
インストール済みのパッケージを確認する
docker compose exec
コマンドでコンテナ内に入り、conda list
コマンドでインストール済みのパッケージを確認します。
下記にDockerfile
で指定したパッケージを抜粋したものを掲載します。
# コンテナ内に入る
% docker compose exec jupyter /bin/bash
# インストール済みのパッケージを確認
(base) root@48a8b818830a:/notebooks# conda list
# packages in environment at /opt/conda:
#
# Name Version Build Channel
jupyter 1.0.0 py310h06a4308_8 anaconda
jupyter_client 8.1.0 py310h06a4308_0
jupyter_console 6.4.4 py310h06a4308_0 anaconda
jupyter_core 5.3.0 py310h06a4308_0
jupyter_server 1.23.4 py310h06a4308_0 anaconda
jupyterlab 3.5.3 py310h06a4308_0 anaconda
jupyterlab_pygments 0.1.2 py_0 anaconda
jupyterlab_server 2.16.5 py310h06a4308_0 anaconda
jupyterlab_widgets 1.0.0 pyhd3eb1b0_1 anaconda
keras 2.12.0 pyhd8ed1ab_0 conda-forge
matplotlib 3.7.1 py310hff52083_0 conda-forge
matplotlib-base 3.7.1 py310h1128e8f_1
matplotlib-inline 0.1.6 py310h06a4308_0
numpy 1.22.3 py310h4ef5377_2 conda-forge
pandas 1.5.2 py310h1128e8f_0 anaconda
python 3.10.11 h7a1cb2a_2
python-dateutil 2.8.2 pyhd3eb1b0_0
python-fastjsonschema 2.16.2 py310h06a4308_0
python-flatbuffers 23.5.26 pyhd8ed1ab_0 conda-forge
python-libarchive-c 2.9 pyhd3eb1b0_1
python_abi 3.10 2_cp310 conda-forge
scikit-learn 1.2.0 py310h6a678d5_1 anaconda
scipy 1.8.1 py310h7612f91_0 conda-forge
seaborn 0.12.2 py310h06a4308_0 anaconda
tensorboard 2.12.1 py310h06a4308_0
tensorboard-data-server 0.7.0 py310h52d8a92_0
tensorboard-plugin-wit 1.8.1 pyhd8ed1ab_0 conda-forge
tensorflow 2.12.0 mkl_py310hc7ea715_0
tensorflow-base 2.12.0 mkl_py310he5f8e37_0
tensorflow-estimator 2.12.0 py310h06a4308_0
Jupyter Notebookの動作確認をする
Jupyter Notebook上でインストール済みのパッケージのバージョンを確認して、動作確認をします。
import matplotlib.pyplot as plt
import tensorflow as tf
import numpy as np
import pandas as pd
import platform
import seaborn as sb
import sklearn
!jupyter-notebook --version
!python -V
print(platform.platform())
print(tf.__version__)
print(np.__version__)
print(pd.__version__)
print(sb.__version__)
print(sklearn.__version__)
6.5.2
Python 3.10.11
Linux-5.15.49-linuxkit-pr-x86_64-with-glibc2.31
2.12.0
1.22.3
1.5.2
0.12.2
1.2.0
コンテナを破棄する
コンテナが不要になった場合は、docker compose down
コマンドでコンテナを破棄します。
コンテナを破棄した後にdocker compose ps -a
コマンドでdocker-compose.yml
に関連するすべてのコンテナの一覧を表示し、コンテナが正常に破棄されたか確認します。
# コンテナを破棄
% docker compose down
[+] Running 2/2
✔ Container anaconda-jupyter-1 Removed 0.2s
✔ Network anaconda_default Removed 0.2s
# コンテナの破棄を確認
% docker compose ps -a
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
イメージを破棄する
イメージが不要になった場合は、docker rmi
コマンドでイメージを破棄します。
docker images
コマンドで破棄するイメージのイメージIDを確認し、そのイメージIDをdocker rmi
コマンドに指定してイメージを破棄します。
イメージを破棄したら再度docker images
コマンドを実行し、イメージが正常に破棄されたか確認します。
# 破棄するイメージのイメージIDを確認
% docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
continuumio/anaconda3 latest c8f78af31723 3 weeks ago 4.3GB
# イメージを破棄
% docker rmi c8f78af31723
Untagged: continuumio/anaconda3:latest
Untagged: continuumio/anaconda3@sha256:6697f6ab7d940e557562c2d7c120bf8ef23f9392a0a3145dc5bc74d2ffe18519
Deleted: sha256:c8f78af317230f4e72d7e9544b573372f7310b0269480589a689cc6f9e4e944b
# イメージの破棄を確認
% docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
参考
- 【Docker】Anacondaで開発環境を構築する
- Dockerfileとdocker-compseを使ってanaconda3環境構築
- 【Anacondaの使い方】よく使うcondaコマンド一覧
- Conda コマンド: Python環境構築ガイド
- condaとpipとTensorFlow【Python】
- Jupyter :: Anaconda.org
- Scikit Learn :: Anaconda.org
- Tensorflow :: Anaconda.org
- Pandas :: Anaconda.org
- Matplotlib :: Anaconda.org
- Seaborn :: Anaconda.org
- Dockerイメージとコンテナの削除方法
- conda install -c の意味について
- conda-forgeとは?主な使い方や活用のポイントをご紹介
- Pythonのパッケージ(ライブラリ)のバージョンを確認
- DockerのTTYって何?
- Jupyter Notebookの起動と停止 | Python入門
- 【Jupyter Notebook】ブラウザを開かずにノートブックサーバを起動する方法 – あずみ.net
- Python実行環境のバージョン確認方法あれこれ
- 【Docker Compose】buildの際にキャッシュを利用しないようにする | Points & Lines
人気記事
まだデータがありません。
ニューラルネットワークのフォワードプロパゲーションを実装してみた|ITエンジニアとして経験・学習したこと
"[…] なお、フォワードプロパゲーションについては、以下のサイトを参照のこと。 https://hossuii.com/?p=1803 […] "