Docker
Dockerの利用方法の変化
- 最初は、プログラマが自分専用の開発・テスト環境を用意するため
- 昔はインフラエンジニアが手順書通りに環境設定していた
- 小さなチームで開発するアプリケーションの場合は、Dockerで必要なライブラリがインストールしてある環境をコンテナイメージに固めておけば楽
- 実サービスでコンテナ利用をする
- 各環境での環境差異を防ぐ
- dockerコマンドで、コンテナイメージをデプロイするだけでOK
- 参照: Dockerによるコンテナ化アプリケーションの運用設計ガイド(パート1) | RED HAT OPENEYE
サービス環境への展開を楽にする
- サービスの停止時間をできるだけ短くしたい
- 問題があったときに、すぐに切り戻したい
- Kudernetes などのオーケストレーションツールを使う(Bule-Green deployment)
- マイクロサービスアーキテクチャを使って、影響範囲を狭める
- 参照: Google Container Engineで五目並べアプリのAPIサーバーを作るデモ - めもめも
3大メリット
- プログラマが自分専用の開発・テスト環境を簡単に用意するため
- 各環境での環境差異を防ぐため
- 継続的デリバリの実現
Kubernetesを使ったBule-Green Deployment
設定ファイル
- Deployment (高可用性の担保)
- ある機能を提供するコンテナをどんな構成でデプロイするかの指定
- Service
- コンテナに対するネットワークを構成するかの指定
- Deployment (高可用性の担保)
Kubernetesのコンテナクラスタ管理の構造
Bule-Green Deployment
- Deployment
- 既存コンテナと新しいバージョンのコンテナを並行稼動させる
- Service
- 外部ユーザのアクセスを既存コンテナへ、内部テストユーザのアクセスを新しいコンテナへ振り分ける
- テスト完了後に、外部ユーザのアクセスも新しいコンテナへ振り分ける
- Deployment
Dockerの基本機能
Dockerイメージ作成機能(Build)
- プログラム本体, ライブラリ, ミドルウェア, OS, ネットワークの設定などを1つにまとめられる
- 実体は、アプリ実行に必要なファイル群のディレクトリツリー
- DockerfileにDockerイメージの構成情報を記載する
- Dockerfileを元にビルドすると、Dockerイメージになる
- Docker イメージは、実行環境で動くコンテナのベースになる
Dockerコンテナ実行機能(Run)
Dockerイメージ共有機能(Ship)
コンテナ実行環境構築のフルマネージメントサービス
- コンテナ統合管理ツールの必要性
- Dockerをマルチホスト環境で成立したクラスタ構成で稼働させるため
- コンテナ起動停止、ホスト間のネットワーク接続、ストレージの管理、コンテナスケジューリング、監視が必要
GCP
- 準備
- コンテナ実行環境構築
- 構成: 2 Node
- Console menu > Container Engine > Make Container cluster: 2
- 無停止バージョンアップ
- KubernetesのRolling Update機能を使用
アプリデプロイの流れ
- Dockerfile作成
- Cloud shellを起動して、コードを取得
- Dockerコンテナの元になるDockerイメージを指定(FROM命令)
- 作成者情報(MAINTAINER命令)
- コマンド実行(RUN命令)
- ポート関数(EXPOSE命令)
- デプロイ(ADD命令)
- サーバ起動(CMD命令)
- Dockerイメージビルド
docker build
でDockerfileからイメージ作成(verタグを付ける)docker images
で作成済みのイメージが確認できる
- Dockerイメージの公開
- Dockerイメージにタグを付ける
- タグがついたら、Google Container Registryにアップロードできる (gcloudコマンド)
- Console menu > Container Engine > Container Registryで確認
- GKEから利用できる状態になった!
- 初めてのDeploy
- Cloud shellで認証情報取得(gcloud get-credentials)
- デプロイ構成情報ファイル(deployment.yaml)の作成、デプロイ先指定
- コンテナデプロイ設定ファイル (
kubectl create -f deployment.yaml
) - コンテナに外部からアクセスするためのサービス定義ファイル(
kubectl create -f service.yaml
) - EXTERNAL-IP にアクセスして確認する
- 二回目のDeploy
- イメージ作成、レジストリアップロード
- Rolling Udpate機能でバージョンアップ
- クラスタの停止、削除
kubectl delete service web-service
-> GLBの設定も破棄kubectl delete deployment web-container
- Console menue > Container Engine > Container cluster > Delete Docker image