Dockerを触り始めたとき、最初に困るのはコマンドそのものよりも「結局こいつは何をしているの?」という部分かと思う。
ここからは Docker 解説シリーズとして、全20回で Docker の基礎、k8s(Kubernetes)、CI/CD パイプライン、Terraform による IaC までを解説していく。
開発環境を整えるところから、Kubernetes によるスケール可能な運用、CI/CD による自動デプロイ、Terraform によるインフラ管理まで、実務でよく出会う流れを一本で追える構成にしている。
この記事では、DockerfileやComposeの細かい書き方に入る前に、Dockerが何を解決するための技術なのかを整理することとする。
Dockerを一言でいうと
Dockerはざっくり言えば、「アプリが動く環境をまとめて持ち運びやすくする仕組み」である。
たとえば自分のPCでは、PythonのAPIを開発しているとき、自分の環境では以下のようなものが動いている。
- OS
- Python
- PostgreSQL
- ライブラリ群
- 環境変数
- 開発中のPythonアプリ
これを別のPCで動かそうとすると、Pythonが入っていない、バージョンが違う、必要なライブラリがない、といった問題が起きる。
WindowsとMacではまた大きく環境が違うし、チームメンバー間で環境が違う!といったことは珍しくないだろう。
Dockerでは、アプリの実行に必要な環境を「コンテナ」としてまとめ、どの環境でも一様に扱えるようにする。
これによって「自分のPCでは動くのに、別環境では動かない」という問題を減らせる。
Dockerfile → Image → Container
Dockerを理解するときに最初に覚えたいのが、以下の流れである。
Dockerfileとdocker-compose.yaml, この2ファイルがDockerを扱うときによく見るものであるが、
まずはこのDockerfileについて理解を深めるのがよかろう。
ここでのキーワードは「Dockerイメージ」と「Dockerコンテナ」である。
Dockerfileは設計図
たとえばPythonなら、次のようなDockerfileがある。
FROM python:3.13-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "app.py"]
これはざっくりと
Python 3.13 の環境を使い、コンテナ内の作業ディレクトリを /app にする。
requirements.txt をコピーして依存ライブラリを入れ、ソースコードをコピーする。
コンテナ起動時に app.py を実行する。
という手順を書いている。
Imageは実行環境のテンプレート
docker build -t my-python-app .
Dockerfileをビルドすると「Docker Image」ができる。Imageはまだ実行されていない。
Containerは実際に動いているもの
docker run my-python-app
Imageから実際に起動されたものが「Docker Container」である。同じImageから複数のContainerを起動することもできる。
Docker Composeとは
実際のWebシステムでは、フロントエンド、API、DBなど複数のContainerが必要になることがある。
これらを個別に起動するのは面倒だ。
DBは自分でbuildするではなく、配布されている既存のImageを用いるのが通常だ。
それでも、web / api / db を個別に起動するとなると毎回このようなコマンドを打つこととなる。
docker build -t my-web-app ./web
docker build -t my-api ./api
docker run --name db -d -e POSTGRES_PASSWORD=pass postgres:17
docker run --name api -d my-api
docker run --name web -d my-web-app
しかも、コンテナ同士をつなぐネットワーク設定や起動順も自分で考える必要がある。
毎回こんなの打ってられないだろう。
複数のContainer構成をまとめて扱うのが「Docker Compose」だ。
services:
web:
build: ./web
api:
build: ./api
db:
image: postgres:17
そして、
docker compose up --build
とすれば、Composeに定義した環境をまとめて起動できる。
まとめ
最初は次の対応だけ覚えておけば十分だ。
| 用語 | 意味 |
|---|---|
| Dockerfile | Imageを作るための設計図 |
| Image | Containerの元になるテンプレート |
| Container | 実際に起動している実体 |
| Docker Compose | 複数のContainer構成をまとめて管理する仕組み |
次の記事では、実務でよく見る docker compose up --build --watch を1語ずつ分解することとしよう。
次章