1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【IT基礎】Dockerの起動、試してみた。

Last updated at Posted at 2026-01-09

はじめに

Turbonomicには、kubernetesのリソース管理もできます!kubernetesを理解する上で必須となるDockerを理解するために、IBM Bobに作成してもらった手順書をもとに手を動かしていきたいと思います。

Dockerとは

定義:

  • アプリケーションをコンテナという単位でパッケージ化する技術
  • 「どこでも同じように動く」環境を実現

Dockerの基本概念

image.png
参考:https://docs.docker.jp/v1.12/engine/understanding-docker.html

┌─────────────────────────────────────┐
│ Docker Image(イメージ)             │
│ - アプリケーションのテンプレート      │
│ - 読み取り専用                       │
│ - Dockerfileから作成                 │
└─────────────────────────────────────┘
              ↓ docker run
┌─────────────────────────────────────┐
│ Docker Container(コンテナ)         │
│ - イメージから作成された実行環境      │
│ - 読み書き可能                       │
│ - 独立したプロセス                   │
└─────────────────────────────────────┘

DockerHostに常駐するDockerデーモンが、クライアントから「docker build」を受けるとDockerイメージをもとにDocker Containerをその都度作成すると理解しました。


ステップ1: Dockerのインストール

macOS

# Homebrewでインストール
brew install --cask docker

# または Docker Desktop をダウンロード
# https://www.docker.com/products/docker-desktop

# インストール確認
docker --version
# 出力例: Docker version 24.0.6, build ed223bc

docker-compose --version
# 出力例: Docker Compose version v2.23.0

DockerとDocker Comoposeの違い
image.png
参考:https://www.kagoya.jp/howto/cloud/container/dockercompose/
(この記事が個人的にわかりやすかったです!)

  • Dockerが、コンテナ技術の基盤となるプラットフォーム。1つのコンテナを動かすためのもの。
  • Docker Composeは、複数のコンテナを定義・管理するためのオーケストレーションツール。

ステップ2: Dockerfileの作成

2-1. Dockerfileを作成

# プロジェクトディレクトリに移動
cd /Users/hinanokawahori/projects/web-app-comparison

# Dockerfileを作成
nano Dockerfile

2-2. Dockerfileの内容

# ベースイメージを指定
FROM node:18-alpine

# 作業ディレクトリを設定
WORKDIR /app

# package.jsonとpackage-lock.jsonをコピー
COPY package*.json ./

# 依存関係をインストール
RUN npm ci --only=production

# アプリケーションのソースコードをコピー
COPY . .

# ポート3000を公開
EXPOSE 3000

# ヘルスチェック
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
  CMD node -e "require('http').get('http://localhost:3000/api/status', (r) => {process.exit(r.statusCode === 200 ? 0 : 1)})"

# アプリケーションを起動
CMD ["npm", "start"]

2-3. .dockerignoreファイルの作成

# .dockerignoreを作成
nano .dockerignore

内容:

node_modules
npm-debug.log
.git
.gitignore
.env
.DS_Store
README.md
.github

「.dockerignoreファイルとは?」とBobに質問するとこう答えてくれた。
.dockerignoreは、Dockerイメージをビルドする際に、ビルドコンテキストから除外するファイルやディレクトリを指定するファイルです。.gitignoreのDocker版と考えるとわかりやすいです。


ステップ3: Dockerイメージのビルド

# イメージをビルド
docker build -t web-app:latest .

# 出力例:
# [+] Building 15.2s (11/11) FINISHED
#  => [internal] load build definition from Dockerfile
#  => => transferring dockerfile: 456B
#  => [internal] load .dockerignore
#  => => transferring context: 123B
#  => [internal] load metadata for docker.io/library/node:18-alpine
#  => [1/5] FROM docker.io/library/node:18-alpine
#  => [internal] load build context
#  => => transferring context: 12.34kB
#  => [2/5] WORKDIR /app
#  => [3/5] COPY package*.json ./
#  => [4/5] RUN npm ci --only=production
#  => [5/5] COPY . .
#  => exporting to image
#  => => exporting layers
#  => => writing image sha256:abc123...
#  => => naming to docker.io/library/web-app:latest

# イメージを確認
docker images

# 出力例:
# REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
# web-app      latest    abc123def456   2 minutes ago   150MB

スクリーンショット 2026-01-09 10.28.48.png
スクリーンショット 2026-01-09 10.29.27.png
イメージのビルドが完了し、選択したDockerImageも確認できた!


ステップ4: Dockerコンテナの実行

# コンテナを起動
docker run -d -p 3000:3000 --name web-app-container web-app:latest

# オプションの説明:
# -d: バックグラウンドで実行
# -p 3000:3000: ホストの3000番ポートをコンテナの3000番ポートにマッピング
# --name: コンテナに名前を付ける

# 実行中のコンテナを確認
docker ps

# 出力例:
# CONTAINER ID   IMAGE            COMMAND                  CREATED         STATUS         PORTS                    NAMES
# abc123def456   web-app:latest   "docker-entrypoint.s…"   5 seconds ago   Up 4 seconds   0.0.0.0:3000->3000/tcp   web-app-container

# ブラウザでアクセス
# http://localhost:3000

スクリーンショット 2026-01-09 10.30.40.png

  • docker runの後に表示されている64文字の16進数文字列は、 コンテナの完全なID(Full Container ID)
  • docker psコマンドでは、使用しているイメージやコンテナの状態(今はhealthy)、ポートマッピング(ホストのマシンとコンテナ内のポートを紐づける仕組み)やコンテナ名がわかる。

スクリーンショット 2026-01-09 10.27.18.png
稼働できました!いえいいえい


まとめ

ここまでの一連の作業を、IBM Bobに可視化してもらいました。
テキスト図の部分は、実際にやってみた手順と同じで全体像あっていると思っています。誤りあればお教えください🙇‍♀️
Dockerファイル、DockerImageなど座学で学んだ内容のつながりや、新しい知識であるポートマッピングの理解ができました。次は、Docker Composeを使って複数Dockerを管理していきたいと思います。

アーキテクチャ図
スクリーンショット 2026-01-09 10.43.11.png

┌─────────────────────────────────────────────────────────────────────┐
│                    ホストマシン (macOS)                              │
│                    /Users/hinanokawahori/projects/web-app-comparison │
│                                                                       │
│  ┌─────────────────────────────────────────────────────────────┐   │
│  │ ローカルファイルシステム                                     │   │
│  │                                                               │   │
│  │  📁 web-app-comparison/                                      │   │
│  │    ├── 📄 Dockerfile          ← ここで作成!                │   │
│  │    ├── 📄 .dockerignore                                      │   │
│  │    ├── 📄 package.json                                       │   │
│  │    ├── 📄 server.js                                          │   │
│  │    └── 📁 node_modules/                                      │   │
│  │                                                               │   │
│  └─────────────────────────────────────────────────────────────┘   │
│                              ↓                                       │
│                    docker build -t web-app:latest .                 │
│                              ↓                                       │
│  ┌─────────────────────────────────────────────────────────────┐   │
│  │ Docker Engine (Dockerデーモン)                               │   │
│  │                                                               │   │
│  │  1️⃣ ビルドコンテキストを読み込む                            │   │
│  │     ↓                                                         │   │
│  │  2️⃣ Dockerfileの指示に従ってイメージを作成                 │   │
│  │     ↓                                                         │   │
│  │  📦 Dockerイメージ (web-app:latest)                          │   │
│  │     - ローカルのファイルがパッケージ化される                 │   │
│  │     - 読み取り専用のテンプレート                             │   │
│  │     - サイズ: 150MB                                           │   │
│  │                                                               │   │
│  └─────────────────────────────────────────────────────────────┘   │
│                              ↓                                       │
│                    docker run -d -p 3000:3000 ...                   │
│                              ↓                                       │
│  ┌─────────────────────────────────────────────────────────────┐   │
│  │ 🐳 Dockerコンテナ (web-app-container)                        │   │
│  │                                                               │   │
│  │  ┌─────────────────────────────────────────────────────┐    │   │
│  │  │ 隔離された実行環境                                   │    │   │
│  │  │                                                       │    │   │
│  │  │  📁 /app/                                            │    │   │
│  │  │    ├── 📄 package.json    ← イメージからコピー      │    │   │
│  │  │    ├── 📄 server.js       ← イメージからコピー      │    │   │
│  │  │    └── 📁 node_modules/   ← イメージからコピー      │    │   │
│  │  │                                                       │    │   │
│  │  │  🚀 Node.jsプロセス                                  │    │   │
│  │  │     ポート3000で待機中                               │    │   │
│  │  │                                                       │    │   │
│  │  └─────────────────────────────────────────────────────┘    │   │
│  │                                                               │   │
│  └─────────────────────────────────────────────────────────────┘   │
│                              ↑                                       │
│                    ポートマッピング (3000:3000)                     │
│                              ↑                                       │
│  ┌─────────────────────────────────────────────────────────────┐   │
│  │ 🌐 ブラウザ (localhost:3000)                                 │   │
│  └─────────────────────────────────────────────────────────────┘   │
│                                                                       │
└─────────────────────────────────────────────────────────────────────┘

1
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?