この記事は、「Dockerってよく聞くけど、結局何ができるの?」「どういう場面で便利なの?」そんな疑問を持っている方に向けて、Dockerの基本をわかりやすく解説する入門記事です。
この記事を読むと、Dockerの仕組みやメリット、どんな場面で活用できるのかが理解できるようになります。
ポイントを一つずつ確認しながら、Dockerの基本を一緒に見ていきましょう!
単語の意味
本記事で使用する単語のざっくりとした意味を紹介します。
記事の内容をスムーズに理解するための参考にしてください。
- イメージ:コンテナを作成するための「設計図」のようなものです。
- コンテナ:イメージをもとに作られる、独立した「アプリケーションの実行環境」のことです。
- Host OS:(本記事では)普段使っているMacやWindowsなどのPCのOSのことです。
Dockerとは
Dockerとは、ざっくり言うと以下の3つを実現する仕組みです。
- ①環境を分けられる
- ②環境をコードで再現できる
- ③環境(コンテナ)をコマンドで管理できる
それぞれ詳しく見ていきましょう。
①環境を分けられる
Dockerを使用すると、異なる環境を分けて管理できるようになります。

Dockerは「コンテナ」という単位で、Rubyのコンテナ(Ruby環境)、Nginxのコンテナ(Nginx環境)、PostgreSQLのコンテナ(PostgreSQL環境)といった形で環境を分けることができます。
環境を分けるメリット
Dockerを使用して環境を分けられるようになると、依存関係の管理をしなくても良くなります。
Dockerを使用しない場合(依存関係の管理が必要)
Dockerを使用しない場合は、異なるバージョンのソフトウェアを同じ環境にインストールすると、依存関係の問題が発生することがあります。

例えば、あなたの環境にRuby 2.7がインストールされており、それに依存するアプリケーション1が正常に動作しているとします。
そこにRuby 3.1が必要な新しいアプリケーション2を追加し、環境にRuby 3.1をインストールします。
その結果、既存のRuby 2.7を使用したアプリケーション1が動作しなくなる可能性があります。
Dockerを使用する場合(依存関係の影響を受けない)
Dockerを使用すると、それぞれの環境を独立したコンテナとして管理できるため、異なるバージョンのアプリケーションを同じホストOS上で安全に動作させることができます。

先ほどの例で言うと、Ruby 2.7の環境と、Ruby 3.1の環境の2つを、1つのHost OS上で動かすことができます。
Dockerを使用して環境を分けられるようになると、障害の影響を最小限に抑えることができます。
Dockerを使用しない場合(障害が全体に影響する)
Dockerを使用しない場合、すべてのアプリケーションが同じ環境で動作しているため、1つのコンポーネントがクラッシュすると、他のコンポーネントにも影響を与える可能性があります。

例えば、Nginxが異常終了した場合、Nginxを介してアクセスするRubyアプリケーションやデータベースへの接続も遮断され、システム全体が停止してしまうことがあります。
Dockerを使用する場合(障害の影響を最小限にできる)
Dockerでは、各アプリケーションが独立したコンテナで動作するため、あるコンテナに障害が発生しても、他のコンテナには影響を与えません。

例えば、Nginxのコンテナが停止しても、RubyコンテナとPostgreSQLコンテナは正常に動作し続けるため、サービス全体の影響を最小限に抑えることができます。
②環境をコードで再現できる
Dockerを使用すると、環境をコードとして再現できるようになります。
Dockerでは、アプリケーションの環境構成をDockerfileというファイルに記述します。
【Dockerfileの例】
# Ruby 3.3と関連ライブラリをインストール
FROM ruby:3.3
# Gemfileの変更があればエラーをスロー
RUN bundle config --global frozen 1
# 作業ディレクトリを設定
WORKDIR /usr/src/app
# 必要なファイルをコピーし、依存関係をインストール
COPY Gemfile Gemfile.lock ./
RUN bundle install
# アプリケーションのソースコードをコピー
COPY . .
# 実行コマンドを指定
CMD ["./your-daemon-or-script.rb"]
例えば、上記【Dockerfileの例】のように、Rubyで作られたアプリケーションを動作させるために、Rubyの環境構築や必要なライブラリのインストール手順を Dockerfile に記述できます。

Dockerコンテナは、上記画像の番号順に作成されるため、Dockerfileに環境構成を記述しておくことで、その環境のコンテナを作成することができます。
環境をコードで再現するメリット
Dockerを使用すると、ライブラリやプログラミング言語を1つ1つ手動でインストールする手間を省けます。
Dockerを使用しない場合(手動で環境を構築)

Dockerを使用しない場合、開発環境を整えるには、必要なライブラリやプログラミング言語を手動で個別にインストールする必要があります。
そのため、環境の違いやインストールミスが原因で、「自分のPCでは動くのに、他のPCでは動かない…」というトラブルが発生しやすくなります。
Dockerを使用する場合(数回のコマンド実行で環境を構築)

Dockerを使用すれば、アプリケーションに必要なライブラリや言語をDockerfileに記述することで、数回のコマンドを実行するだけで環境を構築できます。
そのため、手動でのインストール作業が不要になり、環境の違いによるトラブルも防げます。
Dockerを使用して環境をコードで再現できるようになると、同じ環境を複数人で共有することができます。

例えば、1人が作成した Dockerfileをチームメンバーに共有すれば、メンバーは全く同じ開発環境を構築できます。
これにより、「Aさんの環境では動くのに、Bさんの環境では動かない…」といった問題を防げます。
③環境(コンテナ)をコマンドで管理できる
Dockerを使用すると、環境(コンテナ)をコマンドで管理できるようになります。

例えば、次のような操作がコマンドで実行できます。
- イメージの構築:
$ docker build
- コンテナの作成 & 起動:
$ docker run
- コンテナの一時停止(プロセスの停止):
$ docker pause
- コンテナの停止:
$ docker stop
- コンテナの削除:
$ docker rm
このように、手動で複雑な設定をすることなく、コマンドを実行するだけで環境を作成・管理できます。
Dockerで使えるコマンド一覧は、Dockerコマンド(日本語版Dockerドキュメント)で確認できます。
環境(コンテナ)をコマンドで管理するメリット
Dockerを使用して環境(コンテナ)をコマンドで管理できるようになると、素早く環境を構築・削除できるようになります。

例えば、開発環境を用意する場合、手動でセットアップすると多くの手順が必要ですが、Dockerなら数秒で準備できます。
同様に、不要になった環境もすぐに削除できるため、管理が非常に楽になります。
Dockerの使用方法(開発環境の構築を例に説明)
Dockerを使用する手順を、開発環境の構築を例に説明します。
Dockerの基本的な使い方:Docker Desktopをインストール & 起動して、Dockerコンテナを立ち上げる

具体的な手順は次のとおりです。
- Docker DesktopをPCにインストール & 起動する
- Dockerfileを作成する
- DockerfileからDockerイメージを構築する(Dockerコマンドを実行する)
- Dockerイメージからコンテナを作成 & 起動する(Dockerコマンドを実行する)
上記の手順で作成 & 起動されたDockerコンテナ上で、アプリケーションを動かせるようになります。
Dockerを使用する大まかな流れは以上になります。
まとめ
この記事では、Dockerの仕組みとメリットについて初心者向けに解説しました。
Dockerとは、以下の3つを実現する仕組みであることがわかりました。
- ①環境を分けられる
- ②環境をコードで再現できる
- ③環境(コンテナ)をコマンドで管理できる
Dockerを活用できるようになると、開発環境の構築が効率化されるだけでなく、チーム全体の生産性も向上します。
また、実際の開発では複数のコンテナを連携させることが多いです。
その際は「Docker Compose」が便利で、Dockerの基礎を理解しておくことで、よりスムーズに活用できます!
本記事がDockerの導入や学習を始めるきっかけになれば幸いです。



