DevOps

Dockerでコンテナを起動する方法

10
  • Docker

この記事では、同じ Ubuntu 24.04 コンテナを 2つのやり方 で立ち上げる例を通して、Docker の基本を整理します。

  • case01Dockerfile だけを使う方法
  • case02Dockerfile + docker-compose.yml を使う方法

どちらも「Ubuntu を1つ起動する」という目的は同じですが、コマンドの書き方と運用のしやすさ が異なります。


目次

  1. 前提条件と Docker Desktop のインストール
  2. Docker の3つの用語
  3. case01 と case02 の比較図
  4. case01:Dockerfile で立ち上げる
  5. case02:Docker Compose で立ち上げる
  6. コマンドの違い一覧
  7. どちらを使えばいい?
  8. よくある操作
  9. トラブルシュート
  10. まとめ

前提条件と Docker Desktop のインストール

必要な環境

項目 要件
OS Windows 10/11(64bit)、macOS、Linux
メモリ 4GB 以上(8GB 推奨)
仮想化 BIOS で有効化されていること(Windows の場合)
権限 管理者権限でインストール可能であること

本記事のコマンド例は Windows(PowerShell) を前提にしています。

Docker Desktop のインストール手順(Windows)

  1. Docker Desktop 公式サイト からインストーラーをダウンロード
  2. インストーラーを実行し、画面の指示に従ってインストール
  3. インストール後、Docker Desktop を起動
  4. タスクバーにクジラのアイコンが表示され、「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.yml

Docker の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/    └── Dockerfile

Dockerfile の内容

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 ... コンテナ内に curlvim などをインストール
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.yml

Dockerfile の中身は 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 --build

docker-compose.yml があるディレクトリに移動すれば、-f オプションは不要です。
日常的には 方法B の方がコマンドが短くて覚えやすいです。

--build を付けると、起動前にイメージをビルドします。
docker builddocker run1コマンドにまとめられる のが Compose の利点です。

case02 の特徴

  • 設定を YAML ファイルにまとめられる
  • 複数コンテナやポート、ボリュームの追加がしやすい
  • up / down で一式をまとめて操作できる

コマンドの違い一覧

同じ操作を case01 と case02 で比較します。

起動

操作 case01 case02
ビルド+起動 docker builddocker 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 images

case01-ubuntucase02-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 が起動していない。

対処:

  1. タスクバーの Docker アイコンを確認
  2. Docker Desktop を起動する
  3. ステータスが「Running」になるまで待つ(1〜2分かかることあり)
  4. 再度コマンドを実行
# 起動確認docker info

Windows で手動起動する場合:

Start-Process "C:\Program Files\Docker\Docker\Docker Desktop.exe"

open //./pipe/dockerDesktopLinuxEngine: The system cannot find the file specified

原因: 上記と同様。Docker Desktop のエンジンがまだ準備できていない。

対処:

  1. Docker Desktop を完全に終了して再起動
  2. 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-ubuntu

port is already allocated

原因: 指定したポートが他のプロセスやコンテナに使われている。

対処:

# ポートを使っているコンテナを確認docker ps# 該当コンテナを停止するか、別のポート番号を指定

docker compose コマンドが見つからない

原因: 古い docker-compose(ハイフン付き)と新しい docker compose(スペース区切り)の違い。

対処:

# 新しい形式(推奨)docker compose version# 古い形式が入っている場合docker-compose version

Docker Desktop の最新版では docker compose(スペース区切り)が標準です。


ビルドが遅い・ネットワークエラーになる

原因: 初回ビルド時に Ubuntu イメージやパッケージをダウンロードするため。

対処:

  1. インターネット接続を確認
  2. 社内プロキシ環境の場合は Docker Desktop の Proxy 設定を確認
  3. 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 の真価を試してみると理解が深まります。

シェア