この記事のターゲット
プログラミングを勉強して数年数か月、あるとき話していると、ある人が
「前にDocker上でプログラミングしてたんですけど...」
私 : 「ど、ど、Docker ... ? なんやDockerて」
ってなった人むけです。
Dockerがうれしい物語
エピソード1:前は動いてたのに
あなたは過去になにかしら自身のPCでプログラミングをしたことがある人です。
例えば
- Nodeってました
Node以外でも構いません。
npm(Nodeのライブラリ管理ツール)を使っていろいろインストールした自分だけの開発環境のPCです。
過去にいくつか複数のファイルでできた作品っぽいものを作っています。
ある日
「なんかNodeで作業してたらよくわからんエラーでたぞ。ググったら『Node.js 14.3以前で実行してください』やて」
使おうとしているライブラリがNode.js の少し前のバージョンじゃないと正常に動かないみたいです。
ところが自分のPCにインストールされているNode.jsは16.1
「新しいNodeやと動かんのか。ググってバージョン変更するか」
そこであなたはネットの情報をかき集め、Node.jsを一度アンインストールしてから再度インストールしてバージョンを変更しました。
苦労した甲斐あって、使おうとしていたライブラリが動きました。
ある日
「この処理どうやって実装するんやっけな、前に書いたやつ動かして思い出そっと ... ... ... あれ、前は動いてたのに」
プロジェクトごとに求められるバージョンが異なる問題
エピソード2:こんなんインストールしたっけ
「僕のやりたいことを実現するには ... あ、これインストールすればいいのね」
「んー、思ってたのと違うなぁ、あ、違うやり方発見!ふむふむ XXX をインストールして ... 」
後日
「ダウンロード中にファイル整理しとこかな。Program filesの中身増えたなぁ、 ... なんか見覚えのないないようわからんファイルやたらあるけど、こんなんインストールしたっけ?」
いろんなプロジェクトでいろいろインストールした結果、ジャングル状態
エピソード3 : どういうことだってばよ
「もうわけがわからん、いったんいろいろインストールする前の状態にしよ」
「あれもこれも消して ... ... あれ、これ開発のためにインストールしたやつか・・・?」
「ものによってはパスは自分で消すのか ... これでいけたんやろうか・・・」
「あれ、一度消して再インストールしたはずなのに前の情報がちょこちょこ残ってる ... どういうことだってばよ」
アンインストールしてもたまにのこるカスファイルたち
エピソード4 : 新しい開発環境に時間がかかる
「この前は自宅のPCの環境で痛い目あったからな~、今度は慎重にやろっと ...」
「 ... 」
「インストールするもん多くて面倒 ...」
環境の構築の仕方なんて覚えてないので再びQiita様とかZenn様とかの同じページを徘徊
_人人人人人人人人人人人人人人_
> それ、Dockerが解決します <
 ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄
解決するには
エピソード1-3に関しては、
- プロジェクトごとに新しいPCを用意する
が一番わかりやすいし安全だろう(現実性はさておき)。
このPCはpython3.6で学校の授業用
このPCはPython3.8で趣味のプログラミング用
このPCはNode.js 14.2でまだなにするか決まってないけどNode触ってみる用
...
要は 開発環境同士が干渉しあわなければいいのである。
これを実現するうえでもっと現実的な方法として、
- PCの中にPCをつくる
方法がある。PC上でスマホだったり、エミュレーター(ゲーム機とか)を操作してる様子をみたことないだろうか。
windowの画面の中に(まるでリモートデスクトップのような)もう一つのwindowsの画面...とまではいかないが、 環境変数やルートパス等が完全に元のOS(ホストOS)から隔離されている。
これにより、「プロジェクトごとに新しいPCを用意する」を 1つのPCで実現が可能になる。
が、
新品のスマホやPCを買ってもすでに最初から容量がいくらか埋まっているように、OSを1つ存在させるだけでもそこそこの容量を食う。
また、OSが2つになれば安直に考えて計算量2倍、すなわちメモリ2倍必要になってくる。
結論、
たかが開発環境わけるだけのためなのに効率悪すぎ
それ、Dockerが解決します
dockerもまた、PCの中に異なる作業環境を作成するという点で上記と似ているが
- OSはホストOSのまま、環境変数とかルートパスは別なので効率良◎
- プロジェクトごとに異なる作業環境を作成できる( => エピソード1,2 )
- もしインストールに失敗してわけわからなくなっても、簡単に作業環境を破棄できる( => エピソード3 )
- いろいろインストールする手順をスクリプト化し、同じ環境を少ないコマンドで実装する( => エピソード4 )
どうやって実現してるのか仕組みはちゃんとは知らないし、たぶんしっかりは知る必要もない。
とりあえずこの記事で知ってほしいのは、Dockerを使えば上みたいな問題を回避できるということ。
参考
Dockerの導入、実際に仕組みがどうなっているのかや使い方は下記ページを参考にしてください。
↓↓↓ Docker概念 ↓↓↓
「Docker」を全く知らない人のために「Docker」の魅力を伝えるための「Docker」入門
https://qiita.com/bremen/items/4604f530fe25786240db
↓↓↓ 導入 ↓↓↓
↓↓↓ 仕組み・使い方 ↓↓↓
いまさらだけどDockerに入門したので分かりやすくまとめてみた
https://qiita.com/gold-kou/items/44860fbda1a34a001fc1
Dockerを体系的に学べる公式チュートリアル和訳
https://qiita.com/Michinosuke/items/5778e0d9e9c04038903c