Power Unit Inc. | 想像力のない者に翼はない | Amazon ECS & ECR
17405
page-template,page-template-full_width,page-template-full_width-php,page,page-id-17405,qode-quick-links-1.0,woocommerce-no-js,ajax_fade,page_not_loaded,,side_area_uncovered_from_content,columns-4,qode-theme-ver-16.8,qode-theme-bridge,qode_header_in_grid,wpb-js-composer js-comp-ver-5.5.2,vc_responsive
 

Amazon ECS & ECR

Amazon EC2 Container Service (Amazon ECS)

Amazon EC2 Container Registry (Amazon ECR)

Amazon EC2 インスタンスを実行できる非常にスケーラブルかつ高性能な Docker コンテナ管理サービス

Amazon EC2 Container を司る Docker って何者?

Amazon Web Servies (AWS) において Docker は非常に重要なキーテクノロジーです。Amazon Elastic Compute Cloud (Amazon EC2) のコンピューティングインスタンス(アプリケーション)は Amazon EC2 Container Service の上で動作し、Amazon EC2 Container Registry によって完全に管理されます。

Docker はコンピューティングインスタンス(アプリケーション)をソフトウェアコンテナ内へ自動的に構築・デプロイメント・実行する機能を提供します。もともと Docker は Linux のコンテナ LXC(libcontainer と呼ばれるコンテナ技術と特殊なファイルシステム aufs を基盤にしています)として誕生しました。従来の VMware や Microsoft Hyper-V のようにホスト OS の上部に仮想的なハードウェア層を提供して、さらにゲスト OS をインストールするような、完全に仮想化を行うハイパーバイザー型製品と比べて、ディスク使用量は少なく、インスタンス作成や起動は速く、性能劣化がほとんどないという利点を持っています。非常に軽量なコンテナをベースとするアプリケーション群をホスト OS の上に仮想的に完全に分離した環境で動作するようにしたものであり、クラウドサービスの基盤として最適なテクノロジーの一つといえます。

現在、Docker は Linux でしかサポートされていませんが、Microsoft Windows Server 2016 では Docker をサポートします。Microsoft Visual Studio で開発したアプリケーション群を Microsoft Azure が提供する軽量コンテナで動作できるようになるほか、Microsoft の既存のサーバー製品群をクラウド上で展開できるようになります。

また、逆に今後は AWS で VMware の仮想マシンを動作することが発表されているので、 AWS をパブリッククラウドだけではなく従来のオンプレミスなプライベートクラウドと共存することもできるようになります。

Docker の特徴は、アプリケーションの実行環境を外部から完全に隔離しパッケージングした状態で構築・デプロイ・実行を管理できることでしょう。コマンドラインから Docker API を実行するだけで、アプリケーションを容易にコンテナにデプロイし実行することができます。パッケージングされたアプリケーションイメージは Docker Hub と呼ばれるレジストリーで管理され、必要な時に必要なアプリケーションを取り出してきて、コンテナに自動的にデプロイ・実行できるのです。

高性能なアプリケーションの開発・実行環境の提供だけでなく、それらの OS やアプリケーションを世界中で共有し、IT システムがある目的を達成するために必要な工程を自動化するサービスを提供する点が革新的と言えます。

Docker の意外な特徴は、新しい独自の技術はほとんど使っていないということがあります。コンテナー管理に必要となる既存の OSS(オープンソースソフトウェア)を組み合わせて、コマンドラインおよび REST API で手軽かつ効率良くコンテナーの管理ができるようになっていることが、Docker が広く支持され、注目されている理由だと考えられます。

Docker (Linux 版)は、コンテナーでアプリケーションを実行するために以下の機能を持ちます。

  • コンピューターリソースの隔離および制限 … Linux Namespaces(隔離), Linux cgroups(制限)
  • 他のホスト、他のコンテナーとのネットワークの構成 … Linux iptables(ネットワーク構成)
  • ファイル/ディレクトリの世代と差分の管理 … AUFS/Device Mapper Thin Provisioning(差分ファイルシステム)

Docker を使用することで、アプリケーション開発者とインフラ管理者の双方が協調する “DevOps” (Development:開発、Operation:運用)のためのツールとしてさまざまなメリットがあります。すでに紹介した通り Docker の特徴は、アプリケーションの実行環境を外部から完全に隔離しパッケージングされた状態で構築・デプロイ・実行を管理できることです。この特徴は、DevOps にも当てはまります。

Docker はコンテナーの構成を全て “Dockerfile” というテキストファイルに記述できるため、”Infrastructure as Code(インフラ構成を GitHub などのコードリポジトリ)で管理するツールとして機能します。

従来は開発と運用が分離されていて、アプリケーション開発者は最初のバージョンのアプリケーションを構築します。インフラ管理者は、開発者が構築したアプリケーションをデプロイ・実行します。アプリケーションのアップデートが必要になった時は、開発者はテスト環境でアプリケーションを構築します。その後、インフラ管理者は、一旦、アプリケーションを停止して、アップデートされたアプリケーションで置き換え起動します。アプリケーションのバージョンは開発者サイドでコードのリポジトリとして管理します。

Docker では、アプリケーションインスタンスの実行環境を外部から完全に隔離された状態でイメージとしてレジストリーもしくはハブと呼ばれる機能で管理できるため、クラウド基盤のコンテナ技術のように新しいアプリケーションインスタンスを簡単にデプロイ・実行できる環境では、既存のアプリケーションは起動したままで、別のコンテナに新しいアプリケーションを構築・デプロイ・実行できます。さらに、アプリケーションがクラスタ構成の場合、ロードバランサーの処理の振り分けをコントロールするだけで、新旧のアプリケーションをあたかも無停止で置き換えることもできます。

アプリケーションのバージョンアップで障害が発生すれば、ロードバランサーの設定を元に戻すだけで復元できます。問題なければ、古い方のアプリケーションインスタンスのイメージはリポジトリーにすでに登録されているので、いつでも廃棄することができます。アプリケーションのバージョン管理は Docker が自動的に行います。