pythonの環境を構築するために今まではdockerではなくanacondaのconda create
コマンドを利用していた。
今までconda createで特に不自由してなかったが…
周りにconda create
使っている人が少なかった。うちのラボだけなのか?と思ってしまった。
最近dockerが流行っているということで習得しようと考えた。
腑に落ちなかった点
conda createで十分じゃね?という感があった。
最近railsもやっているので言語依存ではない仮想環境について知りたかったので勉強することにした。
勘違いしていた点
そもそもの使い方
Docker導入のための、コンテナの利点を解説した説得資料、がめちゃめちゃわかりやすい。
condaしか使って来なかったのでそもそも環境自体をupdateして(別のimageとして)保存していくというフローの想像がつかなかった。
バージョンの異なるimageを用意して置くことでロールバックなどが容易にできるわけですね。
Dockerfile -(build)-> image -(run)-> container -(commit)-> image_2 -(run)-> container_2 ->...
imageに落とし込んだ段階でpushすれば共有が可能です。
imageにcommitするのは環境だけではないということ
conda思想に侵されていたので、環境設定のみを記述するものだと勘違いしていた。
imageにcommitするのは環境だけではなくcontainer内のコードも含まれる。
よって、コードを書き換えつつ環境も書き換えつつ丸ごと保存できる。
Dockerfileで共有する必要はないということ
完璧なDockerfileを用意して共有するのが普通なのかと思っていた。
今までここに記述したものがうまく動かず挫折していた。
先述の通り、docker imageをcommitして管理し、それをdockerhub上で管理すれば良い。サイズが大きくて重いんですけどね。
Dockerfileはベースとなる設定を書いておけば入れ忘れなどがなくなって便利なのは違いないです。
Dockerfileの解釈
FROM python:3
RUN pip install pandas
今までFROMにはcentosやubuntuしか入れられないと思っていたが、ここは公式イメージを記入する部分であって、この例で言えばpython3の動くLinux環境(デフォでpipが使える)をベースにしているという意味だったのですね。自分がこれをもとにbuildした時はapt-getが使えてyumは使えませんでした。
$ cat /proc/version
Linux version 4.9.87-linuxkit-aufs (root@95fa5ec30613) (gcc version 6.4.0 (Alpine 6.4.0) ) #1 SMP Wed Mar 14 15:12:16 UTC 2018
個人的tips
attachとexecの違い
こちらの説明がとてもわかりやすいです。
あとがき
dockerはコードも内部的に管理できるのでconda createよりも安全ですね。
ラボの先人たちの研究を引き継ぎたい後輩が現れた時に動く環境があることが非常に大事ですし、研究自体がラボのリソースなので残すメリットは非常に大きいです。早く導入しないとなぁ。