Docker

Dockerの利用方法の変化

Kubernetesを使ったBule-Green Deployment

  • 設定ファイル

    • Deployment (高可用性の担保)
      • ある機能を提供するコンテナをどんな構成でデプロイするかの指定
    • Service
      • コンテナに対するネットワークを構成するかの指定
  • Kubernetesのコンテナクラスタ管理の構造

    • マスタ
      • 巨大なリソースプール(1つのクラスタ)として管理
        • 実体は、複数のノード(コンテナホスト)
        • Deploymentの設定をすると、空いているノードを見つけて自動的にデプロイされる
        • 障害があってノードが停止すると、健全なノードで自動的に再起動してくれる
      • ロードバランサ機能で、代表IPアドレスを使って振り分け
        • どのコンテナのどのポートに対して負荷分散するかを指定する
  • Bule-Green Deployment

    • Deployment
      • 既存コンテナと新しいバージョンのコンテナを並行稼動させる
    • Service
      • 外部ユーザのアクセスを既存コンテナへ、内部テストユーザのアクセスを新しいコンテナへ振り分ける
      • テスト完了後に、外部ユーザのアクセスも新しいコンテナへ振り分ける

Dockerの基本機能

  • Dockerイメージ作成機能(Build)

    • プログラム本体, ライブラリ, ミドルウェア, OS, ネットワークの設定などを1つにまとめられる
    • 実体は、アプリ実行に必要なファイル群のディレクトリツリー
    • DockerfileにDockerイメージの構成情報を記載する
    • Dockerfileを元にビルドすると、Dockerイメージになる
    • Docker イメージは、実行環境で動くコンテナのベースになる
  • Dockerコンテナ実行機能(Run)

    • オーバーヘッドが少ないので、既に動作しているOS上でプロセスを実行するのとほぼ同じ速さ
    • Dockerは1つのLinuxカーネルを複数のコンテナで共有
    • コンテナ内で動作するプロセスを1グループとして管理するが、独立している
    • グループごとにそれぞれファイルシステム、ホスト名、ネットワークを割り当て(グループが違うと、ファイルやプロセスにアクセスできない)
  • Dockerイメージ共有機能(Ship)

コンテナ実行環境構築のフルマネージメントサービス

  • コンテナ統合管理ツールの必要性
    • Dockerをマルチホスト環境で成立したクラスタ構成で稼働させるため
    • コンテナ起動停止、ホスト間のネットワーク接続、ストレージの管理、コンテナスケジューリング、監視が必要

GCP

  • 準備
    • プロジェクト作成
      • サービスの利用、アクセス権、支払情報をまとめられる
    • アクセス権設定
      • API Manager > Library > GKE API > Enable
  • コンテナ実行環境構築
    • 構成: 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