docker language stacksを利用してpythonを実行してみる (2) Dockerfileの使用

More than 3 years have passed since last update.

さて、前回の続きです。

dockerのlanguage stacksで用意されているpythonの環境では、どうもライブラリの類いはインストールされていないようです。ということで、必要なものがインストールされたコンテナを用意する必要があります。

ということで、今回は前回のものにちょっとだけ付け加えた以下のコードを実行してみます。前回と同じく、/home/vagrant/pythonに作成するとします。


hello.py

# coding: utf-8

import numpy as np

print("Hello world!")

a = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
print(a)


このコードでは行列を表示するためにあらかじめnumpyのインストールが必要です。

通常ですと、例えば下記のようにpipを使ってインストールします。

$ pip install numpy

ということで、自分のコードを実行する前に、インストールすることにします。こういう場合は既存のコンテナファイルを改造して自分用のコンテナファイルを作ることで対応します。その時に使う設定ファイルがDockerfileです。以下のようなファイルを作成します。フォルダはとりあえず同じところでつくります。


Dockerfile

From python:latest

MAINTAINER danpansa
RUN pip install numpy

意味は下記の通りです。

命令

意味

From
python:latest
もとにするコンテナ名を書きます

MAINTAINER
danpansa
作成するコンテナの作者を書きます。必須ではありません

RUN
pip install numpy
コンテナであらかじめ行っておく作業を値として書きます

ここでこのDockerfileをもとに新しいコンテナを生成するとnumpyがインストールされたコンテナができるわけです。生成方法ですが、

$ docker build -t pip_test .

($はプロンプトです。)

-tはタグのtだそうですが、とりあえずは名前だと思っておけばよいです。一番後ろに.がありますが、これはDockerfieの場所を指定しており、カレントディレクトリを示しています。必須です。

これで新しいコンテナが生成されます。初回は結構時間がかかります。しばらく待ってコンテナができたら、下記のようにして実行します。

$ docker run --rm --name hello-world -v /home/vagrant/python:/home/vagrant/python -w /home/vagrant/python pip_test python hello.py

Hello world!
[[ 1 2 3]
[ 4 5 6]
[ 7 8 9]
[10 11 12]]

前回とほとんどかわりませんが、ちょっとちがうところがあります。前回は、python:latestとなっていたところを、pip_testと今回生成したコンテナ名にしてあります。python:latestpip_testの違いはpip install numpyがあるかないかだけなので、使い方は同じです。

だいたいどんな感じかはわかりましたが、これ私使うことあるかな…