Docker Anaconda で汎用開発コンテナーを構築
こんにちは、切口太郎です。
前回までは、VS Code の Remote Container 拡張機能から、Docker Desktop for Windows で動作するPython Docker Image をビルドしてサンプルアプリケーションを実行してみました。
今回は汎用的な開発環境として利用できる Docker Image を構築して VS Code を使用して実際の開発ができる環境を作っていきます。
Docker は コンテナー 内部に永続化データをもたせるようにできていません。
コンテナー内部にデータやソースを記述しても、新しい Docker Image が配布された時点で消去されてしまいます。
この仕様は複数人数でも同じ環境を維持できる素晴らしい仕組みなのですが、開発中のソースやデータベースに設定した試験用データもなくなるのでは、開発になりません。
そこで、Docker は、イメージとは別に永続化の機能を持っています。
volume
|
dockerから docker の管理エリアの任意に領域を volume として保持する。
Docker Image とは独立している。
|
bind
|
ホストのディレクトリーを docker のボリュームとして利用する。
|
tmpfs
|
コンテナー専用の一時ファイル
コンテナーが停止するとデータは消滅する。
|
このうち、tempfs は、永続化できないので、利用する場合には、volume か OS ファイルの bind を利用することになります。
1 汎用Python開発環境の構築
今回は、ノマドワーカーPCで Python の環境を構築するのが目的なので、以下のデザインで開発環境を構築します。
プログラムソースを格納するディレクトリーは、Docker の Volume で作成します。
ソースはGITで出し入れを行います。
データベースのテーブルなど、データの格納にはホストOS上のディレクトリーをマウントして利用します。
データベースのテーブルは、外部のHDなどを使用したい場合が多いと思うのでこのようにしました。
また、この方法だと複数のデータベーステーブルを用意してマウントでデータベースを切り替えることができます。
再現テストの時にデータベースを切り替えられると便利です。
ベースにする Docker image は、コミュニティ版の Annaconda3 を Docker Hub から取得して利用します。
この方法で開発に必要なリソースをDocker 内部に収める事ができます。
また、開発中のソースファイルと開発環境は、クラウド上に置くことにより、クライアントマシンに不具合があったときにも迅速に環境を復元することができ、
最新のソースと開発環境を、開発チーム全体で同期することができます。
今回はこのデザインで環境を構築し、VS Code のリモートコンテナーで接続して利用します。
2 ベースコンテナーの選定
ベースの Docker イメージを Docker Hub から取得します。
汎用的といえば Python では もちろんAnaconda ですので、Anaconda の Docker イメージをベースとして使用します。
Anaconda の Docker イメージはここから取得します。
3 永続化用ボリューム
GIT管理をするソース用のボリュームとデータベースなどのデータを管理するためのボリュームを割り当てます。
GITでソース管理するボリュームは、コンテナー管理のボリュームにするので、コンテナーのコマンドを利用してボリュームを生成します。
Windows の「コマンドプロンプト」から volume 作成のコマンドを入力します。
C:\>docker volume create --name source
source
C:\>docker volume ls
DRIVER VOLUME NAME
local source
|
source といボリュームが作成できています。
なんか、コマンドプロンプトが新鮮です。
次に、Docker Hub から Comminuty 版の Anaconda3 のイメージを Pull して Docker に落とします。
C:\>docker run continuumio/anaconda3
Unable to find image 'continuumio/anaconda3:latest' locally
latest: Pulling from continuumio/anaconda3
c5e155d5a1d1: Pull complete
86534c0d13b7: Pull complete
5764e90b1fae: Pull complete
ba67f7304613: Pull complete
Digest: sha256:2342379103968c3a45c8f49517ab2dff7638dd6a3842cb9cff9792acd92fa928
Status: Downloaded newer image for continuumio/anaconda3:latest
|
Anaconda3のフルセットが格納された イメージなので、Pull にはかなりの時間がかかります。
今回は C:/database というディレクトリーを作成しました。
このディレクトリーを Docker のボリュームとしてマウントします。
C:\>docker run --name anaconda3 -v source:/opt/source -v /c/database:/opt/database -it continuumio/anaconda3 /bin/bash
(base) root@78b69b0876b4:/#
|
コンテナーの中に入りました。プロンプトが、Python の (base) になっています。
ボリュームがマウントされているか確認します。
太字の部分がマウントされているボリュームです。 /opt/source と /opt/database がマウントされていますね。
(base) root@78b69b0876b4:/# df
Filesystem 1K-blocks Used Available Use% Mounted on
overlay 122774448 7016864 109491256 7% /
tmpfs 65536 0 65536 0% /dev
tmpfs 2524632 0 2524632 0% /sys/fs/cgroup
/dev/sda1 122774448 7016864 109491256 7% /opt/source
//10.0.75.1/C 313940988 96970632 216970356 31% /opt/database
shm 65536 0 65536 0% /dev/shm
tmpfs 2524632 0 2524632 0% /proc/acpi
tmpfs 2524632 0 2524632 0% /sys/firmware
(base) root@78b69b0876b4:/#
(base) root@78b69b0876b4:/# python
Python 3.7.3 (default, Mar 27 2019, 22:11:17)
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pandas as pd
>>> quit()
(base) root@78b69b0876b4:/#
|
4 VS Code で Docker Container に接続
VS Code を起動して、Control + Shift + P でコマンドパレットを開きます。
Remote container と入力すると候補が出てきます。
Anaconda3 の Docker Container は、稼働中ですので、Rmote-Contiainers: Attach to Running container... を選択します。
稼働しているコンテナーの一覧を表示します。
/anaconda3 を選択します。
新しい VS Code のウインドウが開きます。
右下の通知バーに [installing dev container ......] と表示されますので、終了するまで待ちます。
稼働中のコンテナーへ接続すので、それほど時間はかかりません。
(待っていると長く感じますが・・・・)
控えめの表示ですが、無事接続できました。
/opt/source フォルダーを開いてみます。
接続できました。何も入っていないので、表示がのっぺらぼうです。
次に、ターミナルを開いてみます。
Control + Shift + @ で開きます。
Anaconda の basse 環境でターミナルが開きました。
ユーザーは root になっています。
普通はすぐにこの画面になりますが、たまにプロンプトが表示されないときがあります。
その時は、白矢印の選択ボックスを切り替えると表示されます。
5 Git から永続化ボリュームにソースをクローン
ソースフォルダーに GIT から Python プログラムをクローンしてみます。
できましたね。
ファイルもエクスプローラーパネルから参照できています。
さて、肝心のボリュームデータですが、コンテナーを終了して再起動してもGITのファイルは消えないで残っているのでしょうか?
試してみます。
6 再起動して永続化ボリュームを確認
VS Code を終了して、Anaconda Container を終了します。
終了したか確認してみます。
終わっています。
(base) root@78b69b0876b4:/# exit
exit
C:\>docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
|
一応、残骸も確認しておきます。
残骸があったので、まっさらな状態で起動するように、残骸を削除しておきます。
C:\>docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8c76ea6783e0 continuumio/anaconda3 "/usr/bin/tini -- /b…" 36 seconds ago Created anaconda3
7484bf645580 vsc-vscode-remote-try-python-0b0fc253a90a1ad39d632b7c09cf69b1 "/bin/sh -c 'echo Co…" 25 minutes ago Exited (137) 19 minutes ago agitated_volhard
cd18ab96fd58 busybox "sh" 22 hours ago Exited (0) 22 hours ago volume-manager
C:\>docker rm 8c76ea6783e0
8c76ea6783e0
C:\>docker rm 7484bf645580
7484bf645580
C:\>docker rm cd18ab96fd58
cd18ab96fd58
C:\>docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
|
いろいろテストしていたので残骸だらけでした。
全部消してスッキリしました。
anaconda3 コンテナーを起動します。
無事起動できたので、マウントを調べました。
C:\>docker run --name anaconda3 -v source:/opt/source -v /c/database:/opt/database -it continuumio/anaconda3 /bin/bash
(base) root@0a320850e2cb:/# df
Filesystem 1K-blocks Used Available Use% Mounted on
overlay 122774448 7183076 109325044 7% /
tmpfs 65536 0 65536 0% /dev
tmpfs 2524632 0 2524632 0% /sys/fs/cgroup
/dev/sda1 122774448 7183076 109325044 7% /opt/source
//10.0.75.1/C 313940988 97282632 216658356 31% /opt/database
shm 65536 0 65536 0% /dev/shm
tmpfs 2524632 0 2524632 0% /proc/acpi
tmpfs 2524632 0 2524632 0% /sys/firmware
|
マウントできていたので、ソースディレクトリーを確認します。
/opt/source に master ディレクトリーがいらっしゃいました。どうやらソースの永続化はできているようです。
(base) root@0a320850e2cb:/# cd /opt/source
(base) root@0a320850e2cb:/opt/source# ls
master
(base) root@0a320850e2cb:/opt/source#
|
VS Code の Remote Container で接続してみます。ソース・ファイルが見られれば成功です。
前回の接続を一旦終了させて、新しい接続をします。(残骸ごと削除しましたからね)
Control + Shift + P でコマンドパレットを表示します。
残骸削除したので、anaconda3 の接続が表示されます。ここを選択して接続します。
大丈夫、きちんと永続化できていました。
7 まとめ
これで、汎用開発環境のベースは出来上がりました。
使った感じですが、Docker Desktop for Windows は、やはりメモリーがそこそこ無いと動作が遅くなります。
Anaconda を利用する場合、4G程度は Docker に渡せるようにしたほうがいいようです。
Hyper-V も起動していますし、ベースの Windows Enterprise の動作メモリーもあります。
Office で仕様書見ながら、VS Code でプログラムを作っていくと、やはり8Gバイトのメモリーでは足りませんね。
本格的な開発をするようであれば、Jenkins などの Docker コンテナー分もメモリーを考慮する必要があります。
やっぱ16Gバイトのメモリーは欲しいですね。(最近のノートPCはわりと増設できるのが多いようです)
DELL か mouse コンピューターを虎視眈々と狙っています。
HP のノートは今の会社で使っているので、それ以外にします。ノマド感が湧きませんから。
MACが一番ノマド感を醸し出せていいのですが、ありゃぁ、相当高額でっせ!
Windows10 を愛していこうと思います。
これで、ノマド計画がよりリアルになってきました!
コメント
コメントを投稿