LoginSignup
10
10

More than 5 years have passed since last update.

Python環境つくるならDocker for Windows(ただしCPUのみ)

Last updated at Posted at 2018-06-14

condaとpipは混ぜないはなし

もっと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を育てるとき

  • apkpipを試してDockerfileに追記したいはず
endpointオプションを付ければよい
docker run --rm -it --entrypoint="sh" alpine-python

以上

10
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
10