2019年2月時点:
2年前(2017年)から、dockerで開発環境を構築するようにしている。
複数人で、複数の版での設計、試験を分担するのにgit-docker連携しか解決策がみつかっていないから。
docker利用を勧めている背景、経緯、理由、記録を17 16個予定(うち14記載)。
背景(back ground)
1: gccのクロスコンパイラのコンパイル
一番の発端は、TOPPERS開発者会議という合宿で、TOPPERS/FMPのソースコードのコンパイルをしようとして、Macintoshだとgccのクロスコンパイラのコンパイルに手間がかかり、環境構築が一日で終わらなかったこと。
困ったのを見かねて、同僚(斉藤直希)が、さくさく、dockerで環境構築してくれて、公開してくれた。
dockerで構築できた環境を使って、セミナを開催できた。
半日のセミナで環境の構築から、実際のコンパイルまで一貫した作業の説明と実習ができたた。
Dockerをどっかーらどうやって使えばいいんでしょう。TOPPERS/FMP on RaspberryPi with Macintosh編 5つの関門「名古屋のIoTは名古屋のOSで」
https://qiita.com/kaizen_nagoya/items/9c46c6da8ceb64d2d7af
「Renesas V850 64bit Linux版gccコンパイラ」をdockerで
https://qiita.com/kaizen_nagoya/items/42a57f6cbc685c557e2b
設計環境(design environment)
2: 機械学習システム
ソースコードがgithubで公開されているプログラムの環境構築の例。
比較的容易に機械学習のシステムのdockerでの構築およびdocker hubでの共有ができた。まだ未解決の課題はある。
同僚がはじめた、ゼロから始めるDeep Learning読書会で、環境構築を担当してきた。
Macintoshでpythonをどう使うか、Windowsでpythonをどう使うかをいろいろ試していて、
どちらでもdockerを使って環境構築すれば、全員が同じシステム上で作業でき、情報交換が楽であることがわかった。
なぜdockerで機械学習するか 書籍・ソース一覧作成中 (目標100)
https://qiita.com/kaizen_nagoya/items/ddd12477544bf5ba85e2
読書会で脱落した方、断念した方の半数近くが、 M.S. WindowsでPythonの導入がうまく行かなかった方。そこで、WindowsにPythonを導入する際の落とし穴にはまらないように気をつけることを記述した。この記事が、私の記事で一番Viewsが多く、14万viewsをいただいている。
M.S. WindowsにPython(Anaconda)を導入する(5つの罠)https://qiita.com/kaizen_nagoya/items/7bfd7ecdc4e8edcbd679
3: 言語処理100本ノック
ソースコードがねっとでいろいろ紹介されていて、まとまっていなかったプログラムの環境構築の例。
言語処理100本ノックを、プログラムを始めて覚える人、python以外のプログラミング言語を習得した人がpythonをはじめて覚えようと思った時、機械学習・深層学習を理解、利用しようとする人に推奨している。
dockerに教材をおけば、システムの状態によらず、自習できる。
言語処理100本ノックをdockerで。
https://qiita.com/kaizen_nagoya/items/7e7eb7c543e0c18438c4
言語処理100本ノック 2015(python) 動作確認docker環境構築 https://qiita.com/kaizen_nagoya/items/abaf3fd0198f9f557243
4: ブラウザだけで
自分専用のPCでなかったり、Padしか使っていない時に、言語を導入することが難しい場合がある。
こういう時は、ブラウザだけで利用できる docker がある。
65歳からのプログラミング入門
https://qiita.com/kaizen_nagoya/items/1561f910c275b22d7c9f
Play with Docker でエラー
https://qiita.com/kaizen_nagoya/items/fbf054705bff725dbc25
5:dockerfile
dockerfileという文字綴(text file)でいろいろな設定ができる。
dockerfileは小さく、どこへでも持ち運びができる。
dockerfile
https://qiita.com/kaizen_nagoya/items/cbb6c2c8da78bcbffb08
6: Raspberry PIとdockerで同じソフトを動かす
Raspbianとdockerで起動するubuntuは、どちらもDebian系のLinux。
aptが使えて、環境構築の手順はほぼ同じ処理でできる。
そこで、Raspberry PIでうごかそうと思っている事項をdockerで試してからRaspberry PIに持って行ったり、
dockerで利用しようと思っている事項をRaspberry PIで試してからdockerに持って行ったり。
「ITエンジニアとしてのPC初期環境構築[MacOS編]」に付記したいこと
https://qiita.com/kaizen_nagoya/items/08c9f7e4b968472961fd
7: IntelとARMのCPUの違いを確認する
dockerfileをIntelとARMでなるべく共通にしておくと、
同じソフトウェアの挙動がIntel版とARM版で違うか、同じかが確かめやすい。
8:版の違いを試す
Python2とpython3の違い、
Python3.6とpython3.7の違いなど、
同じソフトウェアの版の違いを試すために、それぞれ別のdockerで仕立てる。
dockerfileなどは、ほとんど同じでよく、導入作業が楽。
9:複数のソフトウェアの版の組み合わせを試す
Linuxが3種類、pythonが3種類、それぞれ版の組み合わせを試そうとすると、9種類のシステムを用意しないといけない。dockerならすごくお手軽。
10: 環境設定の変更を試す
one liner program on docker
https://qiita.com/kaizen_nagoya/items/43ccf4e2d16e3a81adba
何か、ソフトウェアの導入、環境の変更をする場合に、いきなり普段使っている環境を変更すると元に戻らなくなって作業が中断してしまうことがあります。
ひとまず、dockerで試してからという使い方。
macでの「gccのクロスコンパイラのコンパイル」も、環境を書き直せば実行できるが、後で戻すのが大変だから。
##1 1: 普段動かさないシステム・版を試す
入れて見て、使うかどうか決まっていないソフトウェアはdockerで確認。
COBOL
COBOLを40年ぶりにうごかしてみた:dockerでcobol
https://qiita.com/kaizen_nagoya/items/9d9a216ce1b7b05dbb43
PHP
「DockerでPHP7.0×Apacheの環境を構築する@kurkuru」IT業界新人利用時の16の壁(mac mini編)
https://qiita.com/kaizen_nagoya/items/315e8d05a6eef00b56d1
one liner program
One liner program on docker
https://qiita.com/kaizen_nagoya/items/43ccf4e2d16e3a81adba
jq
docker で jq
https://qiita.com/kaizen_nagoya/items/8b35775c354cac36093b
R
dockerで機械学習(104) 環境構築(4) R 難関いくつ?
https://qiita.com/kaizen_nagoya/items/5fb44773bc38574bcf1c
dockerで機械学習(51) with R (1)「入門 機械学習」Drew Conway, John Myles White 著
https://qiita.com/kaizen_nagoya/items/e3722c04ae35e82ecca2
dockerで機械学習(52) with R (2)「データサイエンスのための統計学入門 ―予測、分類、統計モデリング、統計的機械学習とRプログラミング」Peter Bruce、Andrew Bruce 著
https://qiita.com/kaizen_nagoya/items/479e3283a2d030726254
dockerで機械学習(53) with R (3)「RとKerasによるディープラーニング」François Chollet、J. J. Allaire 著
https://qiita.com/kaizen_nagoya/items/57b0d84b3ce4f754485d
dockerで機械学習(74) with R (4)「Introduction to Machine Learning with R」By Scott Burger
https://qiita.com/kaizen_nagoya/items/be23896636af7a7b014d
dockerで機械学習(75) with R(5)「R Deep Learning Cookbook」 By Philippe Remy
https://qiita.com/kaizen_nagoya/items/4d6d4b5d9739bcffbf02
dockerで機械学習(76) with R (6)「Mastering Machine Learning with R 」By Cory Lesmeister
https://qiita.com/kaizen_nagoya/items/c3d51cdd3b811dac4d26
12:OS(operating system) Macintosh, Windows, Linux
Macintosh, Windows, Linuxのいずれかを使っている人たちがいて、
一緒に作業しようとすると、dockerで作成し,docker hubで共有(変更して登録しなおす権利付)するとよい。
dockerのubuntuはよく利用され、aptが使える。
aptは設計環境の構築に便利。
13: 失敗した作業はexitで廃棄。
作業が失敗した場合、その記録(log)だけQiitaなどにあげておき、中身はexitで廃棄。
記録があるため、再現も可能。
14:複数人での作業
ここまで色々書いた。
複数人で作業するには、git-docker連携が大事。。
いろいろな環境を、複数人で書いたり試験したりするのにdockerで実行し、docker hubに登録すると便利。。
個人だけで作業する場合でも、環境の切り替えなどでも面倒なことに巻き込まれない。
15 componentに分かれていて、導入、配布が楽。
最近よくある例。一つの部品以外は、通信・複写をせずに導入、配布ができる。
下記のように10部品中1つだけで済めば、時間は10分の1。無駄な空間の重複は10分の9省ける。
# docker push kaizenjapan/fdps
The push refers to repository [docker.io/kaizenjapan/fdps]
d219117cd3c0: Pushing [==> ] 31.19MB/583.4MB
18f7e20c4125: Mounted from library/gcc
bdb3ef4d81d2: Mounted from library/gcc
5c4512ea6db7: Mounted from library/gcc
01da96bac413: Mounted from library/gcc
8c487c756d71: Mounted from library/gcc
05c027e771c8: Mounted from library/gcc
e9313b51f46d: Mounted from library/gcc
46601dcd4114: Mounted from library/gcc
31b0e148310d: Mounted from library/gcc
16 debian系のubuntu/aptが利用できる。
aptは、バイナリファイルで整合性のある、関連するファイルを一括導入できるのが便利。
aptは、英語で頭の良いという意味があるらしい。
https://eow.alc.co.jp/search?q=apt&ref=sa
-sourceという名称で、ソースコードの導入もできるのが特に便利。
カーネルのソースコードをコンパイルしようとしても、ライブラリ、ツールの整合性が合わず、コンパイルできないことがしばしば。
linuxで最初にカーネルのコンパイルができたのがdebianで、aptでkernelのsourceを導入して。
博論を書くのに、mobile IPという通信規約を特定のlinuxのkernelの特定の版用のソースをコンパイルして、BSDと対向試験をして確認。
BSDはportでカーネルのコンパイルを学生から教えてしたことがあった。
17 GCCなど公式 docker hubがあるものがある。
よく利用する公式hub
ubuntu
gcc
anaconda
参考資料(referene)
【図解】Dockerの全体像を理解する -前編-
https://qiita.com/kotaro-dr/items/b1024c7d200a75b992fc
【図解】Dockerの全体像を理解する -中編-
https://qiita.com/kotaro-dr/items/88ec3a0e2d80d7cdf87a
【図解】Dockerの全体像を理解する -後編-
https://qiita.com/kotaro-dr/items/40106f13d47bfcbc2572
【Docker】Qiita 週間 LGTM 数ランキング【自動更新】
https://qiita.com/kou_pg_0131/items/ae11fca7d2eba445b037
文書履歴
ver. 0.01 初稿,3つ 20190204
ver. 0.02 6つ 20190205
ver. 0.03 階層化, 9(PHP, R, ブラウザ利用追記) 20190212 朝
ver. 0.04 12(docker file, one liner program, jq) 20190212 昼
ver. 0.05 15(版の違い、版の組み合わせ、IntelとARM) 20190224
ver. 0.06 16 複数人の作業追記、見出し変更 20190503 朝
ver. 0.07 失敗した作業追記 20190503 午前
ver. 0.08 17(componentに分かれていて、)追記 20190813
ver. 0.09 URL追記 20201229
最後までおよみいただきありがとうございました。
いいね 💚、フォローをお願いします。
Thank you very much for reading to the last sentence.
Please press the like icon 💚 and follow me for your happy life.
<この記事は個人の過去の経験に基づく個人の感想です。現在所属する組織、業務とは関係がありません。>