Dockerとは何か — イメージ・コンテナ・レジストリの全体像
Dockerは、アプリケーションとその実行に必要なものをコンテナとしてまとめ、どこでも同じように動かしやすくするためのツールです。
ローカルPC、CI、本番サーバーでNode.jsやMySQLのバージョンが違うと、「自分のPCでは動くのに本番で落ちる」という問題が起きます。Dockerは、アプリのコードだけでなく、ランタイム、ライブラリ、OSレベルの設定をまとめて扱うことで、この環境差分を小さくします。
Dockerは「アプリを入れる箱」ではなく、「同じ実行環境を作って配るための仕組み」です。
学習者Dockerを使うと環境構築が楽になる、と聞きました。でも、Node.jsを普通にインストールして動かすのと何が違うんですか?
先生普通の環境構築は「各PCに必要なものを入れる」発想です。Dockerは「必要なものが入った実行環境をイメージとして作り、そこからコンテナを起動する」発想です。
Dockerが解決すること
Dockerが特に役立つのは、次のような場面です。
| 困りごと | Dockerでの考え方 |
|---|---|
| 開発者ごとにNode.jsやMySQLのバージョンが違う | 必要なバージョンをイメージに固定する |
| 新しいメンバーの環境構築に時間がかかる | docker compose up でまとめて起動する |
| 本番とローカルで動き方が違う | 同じイメージを使って差分を減らす |
| 複数サービスの起動順や接続設定が複雑 | Composeでアプリ、DB、Redisなどを定義する |
ただし、Dockerを使えば設計や運用の問題がすべて消えるわけではありません。ログ、永続データ、秘密情報、セキュリティ、イメージサイズなどは、Dockerを使うからこそ意識する必要があります。
最初に押さえる4つの言葉
Dockerの学習では、似た言葉が何度も出てきます。最初は次の4つを分けて考えましょう。
| 用語 | ざっくり言うと | 例 |
|---|---|---|
| イメージ | コンテナを作るためのテンプレート | node:22, mysql:8.4, 自作のWebアプリイメージ |
| コンテナ | イメージから起動した実行中のプロセス | 起動中のNext.jsアプリ、起動中のMySQL |
| Dockerfile | イメージの作り方を書いたファイル | FROM node:22 から始まるビルド手順 |
| レジストリ | イメージを置いておく場所 | Docker Hub, Amazon ECR, GitHub Container Registry |
特に、イメージとコンテナの違いは重要です。
| 観点 | イメージ | コンテナ |
|---|---|---|
| 役割 | 実行環境のテンプレート | 実際に動いているもの |
| 状態 | 基本的に読み取り専用 | 実行中に状態を持つ |
| たとえるなら | アプリのパッケージ | 起動したアプリ |
| 主なコマンド | docker build, docker pull, docker images | docker run, docker ps, docker stop |
DockerはGitの代わりではない
Dockerを学び始めると、Gitリポジトリ、Dockerイメージ、ECRリポジトリのように「リポジトリ」という言葉が複数出てきます。
Gitリポジトリに入れるのは、ソースコードです。一方、Dockerレジストリに置くのは、ビルド済みのイメージです。つまり、Gitは「作り方」を管理し、Dockerのレジストリは「できあがった実行パッケージ」を配る場所です。
Gitリポジトリ
ソースコード、Dockerfile、compose.yaml
↓ docker build
Dockerイメージ
実行に必要なものをまとめたパッケージ
↓ docker push
レジストリ
Docker Hub、Amazon ECRなどこの流れは、AWS SAA-C03のECR章にもつながります。
Dockerを使う基本の流れ
最小の流れは、次の3ステップです。
# 1. イメージを取得する
docker pull nginx
# 2. イメージからコンテナを起動する
docker run --name web -p 8080:80 nginx
# 3. 起動中のコンテナを確認する
docker psこの例では、Docker Hubから nginx イメージを取得し、そのイメージから web という名前のコンテナを起動しています。-p 8080:80 は、手元のPCの 8080 番ポートをコンテナ内の 80 番ポートにつなぐ指定です。
ブラウザで http://localhost:8080 を開くと、コンテナ内のNginxにアクセスできます。
ちゃんと使うためのポイント
- Dockerは、アプリと実行環境をまとめて扱うためのツール
- イメージはテンプレート、コンテナはイメージから起動した実体
- Dockerfileはイメージの作り方、レジストリはイメージの置き場所
- Gitリポジトリはソースコード、Dockerレジストリはビルド済みイメージを扱う
- 本格的なWeb開発では、単体の
docker runだけでなく Docker Compose も重要になる
