condaとpipは混ぜないはなし
- Docker for WindowsでGUI
- condaとpipは混在させてはいけない
- なるべくピュアでシンプルな環境にしたい
- Docker for WindowsでJupyter
- Python公式のイメージが700MBでだるい
- Jupyter公式のイメージが700MBでだるい
- Ubuntu公式(80MB)からスタートしたら340MBくらいになった
もっとdockerイメージ軽くしたい
- baseをalpineにしたら軽くなった~~、Jupyterとか入れてないけど、いっそ必要と感じなくなった~~
- 【悲報】やっぱりJupyter入りも作ってみたらubuntuと容量が変わんない(2018/6/15追記)
# | base | size | memo |
---|---|---|---|
1 | ubuntu | 340MB | python3,pip,wheel,jupyter,matplotlib,numpy,chainer=以前絶望したとき |
2 | alpine | 4MB | なにもないとき |
3 | alpine | 56MB | python,pip |
4 | alpine | 112MB | python,pip,numpy,chainer |
5 | alpine | 119MB | python,pip,numpy,chainer,PIL=NDLのtrainがうごく |
6 | alpine | 308MB | python,pip,jupyter |
用途に合わせて素のalpineから育てると安心
はじめに表3のイメージを作る
docker build -f ./Dockerfile -t alpine-python .
Dockerfile
FROM alpine
RUN apk --no-cache add \
python3 \
py3-pip \
&& pip3 install --upgrade pip
ENTRYPOINT [ "python3" ]
表4は表3から育てる
docker build -f ./Dockerfile -t alpine-chainer .
Dockerfile
FROM alpine-python
RUN apk --no-cache add \
py3-numpy \
&& pip3 install chainer
ENTRYPOINT [ "python3" ]
表5は表4から育てる
docker build -f ./Dockerfile -t alpine-ndl .
Dockerfile
FROM alpine-chainer
RUN apk update \
&& apk --no-cache add \
py3-pillow
ENTRYPOINT [ "python3" ]
表6は表3から育てる
docker build -f ./Dockerfile -t alpine-chainer .
Dockerfile
FROM alpine-python
RUN apk --no-cache add \
build-base \
python3-dev \
&& pip3 install jupyter
EXPOSE 8888
ENTRYPOINT [ "jupyter" ]
CMD [ "notebook", "--ip=*", "--no-browser", "--allow-root" ]
改善
- pipてインストール後にキャッシュ消せますかね?
- キャッシュを無視してインストールするのでは無くdockerイメージを小さくする目的です
- 多分まだ良いけど、10や20も段階重ねて育てるより一遍にビルドしたほうが軽いイメージになると思う
- タイミングは使いまわす基点が定まってきたり、誰かに公開するとき?
- 例:最後のndl向け
Dockerfile
FROM alpine
RUN apk update \
&& apk --no-cache add \
python3 \
py3-pip \
py3-numpy \
py3-pillow \
&& pip3 install --upgrade pip \
&& pip3 install chainer
ENTRYPOINT [ "python3" ]
育てたpythonをホストマシンから使う
pythonの例
- 実行準備:パスを通したところにpython.batを作る
python.bat
# 実行フォルダを/mnt/hostにマウント
# usage: python /mnt/host/[スクリプトファイルパス]
docker run --rm -it -v %CD%:/mnt/host alpine-python %*
実行イメージ
C:\Users\kfjt\test>dir /b
hoge.py
C:\Users\kfjt\test>python /mnt/host/hoge.py
hoge!!!
引数渡さないとpythonコンソールに入ります
C:\Users\kfjt\test>python
Python 3.6.3 (default, Nov 21 2017, 14:55:19)
[GCC 6.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 1 + 1
2
>>> exit()
chainerの例
- 割愛
- 同様です、chainer.batを作っとくと幸せになります
Jupyterの使い方
jupyter.bat
: ポート8888開放
docker run --rm -v %CD%:/mnt/host -p 8888:8888 -d --name ajupyter alpine-jupyter
: 起動待ち
2>&1 1>nul timeout 1
: トークン確認
docker exec ajupyter jupyter notebook list
実行イメージ
C:\Users\kfjt\test>jupyter
924a2c4a9de02ca9d47b3eec7e706e55ed532fc6a69e93811561b7b959411795
Currently running servers:
http://localhost:8888/?token=db4e8c277d9d2dced545db0d708d0353229a92296f8c7bf2 :: /
- ブラウザで
http://localhost:8888/?token=db4e8c277d9d2dced545db0d708d0353229a92296f8c7bf2
を開いてください
Dockerfileを育てるとき
-
apk
やpip
を試してDockerfileに追記したいはず
endpointオプションを付ければよい
docker run --rm -it --entrypoint="sh" alpine-python
以上