この記事では、同じ Ubuntu 24.04 コンテナを 2つのやり方 で立ち上げる例を通して、Docker の基本を整理します。
- case01 …
Dockerfileだけを使う方法 - case02 …
Dockerfile+docker-compose.ymlを使う方法
どちらも「Ubuntu を1つ起動する」という目的は同じですが、コマンドの書き方と運用のしやすさ が異なります。
目次
- 前提条件と Docker Desktop のインストール
- Docker の3つの用語
- case01 と case02 の比較図
- case01:Dockerfile で立ち上げる
- case02:Docker Compose で立ち上げる
- コマンドの違い一覧
- どちらを使えばいい?
- よくある操作
- トラブルシュート
- まとめ
前提条件と Docker Desktop のインストール
必要な環境
| 項目 | 要件 |
|---|---|
| OS | Windows 10/11(64bit)、macOS、Linux |
| メモリ | 4GB 以上(8GB 推奨) |
| 仮想化 | BIOS で有効化されていること(Windows の場合) |
| 権限 | 管理者権限でインストール可能であること |
本記事のコマンド例は Windows(PowerShell) を前提にしています。
Docker Desktop のインストール手順(Windows)
- Docker Desktop 公式サイト からインストーラーをダウンロード
- インストーラーを実行し、画面の指示に従ってインストール
- インストール後、Docker Desktop を起動
- タスクバーにクジラのアイコンが表示され、「Running」になれば準備完了
Docker Desktop のインストール手順(macOS / Linux)
macOS および Linux でも、同じ Docker Desktop 公式サイト から OS 向けのインストーラーをダウンロードしてインストールします。macOS は .dmg を開いて Applications にドラッグ、Linux(Ubuntu など)は .deb または .rpm をパッケージマネージャーでインストールするのが一般的です。インストール後に Docker Desktop(または Linux では systemctl --user start docker-desktop)を起動し、メニューバーやタスクトレイのアイコンが「Running」になれば準備完了です。以降の docker / docker compose コマンドはターミナル(bash / zsh など)で同様に使えますが、本記事のパス表記(c:\AdTechCode\Docker\...)は macOS / Linux では /path/to/Docker/case01 のように読み替えてください。
動作確認
PowerShell で次を実行します。
docker --versiondocker compose version次のように表示されれば OK です。
Docker version 28.x.x, build xxxxxDocker Compose version v2.x.xさらに、Docker デーモンが動いているか確認します。
docker infoエラーなく情報が表示されれば、case01・case02 の作業を始められます。
この記事で使うディレクトリ構成
c:\AdTechCode\Docker\├── README.md ← この記事├── case01\│ └── Dockerfile└── case02\ ├── Dockerfile └── docker-compose.ymlDocker の3つの用語
まず最低限押さえておきたい用語です。
| 用語 | 説明 |
|---|---|
| イメージ | コンテナの設計図。OS やアプリ、設定がパッケージ化されたもの |
| コンテナ | イメージから実際に起動した実行環境 |
| Dockerfile | イメージを作るための手順書 |
イメージ → コンテナの流れ
%%{init: {'theme': 'base', 'themeVariables': {'lineColor': '#000000', 'primaryBorderColor': '#333333'}}}%%flowchart LR A["Dockerfile(手順書)"] -->|docker build| B["イメージ(設計図)"] B -->|docker run| C["コンテナ(実行環境)"] C -->|docker exec| D["コンテナ内でコマンド実行"] C -->|docker stop| E["停止"] E -->|docker start| C linkStyle default stroke:#000000,stroke-width:4pxテキストで表すと次のとおりです。
Dockerfile → docker build → イメージ → docker run → コンテナポイント: イメージは「金型」、コンテナは「金型から作った実物」と考えると分かりやすいです。1つのイメージから、複数のコンテナを起動することもできます。
case01 と case02 の比較図
どちらも同じ Ubuntu コンテナを起動しますが、操作の入口 が異なります。
%%{init: {'theme': 'base', 'themeVariables': {'lineColor': '#000000', 'primaryBorderColor': '#333333'}}}%%flowchart TB subgraph case01["case01(Dockerfile のみ)"] direction TB D1[Dockerfile] --> B1[docker build] B1 --> I1["イメージ(case01-ubuntu)"] I1 --> R1[docker run] R1 --> C1["コンテナ(case01)"] end subgraph case02["case02(Docker Compose)"] direction TB D2[Dockerfile] --> Y2[docker-compose.yml] Y2 --> U2[docker compose up] U2 --> I2["イメージ(case02-ubuntu)"] U2 --> C2["コンテナ(case02)"] end style case01 fill:#e8f4fd style case02 fill:#fdf4e8 linkStyle default stroke:#000000,stroke-width:4px| 比較項目 | case01 | case02 |
|---|---|---|
| 設定ファイル | Dockerfile のみ |
Dockerfile + docker-compose.yml |
| ビルド | docker build を手動実行 |
docker compose up --build で自動 |
| 起動 | docker run を手動実行 |
docker compose up で自動 |
| 向いている用途 | 基本の学習・単一コンテナ | 複数コンテナ・チーム開発 |
case01:Dockerfile で立ち上げる
ディレクトリ構成
Docker/└── case01/ └── DockerfileDockerfile の内容
FROM ubuntu:24.04RUN apt-get update && \ apt-get install -y --no-install-recommends \ ca-certificates \ curl \ vim \ && rm -rf /var/lib/apt/lists/*CMD ["sleep", "infinity"]各行の意味
| 行 | 内容 |
|---|---|
FROM ubuntu:24.04 |
ベースイメージとして Ubuntu 24.04 を使う |
RUN apt-get ... |
コンテナ内に curl や vim などをインストール |
rm -rf /var/lib/apt/lists/* |
キャッシュを削除してイメージサイズを小さくする |
CMD ["sleep", "infinity"] |
コンテナを終了させずに起動し続ける |
起動コマンド
# イメージをビルドdocker build -t case01-ubuntu c:\AdTechCode\Docker\case01# コンテナを起動docker run -d --name case01 --restart unless-stopped case01-ubuntuコマンドの意味
docker build -t case01-ubuntu… イメージを作成し、名前をcase01-ubuntuにするdocker run -d… バックグラウンドで起動--name case01… コンテナ名をcase01にする--restart unless-stopped… PC 再起動後も自動で立ち上がる
case01 の特徴
- シンプル。Dockerfile 1つで完結する
- Docker コマンドを 直接 叩くので、内部の動きが分かりやすい
- コンテナが1つのときに向いている
case02:Docker Compose で立ち上げる
ディレクトリ構成
Docker/└── case02/ ├── Dockerfile └── docker-compose.ymlDockerfile の中身は case01 と同じです。違いは 起動の仕方を docker-compose.yml に書く 点です。
docker-compose.yml の内容
services: ubuntu: build: . image: case02-ubuntu container_name: case02 restart: unless-stopped各項目の意味
| 項目 | 内容 |
|---|---|
services |
起動するコンテナの一覧 |
ubuntu |
サービス名(任意の名前) |
build: . |
カレントディレクトリの Dockerfile からビルド |
image: case02-ubuntu |
作成するイメージ名 |
container_name: case02 |
コンテナ名 |
restart: unless-stopped |
自動再起動の設定 |
起動コマンド
方法A:-f でファイルを指定(どのディレクトリからでも実行可能)
docker compose -f c:\AdTechCode\Docker\case02\docker-compose.yml up -d --build方法B:ディレクトリに移動して実行(-f 不要・おすすめ)
cd c:\AdTechCode\Docker\case02docker compose up -d --builddocker-compose.yml があるディレクトリに移動すれば、-f オプションは不要です。
日常的には 方法B の方がコマンドが短くて覚えやすいです。
--build を付けると、起動前にイメージをビルドします。docker build と docker run を 1コマンドにまとめられる のが Compose の利点です。
case02 の特徴
- 設定を YAML ファイルにまとめられる
- 複数コンテナやポート、ボリュームの追加がしやすい
up/downで一式をまとめて操作できる
コマンドの違い一覧
同じ操作を case01 と case02 で比較します。
起動
| 操作 | case01 | case02 |
|---|---|---|
| ビルド+起動 | docker build → docker run |
docker compose up -d --build |
# case01docker build -t case01-ubuntu c:\AdTechCode\Docker\case01docker run -d --name case01 --restart unless-stopped case01-ubuntu# case02(方法A:-f 指定)docker compose -f c:\AdTechCode\Docker\case02\docker-compose.yml up -d --build# case02(方法B:ディレクトリ移動・おすすめ)cd c:\AdTechCode\Docker\case02docker compose up -d --build停止
| 操作 | case01 | case02 |
|---|---|---|
| 停止 | docker stop case01 |
docker compose down |
# case01docker stop case01# case02(方法A)docker compose -f c:\AdTechCode\Docker\case02\docker-compose.yml down# case02(方法B)cd c:\AdTechCode\Docker\case02docker compose down再起動
# case01docker start case01# case02(方法B)cd c:\AdTechCode\Docker\case02docker compose up -d状態確認
# case01docker ps --filter name=case01# case02(方法B)cd c:\AdTechCode\Docker\case02docker compose psコンテナに入る(共通)
どちらも同じコマンドです。
docker exec -it case01 bashdocker exec -it case02 bashどちらを使えばいい?
case01(Dockerfile のみ)が向いている場面
- Docker の基本を学びたいとき
- コンテナが 1つだけ のとき
- 設定がシンプルで、ファイルを増やしたくないとき
case02(Docker Compose)が向いている場面
- Web サーバー + DB のように 複数コンテナ を動かすとき
- ポート公開やボリュームマウントを設定ファイルで管理したいとき
- チームで同じ環境を再現したいとき
今回の case02 について
現状の case02 はコンテナが1つだけなので、機能的には case01 とほぼ同じ です。
Compose を使う必然性はまだ薄いですが、「Compose の書き方を覚える練習」としては有効です。
よくある操作
コンテナ内の OS バージョンを確認
docker exec case01 cat /etc/os-releasedocker exec case02 cat /etc/os-releaseどちらも Ubuntu 24.04.4 LTS と表示されます。
イメージ一覧を確認
docker imagescase01-ubuntu と case02-ubuntu が表示されます。
コンテナを削除する
# case01docker stop case01docker rm case01# case02cd c:\AdTechCode\Docker\case02docker compose downイメージも含めて削除する(case02)
cd c:\AdTechCode\Docker\case02docker compose down --rmi localトラブルシュート
よく遭遇するエラーと対処法です。
docker daemon is not running / Cannot connect to the Docker daemon
原因: Docker Desktop が起動していない。
対処:
- タスクバーの Docker アイコンを確認
- Docker Desktop を起動する
- ステータスが「Running」になるまで待つ(1〜2分かかることあり)
- 再度コマンドを実行
# 起動確認docker infoWindows で手動起動する場合:
Start-Process "C:\Program Files\Docker\Docker\Docker Desktop.exe"open //./pipe/dockerDesktopLinuxEngine: The system cannot find the file specified
原因: 上記と同様。Docker Desktop のエンジンがまだ準備できていない。
対処:
- Docker Desktop を完全に終了して再起動
- WSL2 バックエンドを使っている場合は WSL も確認
wsl --statuswsl --shutdown# その後 Docker Desktop を再起動Conflict. The container name "/case01" is already in use
原因: 同じ名前のコンテナがすでに存在する。
対処:
# 既存コンテナの状態を確認docker ps -a --filter name=case01# 停止して削除docker stop case01docker rm case01# 再度起動docker run -d --name case01 --restart unless-stopped case01-ubuntuport is already allocated
原因: 指定したポートが他のプロセスやコンテナに使われている。
対処:
# ポートを使っているコンテナを確認docker ps# 該当コンテナを停止するか、別のポート番号を指定docker compose コマンドが見つからない
原因: 古い docker-compose(ハイフン付き)と新しい docker compose(スペース区切り)の違い。
対処:
# 新しい形式(推奨)docker compose version# 古い形式が入っている場合docker-compose versionDocker Desktop の最新版では docker compose(スペース区切り)が標準です。
ビルドが遅い・ネットワークエラーになる
原因: 初回ビルド時に Ubuntu イメージやパッケージをダウンロードするため。
対処:
- インターネット接続を確認
- 社内プロキシ環境の場合は Docker Desktop の Proxy 設定を確認
- 2回目以降はキャッシュが効くため高速になる
# ビルドキャッシュを活用して再ビルドdocker build -t case01-ubuntu c:\AdTechCode\Docker\case01まとめ
| case01 | case02 | |
|---|---|---|
| 構成 | Dockerfile のみ |
Dockerfile + docker-compose.yml |
| 起動 | docker build + docker run |
docker compose up |
| 学べること | Docker の基本操作 | Compose による設定の一元管理 |
| 向いている規模 | 単一コンテナ | 複数コンテナ・本番に近い構成 |
case01 で Docker の仕組みを理解し、case02 で Compose による運用の楽さを体験する、という流れがおすすめです。
次のステップとしては、case02 にポート公開(-p 8080:80 相当)やボリュームマウントを追加して、Compose の真価を試してみると理解が深まります。