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追記)
#basesizememo1ubuntu340MBpython3,pip,wheel,jupyter,matplotlib,numpy,chainer=以前絶望したとき2alpine4MBなにもないとき3alpine56MBpython,pip4alpine112MBpython,pip,numpy,chainer5alpine119MBpython,pip,numpy,chainer,PIL=NDLのtrainがうごく6alpine308MBpython,pip,jupyter
用途に合わせて素のalpineから育てると安心
はじめに表3のイメージを作る
- docker build -f ./Dockerfile -t alpine-python .
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 .
FROM alpine-python
RUN apk --no-cache add \
py3-numpy \
&& pip3 install chainer
ENTRYPOINT [ "python3" ]
表5は表4から育てる
- docker build -f ./Dockerfile -t alpine-ndl .
FROM alpine-chainer
RUN apk update \
&& apk --no-cache add \
py3-pillow
ENTRYPOINT [ "python3" ]
表6は表3から育てる
- docker build -f ./Dockerfile -t alpine-chainer .
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向け
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を作る
# 実行フォルダを/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!!!
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の使い方
: ポート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に追記したいはず
docker run --rm -it --entrypoint="sh" alpine-python
以上