これは ZOZO Advent Calendar 2025 カレンダー Vol.9 の 12日目の記事です
はじめに
「Kubernetesって難しそう...」と思っていませんか?
実は、Docker Desktopがあれば、ローカル環境で簡単にKubernetesを試すことができます。
この記事では、クラスタの作成から、Kubernetes環境に作成したWebサーバーからリクエストが返ってくるところまでを、ステップバイステップで解説します。
検証環境
| 項目 | バージョン |
|---|---|
| Mac | Apple M1 Pro |
| Docker Desktop | 4.54.0 |
| Kubernetes | v1.32.8 |
| kubectl | v1.34.1 |
事前準備
- Docker Desktopがインストールされていること
- ターミナルが使えること
用語解説
本記事で登場するKubernetes用語を簡単に説明します。
| 用語 | 説明 |
|---|---|
| クラスタ (Cluster) | Kubernetesが動作するサーバー群のこと。今回はDocker Desktop上に1台構成で作成します |
| ノード (Node) | クラスタを構成する個々のサーバー。コンテナが実際に動く場所です |
| Namespace | クラスタ内でリソースを論理的に分離する仕組み。プロジェクトや環境ごとに分けて管理できます |
| Pod | Kubernetesでコンテナを動かす最小単位。1つ以上のコンテナをまとめたものです |
| Deployment | Podの作成・更新・削除を管理するリソース。「nginxを1台動かして」という宣言ができます |
| Service | Podへのアクセス方法を定義するリソース。Podは起動するたびにIPが変わるため、Serviceで固定のアクセス先を提供します |
| NodePort | Serviceの公開方法の1つ。ノードの特定ポートを開放して外部からアクセス可能にします |
| マニフェスト | Kubernetesリソースの設定をYAML形式で記述したファイル。「こういう状態にしてほしい」という宣言です |
Step 1: Kubernetesクラスタを作成する
1-1. Docker Desktopの設定を開く
Docker Desktopを起動し、左メニューから Kubernetes を選択します。

1-2. クラスタを作成する
「Create cluster」 ボタンをクリックします。
設定はお好みですが、ローカルでの環境なのでそこまでスペックはいらないかなと思い最小構成にしてます:
-
kindで作成 - ノード数: シングル(1台)
- Kubernetesバージョン: v1.32系の最新版(色々なバージョン指定できるのでお好みでどうぞ)
kindの詳しい説明はこちら
参考:https://kind.sigs.k8s.io/
1-3. クラスタの起動を待つ
クラスタが立ち上がるのを待ちます。
クラスタが作成されるとGUI上でもクラスタの情報が確認できるようになります!

1-4. クラスタへの接続を確認する
ターミナルで以下のコマンドを実行します:
# クラスタ情報を確認
kubectl cluster-info
出力例:
Kubernetes control plane is running at https://127.0.0.1:6443
CoreDNS is running at https://127.0.0.1:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
# ノードの状態を確認
kubectl get nodes
出力例:
NAME STATUS ROLES AGE VERSION
desktop-control-plane Ready control-plane 1m v1.32.8
「Ready」と表示されていれば、Kubernetesクラスタのセットアップは完了です!
Step 2: Namespaceを作成する
Kubernetesでは、リソースを論理的に分離するために Namespace を使います。今回は advent-demo という名前のNamespaceを作成します。
# Namespaceを作成
kubectl create namespace advent-demo
# 作成されたことを確認
kubectl get namespaces
出力例:
NAME STATUS AGE
advent-demo Active 5s
default Active 5m
kube-node-lease Active 5m
kube-public Active 5m
kube-system Active 5m
advent-demo が表示されていればOKです!
作成したNamespaceはDocker Desktopでも確認できます。
Step 3: Webサーバー(nginx)をデプロイする
3-1. Deployment用のマニフェストを作成
まず、nginxを動かすためのDeploymentマニフェストを作成します。
nginx-deployment.yaml というファイルを作成し、以下の内容を記述します:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
namespace: advent-demo
labels:
app: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.25
ports:
- containerPort: 80
3-2. Deploymentを適用する
# マニフェストを適用
kubectl apply -f nginx-deployment.yaml
# Podの状態を確認
kubectl get pods -n advent-demo
出力例:
NAME READY STATUS RESTARTS AGE
nginx-deployment-55d67f7b54-ccwmc 1/1 Running 0 35s
STATUSが Running になれば、nginxが起動しています!
Step 4: Serviceを作成してアクセスできるようにする
Podは直接外部からアクセスできないため、Service を作成してアクセス可能にします。
4-1. Service用のマニフェストを作成
nginx-service.yaml というファイルを作成します:
apiVersion: v1
kind: Service
metadata:
name: nginx-service
namespace: advent-demo
spec:
type: ClusterIP
selector:
app: nginx
ports:
- port: 80
targetPort: 80
4-2. Serviceを適用する
# マニフェストを適用
kubectl apply -f nginx-service.yaml
# Serviceの状態を確認
kubectl get services -n advent-demo
出力例:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-service ClusterIP XX.XX.XXX.XXX <none> 80:30080/TCP 10s
CLUSTER-IPは各々の環境のIPが入ります
※ Serviceが作成されるたびにKubernetesが自動的に割り当てるので、環境ごとに異なります。

Step 5: WEBサーバーへアクセスしてみよう!
ローカルからServiceにアクセスするために、kubectl port-forward を使います。
# ポートフォワードを開始(フォアグラウンドで実行される)
kubectl port-forward -n advent-demo svc/nginx-service 8080:80
出力例:
Forwarding from 127.0.0.1:8080 -> 80
Forwarding from [::1]:8080 -> 80
コマンドラインから確認
curl http://localhost:30080
出力例:
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
...
</html>
まとめ
この記事では、以下の手順でDocker Desktop上にKubernetes環境を構築しました:
- クラスタ作成: Docker DesktopのKubernetes機能を有効化
-
Namespace作成:
advent-demoNamespaceを作成 - Deploymentデプロイ: nginxコンテナをPodとして起動
- Serviceでの公開: NodePortでローカルからアクセス可能に
Kubernetes入門として、今回は最もシンプルな構成を紹介しました。
ローカルでサクッとKubernetesを動かしてみたい時に本記事を参考にいただけると嬉しいです!
Happy Kubernetes Life!







