Docs.com へのサインインに使うメール アドレスまたは電話番号を入力してください。 Office など、Microsoft の他のサービスで既にお使いのアカウントがあれば、そのアカウントを入力してください。
アカウントを記憶する
または次の方法でサインインします:
サインインすると、コンテンツのダウンロードや「いいね!」をすることができ、作成者が認識します。
埋め込みコード: Webデザイナー/プログラマのためのDocker超入門
サイズの選択
Google CloudではじめるWebデザイナー/プログラマのためのDocker超入門ハンズオン資料です。
Google Cloud
ではじめる
Web デザイナー/プログラマのための Docker 超入門
2016/10
@_dr_asa
whoami
Shiho ASA 阿佐 志保
手芸やビーズが趣味
ものづくりが好き
好きなコマンド
asashiho
# vagrant halt # ec2-terminate-instances
# docker rmi
# kubectl delete service
my books
Windows8 開発
ポケットリファレンス
Amazon Web Services ではじめる新米プログラマのためのクラウド超入門
プログラマのための
Docker 教科書
本資料の位置づけ
Google Cloud をつかった
Webデザイナー/プログラマのための Docker超入門
Amazon Web Services をつかった
Microsoft Azure をつかった
生い立ち
ハンズオンでできること
Dockerの概要がわかる
コンテナのもとになる Dockerイメージが作成できる
Google Cloudをつかって Dockerの実行環境が構築できる
Dockerをつかった Webアプリケーションの 実行環境が構築できる
ハンズオンの対象者
Webサイト /Webアプリケーションの 開発ができる方
クラウドの概要をしっている方
簡単な Linuxコマンドがわかる方
Google Cloudアカウントをお持ちの方
事前準備
Google アカウントの登録
https://cloud.google.com/free-trial/
お使いの Googleアカウントでログインして登録します。 トライアルで 60日 /300ドルまで無償で利用できます。 なお、本ハンズオンを行うためには課金の設定が必要になります。 以下の資料( P14~ P21)を参考にして設定を行ってください。
http://goo.gl/ua5fQw http://goo.gl/ua5fQw
プロジェクトの作成
ハンズオンを行うための GCPプロジェクトを作成します。
プロジェクト名は「 docker-handson -任意の名前」としてください
プロジェクト名には「アルファベット・数値・引用符・ハイフン・スペース (全角文字不可 )で構成する」をつかってください。
また、プロジェクト IDはユニークな文字列でなければなりません。
API の有効化
プロジェクトで利用するサービスを有効化します。
ハンズオンのため、次の 3つの APIを有効にしてください
Compute Engine 仮想マシンサービス
Datastore KVS
Container Engine API コンテナフルマネージドサービス
基礎知識
Docker とは?
Docker イメージ
オンプレミスサーバ
アプリケーションの実行に必要なものを
1 つの イメージ にまとめて
任意の環境で稼働させるためのプラットフォーム
https://www.docker.com/
Google Cloud とは?
最先端の
テクノロジー
コンテナの
豊富な稼働実績
世界最大規模の
ネットワーク
高いスケーラ ビリティ
Google 社が自社で使っているインフラを
一般でも利用できるようにしたクラウドサービス
https://cloud.google.com/
ハンズオンを はじめていきましょう!
ハンズオン資料
https://goo.gl/lW3i8P
https://goo.gl/6FuPRk
ハンズオンの流れ
応用編
基本編
Docker レジストリ
Google Container Registry
3. 実行環境の構築
~仮想マシン 1台構成の場合~
2. Docker イメージ公開
実行環境
開発環境
アプリ
コンテナ
Web サイト
ビルド
Dockerfile
4. コンテナの
起動
インフラ環境
Linux
1. Docker イメージ作成
Google Compute Engine
5. 実行環境の構築
~クラスタ構成の場合~
6. コンテナの
アップデート
New!
Google Container Engine
資料のアイコンについて
資料の右上にはアイコンが表示されています。
ハンズオンを行う上で理解しておきたいことを説明
Know ledge
ハンズオン手順を説明
Hands
On
Google Cloud Shell とは
インターネットに接続された任意のコンピュータから Google Cloudを管理できる コマンドラインインターフェースです。
資料のコマンドについて
白色の字が実行するコマンドで、灰色の字が実行結果です。 また、変更/確認するところを、赤字で表しています。
実行するコマンド
確認するところ
$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
docker-sample v1.1 b47ad7165a87 About a minute 185.3 MB
docker-sample v1.0 a5fa6776c98a About a minute 185.3 MB
Debian Jessie ae85c48b369c 11 days ago 123 MB
実行結果
コマンドは、大文字小文字を区別します。 正しく動かないときは
コマンドに誤りがないかを確認してください。
now
作成する Dockerイメージの構成
ログの出力
HTML ファイル追加
Debian 8.6
80 番ポート (HTTP )の転送
サンプルのダウンロード( 1)
コマンドは、 Cloud Shellで実行しましょう。
サンプルのダウンロード( 2)
次のコマンドを実行して、 GitHub上のサンプルをクローンします。
$ git clone https://github.com/asashiho/docker-handson.git
Cloning into 'docker-handson'...
remote: Counting objects: 19, done.
remote: Compressing objects: 100% (14/14), done.
remote: Total 19 (delta 2), reused 19 (delta 2), pack-reused 0
Unpacking objects: 100% (19/19), done.
Checking connectivity... done.
clone
サンプルの構成( 1)
サンプルは、本ハンズオンに必要なファイルと 動作確認用の Webサイトの HTMLファイル( v1.0と v1.1)が含まれます。
$ ls docker-handson/
|--docker-handson
| |--deployment.yaml
| |--LICENSE
| |--README.md
| |--service.yaml
| |--v1.0
| | |--Dockerfile
| | |--html
| | | |--css
| | | | |--bootstrap.css
| | | |--images
| | | | |--bit.jpg
| | | |--index.html
v1.0 とv1.1 では bootstrap.css のみ異なります。
| |--v1.1
サンプルの構成( 2)
v1.1 のWeb サイト
v1.0 のWeb サイト
Dockerfile とは(1 )
Docker 上で動作させる コンテナの構成情報 を 記述するファイル
ベースになる Dockerイメージ
Docker コンテナ内で行った操作(コマンド)
環境変数の設定
Docker コンテナ内で動作させておくデーモン実行
Dockerfile をもとにしてコンテナのもとになる Docker イメージ を作成
Dockerfile とは(2 )
Docker
イメージ
FROM centos
RUN yum install
ADD a.html b.html
docker build コマンド イメージ作成
Dockerfile には
イメージを作成する手順が コードで書かれています
Dockerfile の書式
Dockerfile はテキスト形式のファイル
Dockerfile の基本構文
# 以降はコメント
命令 引数
# ここはコメントです
Dockerfile の作成(1 )
# Step 1: ベースイメージ取得
FROM debian:jessie
「 Dockerコンテナをどの Dockerイメージから生成するか」の情報を、必ず記述する必要があります。このイメージをベースイメージと呼びます。
この例では、 Debian8.6( jessie )をベースにして作成しています。
FROM [ イメージ名]
FROM [ イメージ名]:[ タグ名]
FROM [ イメージ名]@[ ダイジェスト]
# Step 2: 作成者情報
MAINTAINER asashiho@mail.asa.yokohama
Dockerfile の作成者を記述するときは、MAINTAINER 命令を使います。
MAINTAINER [Dockerfile の作成者]
Dockerfile の作成(2 )
# Step 3: 環境変数の設定
ENV NGINX_VERSION 1.11.5-1~jessie
Dockerfile 内で環境変数を設定したいときはENV 命令を使います。
ENV [ キー名] [ 値]
ENV [ キー名]=[ 値]
この例では、 NGINX_VERSIONという変数に「 1.11.4-1~jessie」の値を設定しています。
Dockerfile の作成(3 )
# Step 4: NGINX のインストール RUN apt-key adv --keyserver hkp://pgp.mit.edu:80 --recv-keys 573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62 \
~中略~ && rm - rf / var /lib/apt/lists/*
コンテナには FROM命令で指定したベースイメージに対して、「アプリケーション/ミドルウエアをインストール/設定する」「環境構築のためコマンドを実行する」など、なんらかのコマンドを実行するときには、 RUN命令を使います。 この RUN命令は、 Dockerfileの作成では、もっとも多く使います。
RUN 命令で指定したコマンドはDocker イメージを生成するときに実行されます。
RUN [ 実行したいコマンド]
Dockerfile の作成(4 )
# Step 5: ログの転送
RUN ln -sf /dev/stdout /var/log/nginx/access.log \
&& ln -sf /dev/stderr /var/log/nginx/error.log
コンテナで実行する Nginxのログを、仮想マシンの標準出力/標準エラー出力にリンクします。
Dockerfile の作成(5 )
# Step 6:http ポートの転送
EXPOSE 80
コンテナの公開するポート番号を指定するときは、 EXPOSE命令を使います。
EXPOSE < ポート番号>
EXPOSE 命令はDocker に実行中のコンテナがlisten しているネットワークポートを知らせます 。 またdocker run コマンドの-P オプションを使用するときに、どのポートをホストへ公開するかを定義します。
Dockerfile の作成(6 )
# Step 7:HTML のデプロイ
ADD html/ /usr/share/nginx/html/
イメージにホスト上のファイルやディレクトリを追加するときは、 ADD命令を使います。 ADD命令は次の書式で記述します。
ADD < ホストのファイルパス> <Docker イメージのファイルパス>
ADD ["< ホストのファイルパス>" "<Docker イメージのファイルパス>"]
ADD 命令は、ホスト上のファイル / ディレクトリやリモートファイルを、Docker イメージ内のファイルシステムへコピーします。 今回は、動作確認用のWeb サイトのhtml ファイル一式をコンテナにコピーします。
Cloud Shell
html ディレクトリ
/usr/share/nginx/html/ ディレクトリ
Dockerfile の作成(7 )
# Step 8:nginx の実行
CMD ["nginx", "-g", "daemon off;"]
RUN 命令はイメージを作成するために実行するコマンドを記述しますが、イメージをもとに生成したコンテナでコマンドを実行するには、CMD 命令を使います。Dockerfile には、1 つのCMD 命令を記述することができます。もし複数指定したときは、最後のコマンドのみが有効になります。 たとえば、Web サーバを稼働させるために、httpd をインストールするコマンドはRUN 命令で
インストールした httpdをデーモンとしてコンテナ内で動作させるためには CMD命令を使います。
CMD [ 実行したいコマンド]
Dockerfile の主な命令
命令
説明
FROM
ベースイメージの指定
MAINTAINER
Dockerfile の作成者情報
RUN
コマンド実行
CMD
コンテナーの実行コマンド
LABEL
ラベルを設定
EXPOSE
ポートのエクスポート
ENV
環境変数
ADD
ファイル/ディレクトリの追加
COPY
ファイルのコピー
VOLUME
ボリュームのマウント
ENTRYPOINT
USER
ユーザの指定
WORKDIR
作業ディレクトリ
ONBUILD
ビルド完了後に実行される命令
Docker イメージの作成
$ cd docker-handson/v1.0
$ docker build -t docker-sample:v1.0 .
Sending build context to Docker daemon 3.891 MB
Step 1 : FROM debian:jessie
---> ae85c48b369c
~中略~
Step 8 : CMD nginx -g daemon off;
---> Using cache
---> a5fa6776c98a
Successfully built a5fa6776c98a
Dockerfile からイメージを作成するには、docker build コマンドを使います。
docker build -t [ 生成するイメージ名]:[ タグ名] [Dockerfile の場所]
Docker イメージの確認
イメージの一覧表示は、 docker imagesコマンドを使います。
docker images [ オプション] [ リポジトリ名]
項目
REPOSITORY
Docker イメージの名前
TAG
Docker イメージタグ名
IMAGE ID
イメージ ID
CREATED
作成日
VIRTUAL SIZE
サイズ
[ やってみよう ]
v1.0 と同様の手順で v1.1 のDocker イメージを作ってみましょう
v1.1 のDocker イメージは 次のコマンドで作成できます。
$ cd ~/docker-handson/v1.1
$ docker build -t docker-sample:v1.1 .
v1.1 のイメージ作成はすぐにおわりましたね。
これは、 Dockerイメージが
レイヤー構造で管理されているためです。
イメージの内部の構造については
ハンズオン会場で詳しく説明します。
まとめ
Dockerfileをつかって インフラの構成情報が書ける
Dockerfileから Dockerイメージが 作成できる
つくったイメージを レジストリで 共有しましょう!
共有したイメージは
Google Cloud で
利用できるわ
Google Container Registry は プライベートな環境で
イメージを安全に共有できるよ
Web
サイト
Container Registry とは
Google Cloudで Dockerイメージを 管理 できる プライベートな レジストリサービス
Dockerイメージの保存場所はCloud Storage
Dockerイメージのアップロードとダウンロードができる
WebコンソールでDockerイメージを名前/タグで検索できる
https://cloud.google.com/container-registry/
プロジェクト IDの設定
Cloud Shell の環境変数「GCP_PROJECT_ID 」に プロジェクトID を設定します。
$ export GCP_PROJECT_ID=docker-handson-asa
$ echo $GCP_PROJECT_ID
docker-handson-asa
← 自分の GCPプロジェクト IDに変更
Docker イメージにタグ設定
次のコマンドで、 Dockerイメージに目印となるタグをつけます。
$ docker tag docker-sample:v1.0 gcr.io/$GCP_PROJECT_ID/docker-sample:v1.0
$ docker tag docker-sample:v1.1 gcr.io/$GCP_PROJECT_ID/docker-sample:v1.1
Google Cloud Registry に登 録するためには、次のフォーマットでタグを設定する必要があります。 gcr.id/ <GCP のプロジェクトID >/ <イメージ名>:[ タグ名]
Docker ではイメージに任意のタグを設定できますが、タグを設定してもイメージの実体は同一のものです。別名のようなものと考えておくとよいでしょう。
point
REPOSITORY TAG IMAGE ID
docker-sample v1.1 b47ad7165a87
gcr.io/docker-handson-asa/docker-sample v1.1 b47ad7165a87
Docker イメージの公開
次のコマンドで作成した Dockerイメージをレジストリに pushします。
$ gcloud docker -- push gcr.io/$GCP_PROJECT_ID/docker-sample:v1.0
Using 'push gcr.io/docker-handson-asa/docker-sample:v1.0' for IMPLEMENTATION-ARGS.
The push refers to a repository [gcr.io/docker-handson-asa/docker-sample] (len: 1)
a5fa6776c98a: Pushed
338150be6c93: Pushed
~ 中略~
2959ec362fb2: Pushed
89aec0449e93: Image already exists
v1.0: digest: sha256:783d565d21426239aead63821145ba9cac2dc8b2862f0bdc8972a60a78a7bb7f size: 14471
$ gcloud docker -- push gcr.io/$GCP_PROJECT_ID/docker-sample:v1.1
↓ 同様に v1.1も push
Docker イメージ公開の確認
次のコマンドで公開した Dockerイメージを確認します。
$ gcloud docker -- search gcr.io/$GCP_PROJECT_ID
Using 'search gcr.io/docker-handson-asa' for IMPLEMENTATION-ARGS.
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
docker-handson-asa/docker-sample 0
Web コンソールの [Container Engine] -[Container Registry] をクリックでも 確認できます
Google Container Registryの 概要がわかる
docker pushコマンドをつかって Dockerイメージの公開ができる
つぎは Google Cloudで Webサーバを 動かしていきましょう!
Google Compute Engine を使えば仮想マシンを 起動できるよ
Docker は Linux サーバで
動きます
3. Docker 実行環境の構築 ~仮想マシン1 台構成の場合~
Docker 実行環境の構成
仮想マシン( VMインスタンス)
まず、この環境を 構築します
CentOS 7
Compute Engine とは
Google Cloudで 仮想マシンを構築できるサービス
CPU /メモリ/OS などを自由に選べる
使用した時間(分単位)で課金
AWS のEC2 に相当
https://cloud.google.com/compute/
Docker Machine とは
クラウドやオンプレミス環境に Dockerの実行環境をつくるためのコマンドラインツール
Amazon EC2
Microsoft Azure
DigitalOcean
OpenStack
Microsoft Hyper-V
SoftLayer
VirtualBox
Vmware など
https://docs.docker.com/machine/
Docker 実行環境構築
次の Docker Machineコマンドで実行環境を構築します。
$ docker-machine create --driver google \
--google-project $GCP_PROJECT_ID \
--google-zone asia-east1-a \
--google-machine-type n1-standard-1 \
--google-machine-image https://www.googleapis.com/compute/v1/projects/centos-cloud/global/images/centos-7-v20160921 \
webserver
← GCPのプロジェクト IDを指定
←ゾーン (ここでは東アジア )を指定
←マシンスペックを指定
← OSのイメージを指定
←サーバ名(インスタンス名)を指定
Docker Machine は、Google Cloud のほかにもさまざまなドライバがあります。たとえば AWS やAzure などのクラウド環境や、オンプレミス環境でDocker 実行環境を構築できます。
Docker 実行環境の確認
コマンドを実行すると、 [Google Compute Engine]で 「 webserver」という名前の仮想マシン( VMインスタンス) が起動していることがわかります
仮想マシンの設定変更
作成した「 webserver」に対して、 Webアクセスを許可するため [ファイアウォール ]- [HTTPトラフィックを許可する ]にチェックを入れ [更新 ]ボタンをクリックします。
これで、外部からの HTTPリクエストを受け付けられるようになります。
4. コンテナの起動 ~仮想マシン1 台構成の場合~
コンテナの起動
構築した環境上で コンテナを 起動します
CentOS 7.2
仮想マシンへのログイン
Docker 実行環境を構築した仮想マシンにSSH でログインします。
$ cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)
↑ CentOSであることを確認
Google Cloud 利用のための設定
$ sudo gcloud components update
Your current Cloud SDK version is: 127.0.0
You will be upgraded to version: 128.0.0
┌─────────────────────────────────────────────────┐
│ These components will be updated. │
├──────────────────────────┬────────────┬─────────┤
│ Name │ Version │ Size │
├──────────────────────────┼────────────┼─────────┤
│ Cloud SDK Core Libraries │ 2016.09.23 │ 4.9 MiB │
└──────────────────────────┴────────────┴─────────┘
Do you want to continue (Y/n)? Y
〜 中略〜
Update done!
$ gcloud config set project $GCP_PROJECT_ID
Updated property [core/project].
←自分の GCPプロジェクト IDを指定
←コンポーネントのアップデート
Docker イメージのダウンロード
Google Container Registry で公開したDocker イメージを docker pull コマンドでダウンロードします。
$ sudo gcloud docker -- pull gcr.io/$GCP_PROJECT_ID/docker-sample:v1.0
v1.0: Pulling from docker-handson-asa/docker-sample
6a5a5368e0c2: Pull complete
a3ed95caeb02: Pull complete
9eca1b93bc3f: Pull complete
c28ca140ef10: Pull complete
0fad4de87094: Pull complete
Digest: sha256:783d565d21426239aead63821145ba9cac2dc8b2862f0bdc8972a60a78a7bb7f
Status: Downloaded newer image for gcr.io/docker-handson-asa/docker-sample:v1.0
$ sudo gcloud docker -- pull gcr.io/$GCP_PROJECT_ID/docker-sample:v1.1
↓ 同様に v1.1も pull
Docker イメージがダウンロードできていることを docker images コマンドで確認します。
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
gcr.io/docker-handson-asa/docker-sample v1.1 51677a04a0a9 36 minutes ago 185.2 MB
gcr.io/docker-handson-asa/docker-sample v1.0 1f85bf845e37 41 minutes ago 185.2 MB
Docker コンテナの起動
ダウンロードした Dockerイメージから Dockerコンテナを起動します。
$ sudo docker run -it -p 80:80 --rm --name webserver gcr.io/$GCP_PROJECT_ID/docker-sample:v1.0
docker run [ オプション] イメージ名[: タグ名] [ 引数]
-i, --interactive=false
コンテナの標準入力を開く
-t, --tty=false
tty (端末デバイス)をつかう
-p
[ ホストのポート番号]:[ コンテナのポート番号] ホストとコンテナのポートマッピング
--rm
コマンド実行完了後にコンテナを自動で削除
--name
コンテナの名前
Docker コンテナの動作確認
Web コンソールからWeb ブラウザで 仮想マシンにアクセスします
仮想マシンの外部 IPアドレスにアクセスするとコンテナに転送されます
Cloud Shell には コンテナのログが出力されます [Ctrl]+[c] で起動しているコンテナを停止します。
コンテナが停止すると、 Webサーバへのアクセスができなくなります。
次に v1.1の Webサイトがデプロイされた Dockerコンテナを起動します。
$ sudo docker run -it -p 80:80 --rm --name webserver gcr.io/$GCP_PROJECT_ID/docker-sample:v1.1
Web ブラウザにはv.1.1 のアプリが表示されます。
Dockerイメージから Dockerコンテナが 起動できる
Dockerをつかった Webアプリケーション の実行環境が構築できる
仮想マシンの削除
仮想マシンに構築した Docker実行環境を削除するため
Cloud Shell で次のコマンドを実行します。
$ docker-machine stop webserver
$ docker-machine rm webserver
ここからは 止まらない Webシステム を構築していきましょう!
耳慣れないツールや
コマンドがでてきますが
内容を理解していれば
それほど難しくありません
クラスタ /オーケストレーションなど
インフラの知識が必要になりますが
Google Container Engine をつかうと
かんたんに構築できます
5. Docker 実行環境の構築 ~クラスタ構成の場合~
クラスタリングとは
止まらないシステムを実現する技術
複数のサーバやハードウエアをまとめて 1台とみなす
クラスタリングで、次のシステム特性が向上
可用性(アベイラビリティ)
可用性とは、システムが継続して稼動できる能力のこと。サーバのエラーやハードウエアの故障などが発生しても、他の正常なサーバやハードウエアが肩代わりして処理を継続することで、高い信頼性を得ることができる。
拡張性(スケーラビリティ)
高負荷によるシステムダウンを避けるため、複数のコンピュータをクラスタにし、処理を分散することでより高い処理性能を得ることができる。クラウドの仮想サーバ機能の場合は、オートスケール機能が提供されていることもある。
オーケストレーションとは
システムを構成するプラットフォーム/ミドルウェア/サービス/アプリケーション/管理ツールなどの設定 や管理を自律的に連携させること
コンテナオーケストレーションツールは、コンテナの管理や監視する仕組などをそなえたツールのこと
Docker Swarm
Kubernetes
Apache Mesos など
Kubernetes とは
kubernetes (クーバーネティス)は、米Google 社を 中心とするコミュニティで開発がすすめられている オープンソースのコンテナオーケストレーションツール
複数サーバでのコンテナ統合管理
コンテナ間のネットワーク管理
コンテナに割り当てるストレージの管理
コンテナの負荷分散
コンテナの監視
無停止でのアップデート
http://kubernetes.io/
Container Engine とは
Google CloudでDocker コンテナ実行環境を 構築/管理できるフルマネージドサービス
定義した CPUやメモリなどのインフラ要件にもとづいて コンテナをクラスタに配置し、自動的に管理する
コンテナーに割り当てられるリソースや クラスタのサイズを簡単に変更できる
Kubernetes がベースになっている
https://cloud.google.com/container-engine/
構築するクラスタの構成
仮想マシン #1
( VMインスタンス)
仮想マシン #2
クラスタ
の管理
設定
ファイル
の起動
2 台の仮想マシン上で
3 つの コンテナを
稼働させます
G CE
クラスタの構築( 1)
[Container Engine] を選択し、[ コンテナクラスタを作成] ボタンを クリックします。
クラスタの構築( 2)
クラスタの名前を「 web-cluster」ゾーンを「 us-east1-c」とし [作成 ]ボタンをクリックします。
今回の設定値
名前
web-cluster
―
ゾーン
us-east1-c
マシンタイプ
vCPU×1
2
サブネットワーク
default
ログとモニタリング
チェックなし
チェックあり
その他のゾーン
クラスタ操作のための環境設定
クラスターが作成できたら、 Cloud Shellから次のコマンドを実行して環境設定を行います。
$ cd ~/docker-handson/ $ gcloud container clusters get-credentials web-cluster --zone=us-east1-c
Fetching cluster endpoint and auth data.
kubeconfig entry generated for web-cluster.
次のコマンドを実行して、クラスタ内の仮想サーバ (ノードと呼びます ) を確認します。
$ kubectl get nodes
NAME STATUS AGE
gke-web-cluster-default-pool-72efb38a-xox7 Ready 6m
gke-web-cluster-default-pool-72efb38a-zvrx Ready 6m
デプロイ設定ファイルの作成
クラスタで実行するコンテナの設定ファイルを作成します。 サンプルの deployment.yamlを、次のように修正してください。
apiVersion: extensions/v1beta1
kind: Deployment
~ 中略 ~
replicas: 3
template:
metadata:
labels:
name: web-container
spec:
containers:
- image: gcr.io/<PROJECT ID>/docker-sample:v1.0
ports:
- containerPort: 80
←クラスタ内で稼働させるコンテナの数
↓自分の GCPプロジェクト ID修正
←コンテナに転送するポート番号
作成した deployment.yamlをもとにして、次のコマンドでコンテナを起動します。
$ kubectl create -f deployment.yaml
deployment "web-container" created
次のコマンドで起動しているコンテナを確認します。 コンテナが稼働していると STATUSが Runningになります。
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
web-container-657379402-3x1jy 1/1Running 0 14s
web-container-657379402-qfut7 1/1Running 0 14s
web-container-657379402-qvldc 1/1Running 0 14s
サービス設定ファイルの作成
クラスタで実行するコンテナをサービスとして登録するための 設定ファイルを作成します。 サンプルの service.yamlを確認してください。
apiVersion: v1
kind: Service
name: web-service
- protocol: TCP
port: 80
targetPort: 80
selector:
type: LoadBalancer
←サービスの名前
←受け付けるポート番号
←ロードバランサーの設定
サービスの起動
作成した service.yamlをもとにして、次のコマンドでサービスを 起動します。
$ kubectl create -f service.yaml
service "web-service" created
次のコマンドを実行すると、サービスに割り当てられた IPアドレスを 確認できます。 web-serviceの[ EXTERNAL-IP]が外部からアクセスするときの IPアドレスになります。
$ kubectl get services
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes 10.3.240.1<none> 443/TCP 21m
web-service 10.3.251.249104.196.166.149 80/TCP 49s
動作確認( 1)
Web ブラウザからEXTERNAL-IP (例:104.196.166.149 )に
アクセスします。
動作確認( 2)
ここで仮想マシンの障害を発生させるため、 [ Conpute Engine]- [VMインスタンス ]から起動中の 1台のインスタンスをわざと停止します。
クラスタ構成のため、サービスが停止していないことが確認できます。
6. コンテナのアップデート ~クラスタ構成の場合~
コンテナのアップデート
v1.1 コンテナ
v1.0 コンテナ
コンテナの 操作
稼動中のクラスタで
コンテナのバージョンを
アップデートします
デプロイ設定ファイルの修正
クラスタで実行するコンテナの設定ファイルを修正します。 サンプルの deployment.yamlを、次のように修正して Dockerイメージのバージョンを変更します
$ kubectl edit deployment/web-container
- image: gcr.io/<PROJECT_ID>/docker-sample:v1.1
imagePullPolicy : IfNotPresent
name: webserver
protocol: TCP
↓ Dockerイメージのバージョンを v1.1に変更
アップデートの確認
次のコマンドを実行してアップデートが行われているかを確認します。
$ kubectl describe deployment/web-container
Name: web-container
Namespace: default
CreationTimestamp: Wed, 05 Oct 2016 12:50:50 +0900
Labels: name=web-container
Selector: name=web-container
Replicas:3 updated | 3 total | 3 available | 0 unavailable
StrategyType:RollingUpdate
MinReadySeconds: 0
RollingUpdateStrategy: 1 max unavailable, 1 max surge
OldReplicaSets:<none>
NewReplicaSet:web-container-738644043 (3/3 replicas created)
サービスを稼働させたまま、アップデートできているのが確認できます。
クラスタ構成のため、サービスは停止していないことが確認できます。
マルチホスト環境での Dockerコンテナ 運用の概要がわかる
Google Container Engineをつかって Dockerの実行環境が構築できる
Dockerをつかって止まらない Webアプリケーションの 実行環境が構築できる
クラスタ環境の削除( 1)
構築したクラスタのサービスとデプロイを削除するため
Cloud Shell で次のコマンドを実行します
$ kubectl delete service web-service
service "web-service" deleted
$ kubectl delete deployment web-container
deployment "web-container" deleted
クラスタ環境の削除( 2)
Web コンソールの[Container Engine ] ー [コンテナクラスタ]を
選択し、「 Web-cluster」にチェックを入れ[削除]ボタンをクリックします。
クラスタ環境の削除( 3)
最後に、作成した Dockerイメージを削除します。 Webコンソールの[ Container Engine]ー[ Container Registry]を
選択し、すべてのイメージにチェックを入れ[削除]ボタンをクリックします。
参考資料
本資料のレベル
プログラマのための Docker教科書[翔泳社]
http://www.shoeisha.co.jp/book/detail/9784798141022 http://www.shoeisha.co.jp/book/detail/9784798141022
きちんと理論を 学びたい人向け
Docker 実践入門[技術評論社]
http://gihyo.jp/book/2015/978-4-7741-7654-3 http://gihyo.jp/book/2015/978-4-7741-7654-3
より実践的な
内容
Google Container Engine で五目並べアプリのAPI サーバーを作るデモ[めもめも]
http://enakai00.hatenablog.com/entry/2016/08/10/152334 http://enakai00.hatenablog.com/entry/2016/08/10/152334
thanks!
ご清聴ありがとうございました
$ kubectl get