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

以上

广告
将在 10 秒后关闭
bannerAds