はじめに
こんちはー Tushimaです。8月もいよいよ中盤に入り、お盆を満喫してる人も多いのではないでしょうか?
私もここ最近、家族と海鮮丼を食べてきました!
そんな前置きはさておき。今日は、プログラミング学習中の私が、Docker完全攻略しましょうーということでアウトプット記事を書こうと思います!
私も最初、「Dockerってなに?」「なんのために使うの?」と思っていました。「現場で使う・必要だから」という思いでこれは学習する必要があるなぁと思い、怖そうだけどUdemyと書籍をポチってやることにしました!
最近のXでも、こんな投稿が。
今って未経験の方ですらGitとDockerは勉強してるのに、ITエンジニアで知らないは流石にまずいでしょ。
— ひさじゅ@RUNTEQの代表 (@hisaju01) 2025年8月11日
めっちゃバズってますね!なんと、50万インプ越え!要約すると、「ITエンジニアでDocker知らない」はマズイってことですね。
というわけで「Dockerって初めて聞いたよー」って人も「Dockerって聞いたことあるよ!」って人にもできるだけイメージを掴んでもらえるように書きたいと思います!
そもそもDockerとは?
Dockerを15字以内で表すと、コンテナを使った仮想マシン。
早速、そんなコンテナとか仮想マシンとかいきなり使ったら、わからんですよという声が聞こえてきそうです笑
まず、仮想マシンから触れていきましょう!
仮想マシンを触れる前に、仮想マシンの反対である物理マシンから触れた方がわかりやすいので、物理マシンから触れていきます!
物理マシンとは、皆さんが使ってるパソコンmacやWindowsをイメージしてもらえればと思います!CPU・メモリ・ストレージといった物理的な実物があるコンピュータのことを物理マシンといいます!
CPU・メモリ・ストレージの解説はこちら
CPU→パソコンの頭脳。大きいほど、複雑な動作もスムーズに処理できる。
メモリ→作業する机の広さ。データを一時保管する場所。電源を切ると保管したデータは消えてしまう。大きいほど同時に行える作業の数が増えたり、処理の負担が大きい動作も行える。
ストレージ→作業する机の引き出しの大きさ。電源を切ってもデータの保管は維持される。大きければ大きいほどデータを多く保存できる。
に対し、仮想マシンというのは、CPUやメモリをソフトウェアで実現した、実物はないけど物理マシンと同じように動くものです。
これだと少しわかりにくいのですが、人間が物理マシン、人間の形をしたVtuberが仮想マシンという例えを使うと少し解像度が上がるかもしれません。
Vtuberは人間のように実物はないけど、人間と同じようにしゃべったり、手を振ったりといった人間と同じように動くようにできています。
じゃあコンテナを使った仮想マシンのコンテナってなに?
と言いますと、
・アプリケーションの管理する単位
を例えた表現になります。
コンテナはDockerのアイコン通り、船の上に乗ってるコンテナや貨物列車の上に乗ってるコンテナを指します。
ソフトウェアのインストールする場所は2つあります。そう、物理マシンの中か仮想マシンの中になります。人間?Vtuber?という話になります。
次はなにを管理するかという話です。具体的には、仮想化したソフトウェアを管理するかアプリケーションを管理するかになります。仮想化したソフトウェアを管理するとなると、Dockerアイコンのコンテナと船全体を管理するという意味になります。
コンテナだけの管理だと、コンテナの中の荷物とコンテナの形状といったところの管理だけで済みますが、船の管理も、となると大変そうですね。燃料の管理もしないといけないし、エンジンの管理や積載量といった管理する場所の数も量も増えて大変そうです。
Dockerは、ソフトウェアのインストール場所は物理マシン。つまりパソコンにソフトウェアをインストールして、コンテナという単位でアプリケーションを管理しています。
1つのコンテナで1つのアプリケーションを管理するというイメージです。例えば、Railsのアプリケーションを1コンテナ、MySQLのデータベースサーバを起動するのに1コンテナという具合です。
Dockerを使うメリットは?
Dockerを使うメリットとして、挙げられるのは大きく分けて2つなんじゃないかと思います!
1. アプリケーションを開発するときにWindows・macといった色んな人のパソコンの環境差異を考慮せずに開発できる。
2. 1台のパソコンで複数のサービスを開発する際にそれぞれの開発時に予期せぬトラブルを防ぐことができる。
1のメリットは、Dockerで作成した仮想マシンを使えば、みんなが使ってるパソコンの種類や年式によって動く・動かないといったトラブルを避けることができます。
後になって、「俺が開発したRailsのバージョンと君の実行環境のRailsのバージョンが違うんだけど。」といったトラブルを防ぐことができたり、この「俺のmacでは動いたのに会社のmacでは動かない〜」といったトラブルも防ぐことができます。
エンジニアはチームで開発することが一般的なので、チームのみんなが同じ環境で開発やテストの実行を実現できるDockerはめちゃくちゃありがたいですね。
2のメリットもすごく大きいです。このプロジェクトではRails7系、このプロジェクトではRails6系といったプロジェクトやサービスごとにバージョンを変えたり、設定ファイルを編集して反映させる過程で、なにがどうなってしまってるのかがわからなくなってしまい悲しい結末も迎えたくないですよね。
Dockerの仮想環境を導入すれば、プログラミング言語のバージョンが衝突したり、ある目的で作成した設定ファイルが他の設定ファイルに影響してしまうのを防ぐことができます。
プロジェクトごとに仮想環境を立ち上げることができるので、それぞれの環境が独立し、エラーやトラブルシューティングも容易になるのは、とてもいいですよね。
アプリケーションでさえも複雑に絡み合ってるのに、実行環境まで絡み合うのはごめんだよ!っていうのが私の本音です!
終わりに
今日は、Dockerとは、なに?というところと導入によってどんなメリットあるのか?
というところにフォーカスしてアウトプットしました!
使っているパソコンが違うにも関わらず、コマンド1つで同じ実行環境を実現できるのは凄いことですよね。
すごく画期的で、現場でも一般的になっているという事情もよくわかります。私も、最初は「難しそうだなぁ」、「怖いなぁ」というマイナスなイメージを持っていましたが今では欠かせないものとして重宝しています!食わず嫌いせず、もっと早くから触れればよかった〜とさえ思ってます!
次回はDockerの準備とコマンドについてアウトプットできればと思います!