LoginSignup
8
9

More than 3 years have passed since last update.

Docker Desktop インストール (Docker for Windows (with WSL2) / Docker for Mac), Kubernetes 有効化, Docker / Kubernetes テスト実行

Last updated at Posted at 2020-05-31

はじめに

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_for_desktop_version.png

インストールステップ

  1. Docker アカウント作成
  2. Docker Desktop インストール
    1. Docker for Windows インストール
    2. Docker for Mac インストール
  3. Kubernetes 有効化

「1.Docker アカウントの作成」は、インストール時は使用しないが、
今後のイメージアップロードなどに備えて取得方法を記載しておく。実行したいだけならスキップ可能

インストール後に、docker と Kubernetes のテスト実行も記載する。

1. Docker アカウント作成

Docker Hub のトップページへアクセスしてアカウントを作成する
トップページ: https://hub.docker.com/

下記画面の通り必要事項を入力して Sign Up する
スクリーンショット 2020-05-30 14.35.31.png

プラン選択画面になるので、無料で利用したい場合は、Free プラン Continue with Free をクリックする。
スクリーンショット 2020-05-30 14.08.22.png

プラン選択が終わると、下記画面に遷移して、Verify メールが飛ぶ

スクリーンショット 2020-05-30 14.09.47.png

Verify メールが登録した Email アドレスへ来るので、受信メールを確認し、Verify email address をクリックする。

スクリーンショット 2020-05-30 14.11.04.png

下記ページが開いて Docker Hub ID 作成が完了

スクリーンショット 2020-05-30 14.12.09.png

以上で、アカウント作成完了

2. Docker Desktop インストール

Docker Desktop のインストール方法を、OS 別に記載する

2.1. Docker for Windows インストール

Windows 10 で実施する場合は下記のステップで実行する。

  1. Windows 10 Update
  2. WSL2 有効化
  3. 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 以降であれば実施不要。

更新アシスタントは下記ページからダウンロードして実行すると、アップデート可能。

windows_update.png

ダウンロード完了したら実行。

windows_update2.png

アップデート完了後の状態例は下記。(バージョンが2004になっている.2004以降ならOK)

仕様.png

2.1.2 WSL2 有効化

公式ドキュメントにインストール方法が記載されている。
管理者として PowerShell を開いて、下記の3コマンド実施,間に一度再起動すれば良い。

PowerShell を管理者として実行 (「Windows メニュー」→「Windows PowerShell」→右クリックでメニュー開き「管理者として実行」

2.1.2.1 PowerShell の起動. WSL, VirtualMachinePlatform有効化. 再起動

PowerShell管理者として実行.png

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

windows_tutorial1___.png

今回は、下記で取得する (上のダウンロードと落とせるのは同じ)
https://hub.docker.com/editions/community/docker-ce-desktop-windows

スクリーンショット 2020-05-30 22.08.39.png

2.1.3.2 インスール

2.1.3.1 でダウンロードしてきた「Docker Desktop installer.exe」を開く

dockerforwindosinstall__.png

Configuration が出るので、下記の通りデフォルトのチェック状態(どちらもチェック)のまま OK する

dockerforwindosinstall2_.png

下記操作でログアウトとなるので注意
インストールが完了すると Installtion succeeded となるので、Close and log out をクリックする

dockerforwindosinstall3_.png

ログアウトするので、ログインし直すと、Docker が起動し始めてる
Docker の起動状況は下記のように確認できる

起動中 (Docker is starting)
dockerstating.png

起動完了 (Docker Desktop is running)
dockerrunning.png

PowerShell で >docker version を入力すると、docker コマンドが使え下記が表示できることが確認できる。

dockerversion.png

Docker Desktop の Dashboard は Docker アイコン右クリックから Dashboard で開ける

docker_dashboard__.png

Dashboard が開けると下記のような画面が出る

docker_dashboard2.png

以上で、Docker for Windows のインストール完了

2.2. Docker for Mac インストール

下記でダウンロード可能。
https://hub.docker.com/editions/community/docker-ce-desktop-mac

スクリーンショット 2020-05-30 23.26.47.png

ダウンロードした「Docker.dmg」を起動

起動すると、下記画面が出るので、画面通りドラッグ&ドロップする。

DockerForMacInstall.gif

Finder でアプリケーションを開いて、Docker を開く (Docker起動)

スクリーンショット 2020-05-31 0.04.39.png

上記で起動すると、メニューバーに Dokcer アイコンが出て起動が確認できる

スクリーンショット 2020-05-31 0.07.23.png

Docker アイコンをクリックすると状態やメニューが確認できる

スクリーンショット 2020-05-31 0.10.04.png

Docker Desktop is runningとなっていれば起動完了

Docker Desktop の Dashboard は同じくメニューの Dashboard で開くことが可能

スクリーンショット 2020-05-31 0.26.33.png

Dashboard が起動すると下記画面が出る

スクリーンショット 2020-05-31 0.29.24.png

ターミナルソフトで docker version を実施した例は下記の通り。(dockerコマンドが利用可能になっている)

スクリーンショット 2020-05-31 0.15.59.png

以上で、Docker for Mac のインストール完了

3. Kubernetes 有効化 (Windows/Mac 共通)

Dashboard を開いて、右上の歯車マークから設定を開く

docker_setting.png

設定の Kubernetes 項目を選択して、Enable Kubernetes をチェックしてApply & Restart をクリックして起動する

k8s_enable2_.png

Kubernetes が Start する。(Dashboard の下の方を見ると起動中。起動完了がわかる)

起動中 (starting)
k8s_enable3.png

起動完了 (running)
k8s_enable4_.png

Kubernetes が有効化され、kubectl が CLI (PowerShell(Windows), Terminal(Mac)) で使えるようになっている。
下記は CLI で kubectl version , kubectl get node, kubectl get pod --all-namespaces などを入力して起動していることを確認している例。

Windows PowerShell での実行例
k8s_enable_5.png

Mac Terminal での実行例
スクリーンショット 2020-05-31 0.37.10.png

以上で、 Kubernetes 有効化完了

Docker テスト実行

Docker でのコンテナ実行例として Nginx の web サーバをコンテナ起動・操作する。

$ docker run -d -p 8080:80 --name webserver nginx

コンテナ起動での表示結果は下記. (OS にかかわらず同じ)

Windows での実行例
dockerrun.png

Macでの実行例
スクリーンショット 2020-05-31 5.03.42.png

ブラウザにて localhost ポート 8080 でアクセスする
http://localhost:8080

スクリーンショット 2020-05-31 5.04.33.png

Dashboard による操作

Docker Desktop の Dashboard はコンテナに対する様々な操作・確認ができる。
起動した Nginx コンテナを例に、下記に Dashboard による操作例を記載する

例で実行している webserver コンテナは下記のようにダッシュボードに表示される

スクリーンショット 2020-05-31 6.57.12.png

対象のコンテナにマウスカーソルを合わせるとコンテナに対するメニューが出る
メニューアイコンごとに内容を記載していく

OPEN IN BROWSER

一番左の「OPEN IN BROWSER」 (コンテナが web サービスの場合) をクリックすると、
ブラウザが自動で開いてコンテナのサービスが表示される

スクリーンショット 2020-05-31 6.58.53.png

クリックすると下記の通り自動でブラウザが開き表示される

スクリーンショット 2020-05-31 5.04.33.png

CLI

左から2番目の CLI (>-) をクリックすると、ターミナルソフトが起動し、
コンテナ内部へアクセスできる
(コマンドで言うと、docker exec -it [container id] /bin/sh; exitと同じ)

スクリーンショット 2020-05-31 6.59.24.png

クリックすると下記の通り自動でターミナルが開きコンテナ内部のシェルにアクセスできる

スクリーンショット 2020-05-31 7.01.39.png

STOP / START / RESTART / DELETE

左から3番目の STOP をクリックすると、コンテナを停止できる

スクリーンショット 2020-05-31 6.59.58.png

停止すると下記の状態になり、START を押すことで、再度コンテナを再開できる

スクリーンショット 2020-05-31 7.02.14.png

左から4番目の RESTART を押すと、コンテナを再起動できる

スクリーンショット 2020-05-31 7.00.25.png

最後に、一番右の DELETE を押すと、コンテナを削除できる (Dashboard からも削除される)

スクリーンショット 2020-05-31 7.00.55.png

削除の場合は、確認画面が表示されるので、Removeを再度クリックして削除する

スクリーンショット 2020-05-31 7.02.36.png

Logs / Inspect / Stats

メニューアイコン以外の箇所をクリックすると、対象コンテナの詳細をみることができる

スクリーンショット 2020-05-31 7.22.32.png

Logs をクリックするとコンテナのログを表示できる (ここでは Nginx の Web アクセスログが見えている)
スクリーンショット 2020-05-31 7.20.35.png

Inspect をクリックするとコンテナの実行パスやバージョン、外部ポートなどを表示できる
スクリーンショット 2020-05-31 7.20.58.png

Stats をクリックすると CPU / Memory / DISK / NETWORK (I/O) の使用率が表示できる
スクリーンショット 2020-05-31 7.21.19.png

以上、Dashboard 操作によるコンテナの基本操作例となり、
コンテナの確認や操作などがダッシュボードでコマンド無しでもある程度管理可能なことが確認できた

Kubernetes テスト実行

Kubernetes でのアプリケーション実行例として Docker と同じく Nginx の web サーバ構築を実施する
3つのテストを実施する

  1. Nginx Web サーバ構築
  2. Nginx サーバのレプリカ数の変更
  3. Nginx サーバのレプリカを 1 つ削除しオートヒーリング

1. Nginx Web サーバ構築

Kubernetes はマニフェストと呼ばれる Yaml ファイルで、コードによるリソース作成・管理ができる
テストで使用する Nginx のマニフェスト (Yaml) 例を下記に記載する

nginx-deploy-nodeport.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

実行すると下記のように表示される

Windows
win_kubectl_apply.png

Mac
スクリーンショット 2020-05-31 7.57.28.png

上記も同じだが、以下からも結果は同じのため OS 別表示は省略する

ブラウザで下記 URL にアクセスすると Kubernetes で構築した Pod へ Nodeport 経由で外部からアクセスができる
※ Nodeport は作成した Kubernetes サービスに外部からアクセスする方法のひとつ

スクリーンショット 2020-05-31 7.48.02.png

Pods の状態は kubectl get pods,
Deployment の状態は kubectl get deployment
Service の状態は kubectl get service,
で確認した例が下記の通り。

スクリーンショット 2020-05-31 7.51.26.png

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

スクリーンショット 2020-05-31 7.56.42.png

実行すると、作成されていたリソースが削除できていることが確認できる

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 に変更されたことが見える

repolica_test.gif

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 にオートヒーリングされたことがわかる

delete_tests.gif

最後に、テストに使用したリソースを削除しておわりにする

kubectl delete -f nginx-deploy-nodeport.yaml

以上で、Kubernetes の Nginx を使ったテストは完了

おわりに

Docker Desktop のインストールから Docker / Kubernetes の Nginx での簡単な実行例を記載した

手元で簡単に Docker / Kubernetes 実行環境の準備ができ、開発・試験にはもってこいだと思う

複数ノードでのクラスタを組んだ環境を、手元で作成したい場合は、kubespray での kubernetes クラスタ構築メモを参照してください

8
9
0

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
8
9