DamienKarrus’s blog

プログラミングとクライミングの足跡

「コンテナ」の基礎 Docker入門-1

「コンテナ」とは

コンテナとはシステム上にある隔離された空間を作った時のその空間のこと。
システムとはLinuxWindowsMacOSなどで、このケースではホストOSと呼ばれる。
ホストOS上に空間を作り、その空間の中でこれから開発をしようとするシステムを動かす。
利点は、ホストOSに依存せず、全く同じイメージを構築できること。そしてチームで開発する場合は、構築した環境をリポジトリとして登録しておけばチーム内の全員が同じイメージを使用して開発できる。納品先にもコンテナを用意しておけば、イメージとして納品することも可能。

「Docker」とは

コンテナを実現する代表的なソフトにDockerがある。DockerコンテナはDocker Engineによって動作する。そしてこのDocker Engineを操作するためにDockerコマンドやDocker Composeといったインターフェイスが用意されている。
コンテナを利用するに際して、まずコンテナの元となるDockerイメージを用意する。これはDocker Hubにリポジトリとして公開されており、それを利用する。イメージは多数存在し、アプリケーション入りのイメージや、Linux単体のイメージなど数多くある。通常はLinux単体イメージを使用し、自社内で必要な作業をして、その後のイメージをプライベートなDocker Hubにアップして関係者に配布する。AWSにはAmazon ECRというプライベートなDockerレジストリサービスもある)

WindowsでDockerを使用する場合、Hyper-Vを有効にしてDocker DesktopやDocker Toolboxを使用することがDocker社から推奨されているが、Hyper-VはProにしか搭載されておらずHomeエディションでは使用できない。また、これらのツールはVirtualBoxVMwareと同居できない。そこでWSL2を使ってLinuxサブシステムを構築し、このサブシステム上でDockerエンジンを動かすのが現在最もよい方法である。WSL2はwindows10 2004以降もしくはwindows11で使用可能。旧タイプのCPUで2004にするためには「CPUのチェックをしない」というキーをレジストリに登録すれば2004にアップグレード可能である。具体的な方法はネット上に豊富にある。

「Dockerの本番運用」

コンテナを本番機で使用する場合、過負荷でも停止しないことが求められる。安定運用にはDockerホスト自体の安定稼働が必要である。AWSの場合、EC2という仮想サーバサービスがあるがこれを自分で構築するとそのホスト自体の運用管理の問題がある(手間がかかる)。そこでAmazon ECSというコンテナを運用するマネージドサービスがあって、これには負荷分散機能もあり、必要に応じてスケーリングしてくれる)。さらにクラスタサービスを利用することもできる。Kubernetes(クバネティス)というオーケストレーションソフトがあって、複数台のサーバでクラスタを構成し、負荷に応じて必要なだけコンテナを自動生成してくれる(らしい)。AWSにもAmazon EKSというKubernetes互換のマネージドサービスがある。これを利用すればかなり堅牢なシステムを構築できる。まあ、クライアントの予算次第といったところ。

 

次の記事

Amazon EC2 に docker をインストールする Docker入門-2 - DamienKarrus’s blog (hatenablog.com)