はじめに
Docker / Kubernetes の開発・試験環境として手元 PC に簡易に用意できる Docker Desktop がある
ゼロ準備で Docker / Kuberenetes をスタートし、軽い動作確認までできるように、
Docker Desktop の下記方法を主にまとめる
- Docker ID 取得方法
- Docker Desktop の Windows / Mac 両 OS のインストール方法
- Windows は、WSL2, Hyper-V有効化不要でインストールする
- Kubernetes 有効化の方法
- Docker テスト実行
- Nginx コンテナを起動してブラウザアクセスする
- Docker Desktop Dashboard 操作概要
- Kubernetes テスト実行
- Nginx コンテナの Pod と外部向け Service(NodePort) を構築してブラウザアクセスする
- レプリカの手動スケールアウト、オートヒーリング
Docker Desktop
- Docker 社が提供している Desktop 環境で Docker を利用できる環境
- 無償で利用できる
- インストーラが優秀で Docker 構築がデスクトップ上に簡単に構築できる
- DockerCon EU 17 で Docker for Mac での Kubernetes サポートが発表され、ローカルマシン上でも Docker Desktop の機能有効化をするだけで、 Kubernetes が起動できるようになった (のちに Docker for Windows でも対応)
Docker for Windows
- 従来は Hyper-V が機能の有効化が必要(Pro以上の機能)だったが、WSL2 を使用することで不要でも可能になった
- Hyper-V が不要のため Home でもインストールが可能 (Home は Hyper-V 有効化利用不可)のはず
システム要件
公式サイト抜粋. WSL2 で実施の場合は Hyper-V は有効化不要.
- Windows 10 64-bit: Pro, Enterprise, or Education (Build 15063 or later).
- Hyper-V and Containers Windows features must be enabled.
- The following hardware prerequisites are required to successfully run Client Hyper-V on Windows 10:
- 64 bit processor with Second Level Address Translation (SLAT)
- 4GB system RAM
- BIOS-level hardware virtualization support must be enabled in the BIOS settings. For more information, see Virtualization.
公式ドキュメント: https://docs.docker.com/docker-for-windows/
今回は、Hyper-V不要の手順を試すため、Windows 10 を Version 2004 までアップデートする
Docker for Mac
システム要件
公式サイト抜粋. 2010年以降のモデルで、OS を Update していれば大体入れること可能.
- Mac hardware must be a 2010 or a newer model
- macOS must be version 10.13 or newer
- At least 4 GB of RAM.
- VirtualBox prior to version 4.3.30 must not be installed as it is not compatible with Docker Desktop.
公式ドキュメント: https://docs.docker.com/docker-for-mac/
実行端末スペック
Windows
- Surface Go
- OS: Windows10 Pro Version 2004
- プロセッサ: Intel Pentium Gold 4415Y (1.65GHz 2コア4スレッド)
- メモリ: 4GB
Mac
- MacBook Pro (13-inch, 2016, Four Thunderbolt 3 Ports)
- OS: macOS Catalina Version 10.15.4
- プロセッサ:3.1 GHz デュアルコアIntel Core i5
- メモリ:16 GB 2133 MHz LPDDR3
Docker Desktop インストールバージョン
インストールバージョンは 2.3.0.3(45519) (2020.05.30時点最新)
インストールステップ
- Docker アカウント作成
- Docker Desktop インストール
- Docker for Windows インストール
- Docker for Mac インストール
- Kubernetes 有効化
「1.Docker アカウントの作成」は、インストール時は使用しないが、
今後のイメージアップロードなどに備えて取得方法を記載しておく。実行したいだけならスキップ可能
インストール後に、docker と Kubernetes のテスト実行も記載する。
1. Docker アカウント作成
Docker Hub のトップページへアクセスしてアカウントを作成する
トップページ: https://hub.docker.com/
プラン選択画面になるので、無料で利用したい場合は、Free プラン Continue with Free をクリックする。
プラン選択が終わると、下記画面に遷移して、Verify メールが飛ぶ
Verify メールが登録した Email アドレスへ来るので、受信メールを確認し、Verify email address をクリックする。
下記ページが開いて Docker Hub ID 作成が完了
以上で、アカウント作成完了
2. Docker Desktop インストール
Docker Desktop のインストール方法を、OS 別に記載する
2.1. Docker for Windows インストール
Windows 10 で実施する場合は下記のステップで実行する。
- Windows 10 Update
- WSL2 有効化
- Docker Desktop for Windows をインストール
※今回は Hyper-V 不要でも対応できる方法を記載したかったので、上記方法を使用しているが、Windows 10 Pro で Hyper-V を有効化できる環境ではアップデートせずに Hyper-V 有効化してインストールも可能
2.1.1 Windows 10 Update
Windows 10 は Version 2004 (2020.05.27リリース) で、
WSL2 が正式リリースされ、Hyper-V 無しでも Linux バイナリがネイティブに動作できるようになった
Windows Update の方法は、通常の Update を利用するか、更新アシスタントを利用して実施する。
(2020.05.30時点で、バグがあったせいで OS 直接の Update が止まっていたので、更新アシスタントを使用して Update した)
すでに Version が 2004 以降であれば実施不要。
更新アシスタントは下記ページからダウンロードして実行すると、アップデート可能。
ダウンロード完了したら実行。
アップデート完了後の状態例は下記。(バージョンが2004になっている.2004以降ならOK)
2.1.2 WSL2 有効化
公式ドキュメントにインストール方法が記載されている。
管理者として PowerShell を開いて、下記の3コマンド実施,間に一度再起動すれば良い。
PowerShell を管理者として実行 (「Windows メニュー」→「Windows PowerShell」→右クリックでメニュー開き「管理者として実行」
2.1.2.1 PowerShell の起動. WSL, VirtualMachinePlatform有効化. 再起動
Windows Subsystem for Linux のインストール
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
仮想マシン プラットフォーム のオプションコンポートネント有効化
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
Windows を再起動します。
2.1.2.2 カーネル更新
x64 マシン用の最新の WSL2 Linux カーネルパッケージをダウンロードして実行する(参考)
・下記ダウンロード URL. 下記をクリックしてダウンロードして実行し、更新する。
https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi
2.1.2.3 WSL 2 をデフォルト設定
下記コマンドで、WSL のデフォルトバージョンを 2 に指定する
wsl --set-default-version 2
以上で、WSL 2 有効化完了
2.1.3 Docker for Windows のインストール
2.1.3.1 ダウンロード
Docker ID を持っていれば下記で取得も可能(チュートリアルも色々あり、この通りに実行してみるの良い)
https://hub.docker.com/?overlay=onboarding
今回は、下記で取得する (上のダウンロードと落とせるのは同じ)
https://hub.docker.com/editions/community/docker-ce-desktop-windows
2.1.3.2 インスール
2.1.3.1 でダウンロードしてきた「Docker Desktop installer.exe」を開く
Configuration が出るので、下記の通りデフォルトのチェック状態(どちらもチェック)のまま OK する
下記操作でログアウトとなるので注意
インストールが完了すると Installtion succeeded となるので、Close and log out をクリックする
ログアウトするので、ログインし直すと、Docker が起動し始めてる
Docker の起動状況は下記のように確認できる
起動完了 (Docker Desktop is running)
PowerShell で >docker version
を入力すると、docker コマンドが使え下記が表示できることが確認できる。
Docker Desktop の Dashboard は Docker アイコン右クリックから Dashboard で開ける
Dashboard が開けると下記のような画面が出る
以上で、Docker for Windows のインストール完了
2.2. Docker for Mac インストール
下記でダウンロード可能。
https://hub.docker.com/editions/community/docker-ce-desktop-mac
ダウンロードした「Docker.dmg」を起動
起動すると、下記画面が出るので、画面通りドラッグ&ドロップする。
Finder でアプリケーションを開いて、Docker を開く (Docker起動)
上記で起動すると、メニューバーに Dokcer アイコンが出て起動が確認できる
Docker アイコンをクリックすると状態やメニューが確認できる
Docker Desktop is runningとなっていれば起動完了
Docker Desktop の Dashboard は同じくメニューの Dashboard で開くことが可能
Dashboard が起動すると下記画面が出る
ターミナルソフトで docker version
を実施した例は下記の通り。(dockerコマンドが利用可能になっている)
以上で、Docker for Mac のインストール完了
3. Kubernetes 有効化 (Windows/Mac 共通)
Dashboard を開いて、右上の歯車マークから設定を開く
設定の Kubernetes 項目を選択して、Enable Kubernetes をチェックしてApply & Restart をクリックして起動する
Kubernetes が Start する。(Dashboard の下の方を見ると起動中。起動完了がわかる)
Kubernetes が有効化され、kubectl が CLI (PowerShell(Windows), Terminal(Mac)) で使えるようになっている。
下記は CLI で kubectl version
, kubectl get node
, kubectl get pod --all-namespaces
などを入力して起動していることを確認している例。
以上で、 Kubernetes 有効化完了
Docker テスト実行
Docker でのコンテナ実行例として Nginx の web サーバをコンテナ起動・操作する。
$ docker run -d -p 8080:80 --name webserver nginx
コンテナ起動での表示結果は下記. (OS にかかわらず同じ)
ブラウザにて localhost ポート 8080 でアクセスする
http://localhost:8080
Dashboard による操作
Docker Desktop の Dashboard はコンテナに対する様々な操作・確認ができる。
起動した Nginx コンテナを例に、下記に Dashboard による操作例を記載する
例で実行している webserver コンテナは下記のようにダッシュボードに表示される
対象のコンテナにマウスカーソルを合わせるとコンテナに対するメニューが出る
メニューアイコンごとに内容を記載していく
OPEN IN BROWSER
一番左の「OPEN IN BROWSER」 (コンテナが web サービスの場合) をクリックすると、
ブラウザが自動で開いてコンテナのサービスが表示される
クリックすると下記の通り自動でブラウザが開き表示される
CLI
左から2番目の CLI (>-) をクリックすると、ターミナルソフトが起動し、
コンテナ内部へアクセスできる
(コマンドで言うと、docker exec -it [container id] /bin/sh; exit
と同じ)
クリックすると下記の通り自動でターミナルが開きコンテナ内部のシェルにアクセスできる
STOP / START / RESTART / DELETE
左から3番目の STOP をクリックすると、コンテナを停止できる
停止すると下記の状態になり、START を押すことで、再度コンテナを再開できる
左から4番目の RESTART を押すと、コンテナを再起動できる
最後に、一番右の DELETE を押すと、コンテナを削除できる (Dashboard からも削除される)
削除の場合は、確認画面が表示されるので、Removeを再度クリックして削除する
Logs / Inspect / Stats
メニューアイコン以外の箇所をクリックすると、対象コンテナの詳細をみることができる
Logs をクリックするとコンテナのログを表示できる (ここでは Nginx の Web アクセスログが見えている)
Inspect をクリックするとコンテナの実行パスやバージョン、外部ポートなどを表示できる
Stats をクリックすると CPU / Memory / DISK / NETWORK (I/O) の使用率が表示できる
以上、Dashboard 操作によるコンテナの基本操作例となり、
コンテナの確認や操作などがダッシュボードでコマンド無しでもある程度管理可能なことが確認できた
Kubernetes テスト実行
Kubernetes でのアプリケーション実行例として Docker と同じく Nginx の web サーバ構築を実施する
3つのテストを実施する
- Nginx Web サーバ構築
- Nginx サーバのレプリカ数の変更
- Nginx サーバのレプリカを 1 つ削除しオートヒーリング
1. Nginx Web サーバ構築
Kubernetes はマニフェストと呼ばれる Yaml ファイルで、コードによるリソース作成・管理ができる
テストで使用する Nginx のマニフェスト (Yaml) 例を下記に記載する
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: webserver
spec:
replicas: 1
selector:
matchLabels:
app: sample-nginx
template:
metadata:
labels:
app: sample-nginx
spec:
containers:
- name: webserver
image: nginx:latest
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: sample-nodeport
spec:
type: NodePort
ports:
- name: "http-port"
protocol: "TCP"
port: 8080
targetPort: 80
nodePort: 30080
selector:
app: sample-nginx
上記ファイル (Yaml) を下記コマンド (kubectl apply -f) で実行する
> kubectl apply -f nginx-deploy-nodeport.yaml
実行すると下記のように表示される
上記も同じだが、以下からも結果は同じのため OS 別表示は省略する
ブラウザで下記 URL にアクセスすると Kubernetes で構築した Pod へ Nodeport 経由で外部からアクセスができる
※ Nodeport は作成した Kubernetes サービスに外部からアクセスする方法のひとつ
Pods の状態は kubectl get pods
,
Deployment の状態は kubectl get deployment
Service の状態は kubectl get service
,
で確認した例が下記の通り。
Pod が webserver-986476f4c-5ccsf
と言う名前が付与され Running
となっており、
Deployment は webserver
として 1/1 READY
でレプリカ数1で作成・維持されており、
Service は TYPE:NodePort
で 外部向けポートは 30080
で提供していることがわかる
最後に、作成したリソースを削除する。
削除には kubectl delete -f
で作成時ど同じ Yaml を指定すればよい
> kubectl delete -f nginx-deply-nodeport.yaml
実行すると、作成されていたリソースが削除できていることが確認できる
2. Nginx サーバのレプリカ数の変更
1で利用したマニフェストをもう一度 kubectl apply して起動する
kubectl apply -f nginx-deploy-nodeport.yaml
変更前の状態を kubectl get pod
で Pod の状態と、
kubectl get deployment
でdeployment の状態 (1/1) であることを確認する
% kubectl get pod
NAME READY STATUS RESTARTS AGE
webserver-986476f4c-gwqmz 1/1 Running 0 59m
% kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
webserver 1/1 1 1 7h27m
レプリカ数を変更する(ここでは 1 -> 3)
マニフェストの replicas: 1
を、replicas: 3
に書き換える
※下記は書き換え前の old との比較. repolicas の数だけ変更すればよい
% diff nginx-deploy-nodeport.yaml nginx-deploy-nodeport.yaml.old
7c7
< replicas: 1
---
> replicas: 3
再度 kubectl apply する
kubectl apply -f nginx-deploy-nodeport.yaml
再度事前のものと同じ確認をして、webserver-xxx
(xxxは環境により異なる) の Pod が 3つに増えたこと、
deployment が 3/3 になったことを確認できる
% kubectl get pod
NAME READY STATUS RESTARTS AGE
webserver-986476f4c-gwqmz 1/1 Running 0 60m
webserver-986476f4c-j458r 1/1 Running 0 13s
webserver-986476f4c-znlft 1/1 Running 0 13s
% kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
webserver 3/3 3 3 7h28m
下記実行状況の確認例(gif)。自動で Pod が徐々に生成され、レプリカ数が 3 に変更されたことが見える
3. Nginx サーバのレプリカを 1 つ削除しオートヒーリング
作成されている Pod を 1 つ試しに手動削除して、3/3へオートヒーリングすることを確認する
kubectl delete pod [Pod NAME]
今回のテストでは、下記コマンドで削除し、表示された例を下記に示す
% kubectl delete pod webserver-986476f4c-znlft
pod "webserver-986476f4c-znlft" deleted
kubectl get pod
, kubectl get deployment
で確認すると、
別の NAME で新規の webserver-xxx
(xxxは状況による) が作成され、3つになっていることがわかる
% kubectl get pod
NAME READY STATUS RESTARTS AGE
webserver-986476f4c-bmkfx 1/1 Running 0 47s
webserver-986476f4c-gwqmz 1/1 Running 0 67m
webserver-986476f4c-j458r 1/1 Running 0 7m17s
% kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
webserver 3/3 3 3 7h35m
下記実行状況の確認例。Pod の手動削除後、自動で別のwebserver pod が作成され、
一時的に 2/3 に減ったレプリカが 3/3 にオートヒーリングされたことがわかる
最後に、テストに使用したリソースを削除しておわりにする
kubectl delete -f nginx-deploy-nodeport.yaml
以上で、Kubernetes の Nginx を使ったテストは完了
おわりに
Docker Desktop のインストールから Docker / Kubernetes の Nginx での簡単な実行例を記載した
手元で簡単に Docker / Kubernetes 実行環境の準備ができ、開発・試験にはもってこいだと思う
複数ノードでのクラスタを組んだ環境を、手元で作成したい場合は、kubespray での kubernetes クラスタ構築メモを参照してください