プログラミング初心者の環境構築にDockerを勧めない理由

たまにネットで「初心者の環境構築にDockerが便利」「お手軽Linux環境」みたいな記事見るのでそんなことないと思うという話を書きます。

Dockerは難しい

DockerでRailsとMySQLを使った開発用プロジェクトを作成 | Akashic Records
これは自分がDockerでRails開発環境を作ったときのメモです。自分で言うのもなんですが、自分はWeb開発やLinuxの知識はある程度あります。そんな自分がUdemyのDockerコースをやって「Dockerある程度わかったかなー」と思った後、そこからRails開発環境を整えるのに約2日かかりました。上の記事を見てもらえばわかると思いますが、Dockerを使うにあたって知っているべき知識は多いです。少なくともimage、container、volumeの区別がちゃんとついていないとツラいです。
適当に使ってると「インストールしたはずのgemが反映されない」みたいなことがまま起こります。
それを説明しようとすると

初心者「なんでインストールしたgemが消えるんですか?」
回答「イメージはイミュータブルな雛形でコンテナはそれを元に作成した仮想マシン。だからコンテナを消して作り直したら前のコンテナへの変更は消えちゃう。なので変更を永続化したかったらボリュームというコンテナと独立したストレージを作成して永続化したいディレクトリにマウントしなきゃいけない」

こんな感じになります。初心者向けでしょうか?

Vagrant(VirtualBox)は簡単

Dockerとよく比較される仮想Linux環境構築手段としてVagrantというものがあります。初心者に勧めるLinux導入手段としては自分はVagrantのほうが優れていると思います。

と、その前にVagrantはVirtualBox(以外にも対応してますが大抵これを使う)という仮想化ソフトを内部的に使いますので、この2つの言葉を先に説明します。わかってる人は読み飛ばしてください。

VirtualBox

皆さんが普段使っているOS(WindowsやMac)の上に仮想マシンを作成し、そこに好きなOSをインストールして使うことができる仮想化ソフトウェアです。仮想マシンはいくつでも作れるので、Linuxをインストールした仮想マシンを作ってLinux操作の練習をしたり、要らなくなったりよくわからなくなったりしたら削除してまた別の仮想マシンを作ったりできます。

Vagrant

Vagrantは言うなれば「VirtualBoxを使いやすくするためのラッパーツール」という感じです。
VirtualBoxを単体で使い始めるには、仮想マシンのメモリやディスクパーティション設定、OSインストールなど自分でしなきゃいけませんが、Vagrantを使うとVagrant Cloudというところから誰かが作った(CentOSやUbuntuの公式のもあります)設定済み仮想マシンをダウンロードしてすぐに起動できます。
またコマンドラインから仮想マシンの起動や停止をしたり、起動時に自動実行するコマンドの設定などもできたりする便利ソフトです。
以降「Vagrant」と言った場合Vagrantを使って作ったVirtualBoxの仮想マシンを使うこと全般をさすと思ってください。

つまりVagrantは

Vagrantはただの仮想Linuxなのです。簡単に起動してSSHでログインして普通の1台のLinuxマシンのように使えます。Dockerのようなcompose?イメージ?コンテナ?ボリューム?みたいなややこしさはありません。ドットインストールのレッスンを一通りやるだけで大体つかめます。

学習ステップとしての視点

Dockerはテストやデプロイなど運用を意識した高度なソフトです。プロが業務で使うぶんには便利でしょう。しかしその分コンセプトは複雑です。
学習ステップとしてはLinuxの操作やWeb環境構築を勉強した上で、既にそれらをわかっている人が使わないと理解しづらい点が多々あるものだと思います。
Vagrantは要はただのLinuxなので学習ステップとしてはDockerより先に来るはずです。

他の手段

他にどうしても環境構築が面倒なら、Dockerを使うくらいならCloud9などのクラウド型開発環境を使うという手もあります。
あと別に仮想Linuxを使わなくても、例えばRailsなら自分のマシンに直接RubyとRails(とGit)だけは頑張って導入して、完成したらHerokuなどのPaaSサービスを利用すればWebサーバー(ApacheやNginx)やデータベース(MySQLやPostgreSQL)の設定ができなくてもリリースはできます。

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする