DockerでPythonの環境構築を行う
仕事でDockerを使う機会があったのですが、あまり馴染みがなかったので使い方を調べることにしました。 試しにPython3.xの環境構築を行ってみます。
Dockerのインストール
WindowsならDocker for Windows、MacならDocker for Macとわかりやすいですね。
ただし、Windows 10 Homeの場合だとDocker for Windows(Hyper-V)が利用できないため、
代わりにDocker Toolboxというものをインストールする必要があります。
今回はMacで行いますが、Windowsでも同様に動かせると思います。
Docker自体はすでにインストール済みだったためアップデートをして完了しましたが、
新規インストールの場合でも基本的にはインストーラに従えばOKだと思います。
Docker for Mac(Windows)はこちらからインストーラをダウンロードできます。
https://www.docker.com/products/docker-desktop
Windows 10 Homeな方はこちらから
https://github.com/docker/toolbox/release
DockerでのPython環境構築
まずはDockerを起動します。
するとこんなアイコンが出てきて、もそもそと動きます。
これが止まるとDockerの起動完了です。
Windowsであれば画面右下あたりに同じアイコンがいるはずです。
ターミナルを起動し、以下のコマンドを実行してこんな結果になればOKです。
$>docker version Client: Docker Engine - Community Version: 18.09.2 API version: 1.39 Go version: go1.10.8 Git commit: 6247962 Built: Sun Feb 10 04:12:39 2019 OS/Arch: darwin/amd64 Experimental: false Server: Docker Engine - Community Engine: Version: 18.09.2 API version: 1.39 (minimum version 1.12) Go version: go1.10.6 Git commit: 6247962 Built: Sun Feb 10 04:13:06 2019 OS/Arch: linux/amd64 Experimental: true
次にDockerのイメージを取得します。
docker search でdocker hubで共有されている作成済みイメージを検索できるようです。
検索に引っかかればそのイメージを使うことができます。
$>docker search python3 NAME DESCRIPTION STARS OFFICIAL AUTOMATED sellpy/python3-jupyter-sklearn python3-jupyter-sklearn 4 [OK] openwhisk/python3action Apache OpenWhisk runtime for Python 3 Actions 4 kuralabs/python3-dev Python 3 ready container to build Python pro… 3 [OK] clutteredcode/python3-alpine-pandas Python3 with pandas based on alpine 2 [OK] sellpy/python3-jupyter-sklearn-java python3-jupyter-sklearn-java 2 [OK] codenvy/python34 Dockerfile:https://github.com/codenvy/docker… 1 sellpy/python3-gphoto2 Python3, Gphoto2 1 [OK] tedder42/python3-scipy-cron . 1 [OK] brumbrum/python3 Immagine contenente python3 1 [OK] ... 以下略 ...
いっぱいあんなおい・・・どれ選べばいいんだよ・・・
ということでUbuntuのイメージを取得してPython3をインストールすることにしました。
LTS版であるUbuntu 18.04をインストールします。
$>docker pull ubuntu:18.04 18.04: Pulling from library/ubuntu 5b7339215d1d: Pull complete 14ca88e9f672: Pull complete a31c3b1caad4: Pull complete b054a26005b7: Pull complete Digest: sha256:9b1702dcfe32c873a770a32cfd306dd7fc1c4fd134adfb783db68defc8894b3c Status: Downloaded newer image for ubuntu:18.04
docker imagesで取得したDockerイメージの一覧を表示できます。
$>docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu 18.04 4c108a37151f 3 weeks ago 64.2MB
さっそくUbuntuを動かしてみます。以下コマンドでDockerコンテナの作成&起動が行われます。
$>docker run -it -d --name ubuntu18.04 ubuntu:18.04 aa320e5db96d9ead4c8e1a4b1194373c5353b90a90cbd86e8e4e71ad9f71b732
各オプションは以下のような感じです。
オプション | 動作 |
---|---|
-it | ターミナルで操作可能に |
-d | バックグラウンド実行 |
--name | コンテナに名前をつける |
なんか長い文字列が出れば成功です。これはコンテナIDとなります。
docker psとすると、起動しているコンテナが表示されます。
ここで先程表示されたコンテナIDの一部が表示されているはずです。
$>docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES aa320e5db96d ubuntu:18.04 "/bin/bash" 2 minutes ago Up 2 minutes ubuntu18.04
あとはdocker execコマンドでDockerのUbuntuにログインすることができます。
ちなみにこの時点ではインストールされていないため、Python3は実行できません。
$>docker exec -it ubuntu18.04 /bin/bash root@aa320e5db96d:/# root@aa320e5db96d:/# python3 bash: python3: command not found
apt-get updateしてから、Python3とpython3-pipをインストールします。
python3コマンドで実行できたらOK。
root@aa320e5db96d:/# apt-get update Get:1 http://archive.ubuntu.com/ubuntu bionic InRelease [242 kB] Get:2 http://security.ubuntu.com/ubuntu bionic-security InRelease [88.7 kB] Get:3 http://security.ubuntu.com/ubuntu bionic-security/multiverse amd64 Packages [4172 B] ... root@aa320e5db96d:/# apt-get install -y python3 python3-pip ... root@aa320e5db96d:/# python3 Python 3.6.8 (default, Jan 14 2019, 11:02:34) [GCC 8.0.1 20180414 (experimental) [trunk revision 259383]] on linux Type "help", "copyright", "credits" or "license" for more information. >>>
pip3でNumpy, Matplotlibをインストールします。
importでエラーが出なければ成功です。
exitでログアウトします。
root@aa320e5db96d:/# pip3 install numpy matplotlib root@aa320e5db96d:/# python3 Python 3.6.8 (default, Jan 14 2019, 11:02:34) [GCC 8.0.1 20180414 (experimental) [trunk revision 259383]] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import numpy >>> import matplotlib >>> exit() root@aa320e5db96d:/# exit
もとのターミナルに戻る場合は、docker stopでコンテナを停止させます。
$>docker stop ubuntu18.04 ubuntu18.04
DockerFileを作る
Pythonが実行できるところまでは確認できたので、次は別マシンでも動かせるようにします。
調べてみるとDockerFileというものを作ることで、環境構築をスムーズに行うことができるようです。手順書みたいですね。
ググった情報とMac上で動かした情報をもとにDockerfileを作ってみました。
# ベースとなるイメージ FROM ubuntu:18.04 # RUNでコンテナ生成時に実行する RUN apt-get update RUN apt-get install -y python3 python3-pip RUN pip3 install numpy matplotlib
以下コマンドでDockerfileからPython3, pi3のインストールをしてくれます。
$>docker build . Sending build context to Docker daemon 2.048kB Step 1/4 : FROM ubuntu:18.04 ---> 4c108a37151f Step 2/4 : RUN apt-get update ---> Running in 85954746378d Get:1 http://archive.ubuntu.com/ubuntu bionic InRelease [242 kB] Get:2 http://security.ubuntu.com/ubuntu bionic-security InRelease [88.7 kB] Get:3 http://security.ubuntu.com/ubuntu bionic-security/main amd64 Packages [578 kB] Get:4 http://archive.ubuntu.com/ubuntu ... 197f63eae486eca2c35dcd334bab75ad524e0de1/kiwisolver-1.1.0-cp36-cp36m-manylinux1_x86_64.whl (90kB) Requirement already satisfied: six in /usr/lib/python3/dist-packages (from cycler>=0.10->matplotlib) Requirement already satisfied: setuptools in /usr/lib/python3/dist-packages (from kiwisolver>=1.0.1->matplotlib) Installing collected packages: numpy, cycler, python-dateutil, pyparsing, kiwisolver, matplotlib Successfully installed cycler-0.10.0 kiwisolver-1.1.0 matplotlib-3.1.1 numpy-1.16.4 pyparsing-2.4.0 python-dateutil-2.8.0 Removing intermediate container 4a4fcaf63749 ---> 028e80075d12 Successfully built 028e80075d12
docker imagesを実行すると、イメージが追加されていることがわかります。
作成したイメージからコンテナの作成を行うと、Python3の環境構築が完了した状態で起動することができます。
$>docker images REPOSITORY TAG IMAGE ID CREATED SIZE <none> <none> 028e80075d12 49 seconds ago 605MB ubuntu 18.04 4c108a37151f 3 weeks ago 64.2MB
いったんここまで。次はWindowsマシンに環境構築をしたいと思います。