なぜDocker を使うのか
結論から言うと、PCが汚れるのを防ぐため。HOSTコンピューター(自分が普段使うコンピュータ)に様々なパッケージを入れると、手間がかかるし、アンインストールしてもキャッシュが残ったりして、ストレージが少なくなってしまう。Dockerのコンテナを使い仮想環境を構築して、その中に様々なパッケージをインストールすることで、HOSTコンピュータに負荷をかけることなく、データ解析、分析が可能になる。さらに、インストールしたパッケージ同士がエラーを起こした際に、対応しやすいという利点もある。それに加えて、Dockerfileを共有することで、同じ環境が他の人でもコマンド一つで構築できてしまうという利点もある。
Dockerfile を作成する
Dockerfileを作成する方法はいくらでもあるが、個人的には、https://code.visualstudio.com/
を使うことをお勧めする
# ubuntuをベースに docker image を作成する
FROM ubuntu:latest
# メンテナンスなどによく使われるコマンドをインストールする(-yはパッケージをインストールする際に必要なおまじない)
RUN apt-get update && apt-get install -y wget vim sudo
# WORKDIR でインストールする場所を決める
WORKDIR <Anacondaをインストールする場所、推奨は「/opt」>
RUN wget https://repo.continuum.io/archive/Anaconda3-2020.11-Linux-x86_64.sh <- インストールしたいAnacondaのバージョン
Anacondaのバージョンなどについては、
https://repo.anaconda.com/archive/
を参照するといい。ubuntuに対応しているのは、「Anaconda3-2019.10-Linux-x86_64.sh」のように、「Linux-x86」が入っているもの
# anacondaインストーラーを起動し、anaconda3をインストールする
# -b : バッチファイル的に動かすときに使用する(必須)
# -p path :anacodna3をどこに置くかを指定する(デフォルトでは、root/anacodna3となる。メンテがめんどいので、optの下においた)
RUN sh Anaconda3-2020.11-Linux-x86_64.sh -p /opt/anaconda3 -b
# ENVで環境変数を設定する。以下は"python"のためのパス
ENV PATH /opt/anaconda3/bin:$PATH
# "jypyter", "lab" :jupyterlabをデフォルトで起動させるコマンド。
# "--ip=0.0.0.0" :ローカルでjupyterlabを使うときに必要なコマンド
# "--LabApp.token=''" :本来ならjupyterlabを起動させた際にパスワードを入れる必要があるがこう書くことでそれを防ぐ
CMD ["jupyter", "lab", "--ip=0.0.0.0", "--allow-root", "--LabApp.token=''"]
Dockerfileを用いて、"docker image"を作成する
username@MacBook-Pro ~ % cd <Dockerfileを保存した場所>
# Dockerfileがあるかどうかを確認する
username@MacBook-Pro docker_file % ls
>>> Dockerfile
# "docker build"を使って構築する(" . " はカレントディレクトリを指すので忘れずに)
username@MacBook-Pro docker_file % docker build --platform linux/amd64 .
上記と同じコマンドを入力すれば、docker imageを作成できる。
【重要】M1Macを使用している方は、必ず「--platform linux/amd64」を付けて入力する
付けないとエラーになる
ターミナルでDockerfileを起動させる
# "docker iamges" を使い、起動したい "docker image" があるかどうかを確認する
username@MacBook-Pro ~ % docker iamges
>>>
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> dge767nb2v62h 2 days ago 3.66GB
# "docker run" を使い "docker image" を起動させる
# "-p 8888:8888" はポートを設定するためのオプションなので必須。もし以前に8888を使用したことがあるのであれば、任意のもの(-p 1234:8888)を設定する。
username@MacBook-Pro ~ % docker run -p 8888:8888 dge767nb2v62h
起動させると勝手にJupyterLabが起動するので、Googleで「localhost:8888」と検索するとJupyterlabに入ることができる。入れることを確認できたら、完了。
さらにライブラリを追加したいとき
先ほど作成したDockerfileに以下のコマンドと追加したいライブラリを入力すればいい。追記する場所は、CMDの上あたりでいい。
RUN pip install --upgrade pip
RUN pip install <ライブラリの名前>
【補足】AWSでdockerを使用する
ここのセクションではAWSにdockerをインストールして、自分のPCにマウントさせることで、自分のPCのメモリなどを使わずデータ分析を行う方法を紹介する。あらかじめAWSアカウント作成後、AWSインスタンスを作成しておくこと! 詳しくは、こちら( https://aws.amazon.com/jp/register-flow/)