こんにちは、みなふです。
初投稿です。よろしく。
東北大学の1年、文系プログラマです。
全脳アーキテクチャ東北支部という、人工知能のサークルの東北支部に所属しています。
#概要
Docker内でPython環境を構築し、動作の検証をする。
2018/10/16追記
#動機
現在、筆者はITサービス開発のワークショップにチームで参加しています。
僕たちのチームではDockerを使って開発環境を整備しようと考えているので、その環境の整備を試験的にやってみようかと。
#環境
Oracle VM VirtualBox(on Windows10) -> 5.2.18
Ubuntu(on VirtualBox) -> 18.04.1 LTS
Docker CE(on Ubuntu) -> 18.06.1-ce
#いざ実装!
しかし、ここでコンテナとイメージの違いを理解できていないことに気づく…
そんな僕にピッタリのスライドを公開してくれている方がいらっしゃった。
https://www.slideshare.net/zembutsu/docker-images-containers-and-lifecycle
なるほど!
めっちゃわかりやすい記事ですね!
###軽く要約
- イメージは、コンテナイメージとも呼ばれるが、コンテナとは異なる。
- イメージは、イメージレイヤーがたくさん重なったもののこと。編集不可。
- イメージレイヤーは、かんたんに言って差分情報のこと。実ファイルもイメージレイヤーに含まれている。イメージレイヤー=差分+実ファイル
- コンテナは、イメージに「編集中のイメージレイヤー」を重ねたもの。コンテナを実行することで、イメージに含まれる実ファイルを利用できる。コンテナ=作業中イメージレイヤー+イメージ
- 編集中のイメージレイヤーをもとのイメージに加えることで、新しいイメージを生成することができる。このとき、新しいイメージ=もとのイメージに含まれていたイメージレイヤーの集合+新しいイメージレイヤー(編集の差分情報)。
というわけで、コンテナとイメージの違いもわかったことだし、実装していきましょう!
まずはpython3.6の公式dockerイメージを拾ってきます。
root@mino-VirtualBox:~# docker pull python:3.6
3.6: Pulling from library/python
05d1a5232b46: Pull complete
5cee356eda6b: Pull complete
89d3385f0fd3: Pull complete
80ae6b477848: Pull complete
28bdf9e584cc: Pull complete
dec1a1f0462b: Pull complete
a4670d125615: Pull complete
547b45a875f5: Pull complete
ee15e3195a8d: Pull complete
Digest: sha256:54b8aeb1516d7c180d92b47f9f89641926be05a0469b1376195d6bb4eba383f4
Status: Downloaded newer image for python:3.6
そしたら、もってきたdockerイメージを実行して・・・
root@mino-VirtualBox:~# docker run -it python:3.6
Python 3.6.6 (default, Sep 5 2018, 03:40:52)
[GCC 6.3.0 20170516] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> print("hello world!!")
hello world!!
やった!
案外にもさっくり行きましたね。
しかし、これではモジュールが何もインストールされていません。
というわけでモジュールをインストールしていきましょう!
##モジュールインストール
さて、pipは入ってるかな?
root@mino-VirtualBox:~# pip --version
Command 'pip' not found, but can be installed with:
apt install python-pip
あらら、ではまずpipをインストールしましょう。
root@mino-VirtualBox:~# apt install python-pip
E: dpkg は中断されました。問題を修正するには 'sudo dpkg --configure -a' を手動で実行する必要があります。
また怒られた。言われるまま実行。
root@mino-VirtualBox:~# dpkg --configure -a
cpp (4:7.3.0-3ubuntu2.1) を設定しています ...
python3.6 (3.6.6-1~18.04) を設定しています ...
xbrlapi (5.5-4ubuntu2.0.1) を設定しています ...
libecal-1.2-19:amd64 (3.28.5-0ubuntu0.18.04.1) を設定しています ...
〜(中略)〜
update-manager (1:18.04.11.5) を設定しています ...
libc-bin (2.27-3ubuntu1) のトリガを処理しています ...
initramfs-tools (0.130ubuntu3.5) のトリガを処理しています ...
update-initramfs: Generating /boot/initrd.img-4.15.0-36-generic
数十行がずらずらーっと。おわぁ…
で、pipをインストール。
root@mino-VirtualBox:~# apt install python-pip
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下の追加パッケージがインストールされます:
build-essential dpkg-dev fakeroot g++ g++-7 gcc gcc-7 libalgorithm-diff-perl
〜(略)〜
また数十行ずらずらー。
これでやっとpipが使えます。
root@mino-VirtualBox:~# pip --version
pip 9.0.1 from /usr/lib/python2.7/dist-packages (python 2.7)
おっと2.7...
root@mino-VirtualBox:~# pip3 --version
Command 'pip3' not found, but can be installed with:
apt install python3-pip
どうやら、pip3とpipを間違えて入れてしまったようですね。
インストール略。
root@mino-VirtualBox:~# pip3 --version
pip 9.0.1 from /usr/lib/python3/dist-packages (python 3.6)
やれやれ。
で、色々インストール。チームメンバーの過去のコードを見て採用されてるやつはとりあえずインストールしておく。
##インストールしたモジュール
- numpy
- pandas
- matplotlib
- scipy
- google cloud
- mecab
- pyaudio
- scikit-learn
チームがデータ解析系のことをやろうとしているので、自然とそっち系のモジュールが多くなりますね。
じゃあ、この状態のコンテナをイメージにして保存しておきましょう!
…というところで時間が来てしまったので、今日はここまで。
#次回
コンテナイメージの作成とプッシュ
DockerHubの調査
次回のもくもく会は10/18(木)です!
#参考サイト
DockerでPython3.6の環境構築!matplotlibインストールで詰まった話とかも
https://qiita.com/reflet/items/4b3f91661a54ec70a7dc
形態素解析のライブラリ「Mecab」と「Janome」を使ってみよう
http://ushinji.hatenablog.com/entry/2017/11/23/161031
scikit.learn を pip でインストールする
https://qiita.com/mzmttks/items/ee0e53e9b98573a0bd40
pyaudioのインストールで詰んだ時の対処法
https://qiita.com/musaprg/items/34c4c1e0e9eb8e8cc5a1
#2018/10/16追記
コンテナ名はなんだったかな…? と思い、実行中のコンテナを表示してみる。
root@mino-VirtualBox:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
アッ…
というわけで、runコマンドとattachコマンドを混同していた俺は今回、DockerではなくUbuntu上にせっせと環境構築していたのでした。
Ω\ζ°)チーン
これ完全にタイトル詐欺