ウェブエンジニア問題集
第1章

Dockerとは何か — イメージ・コンテナ・レジストリの全体像

6
この章の目次開く

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 imagesdocker 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
bash

この例では、Docker Hubから nginx イメージを取得し、そのイメージから web という名前のコンテナを起動しています。-p 8080:80 は、手元のPCの 8080 番ポートをコンテナ内の 80 番ポートにつなぐ指定です。

ブラウザで http://localhost:8080 を開くと、コンテナ内のNginxにアクセスできます。

ちゃんと使うためのポイント

  • Dockerは、アプリと実行環境をまとめて扱うためのツール
  • イメージはテンプレート、コンテナはイメージから起動した実体
  • Dockerfileはイメージの作り方、レジストリはイメージの置き場所
  • Gitリポジトリはソースコード、Dockerレジストリはビルド済みイメージを扱う
  • 本格的なWeb開発では、単体の docker run だけでなく Docker Compose も重要になる

Dockerのクイズで確認するイメージ、コンテナ、Dockerfile、Composeの基本を問題で確認しましょう。