Dockerの活用 Docker導入前の準備

機械学習技術 人工知能技術 自然言語処理技術 セマンティックウェブ技術 オントロジー技術 検索技術 データベース技術 アルゴリズム デジタルトランスフォーメーション技術 Visualization & UX ワークフロー&サービス ITインフラ技術 DevOpsについて 本ブログのナビ

サマリー

Docker実践ガイドより。 前回はDockerの概要について述べた。今回はDocker導入前の準備として、Docker導入前のチェック事項、どのDockerエディションを使うか、OSの選択、Dockerデスクトップについて述べる。

検討項目の洗い出し

Dockerを導入する上で、検討しなければいけない項目としては、まず「そもそもDockerが自社に必要なのか?」というものとなる。Dockerは、コンテナを管理するための様々な機能を提供しているが、既存の仮想環境などと比べて、メリットとデメリットを把握しておく必要がある。

たとえば、多くのハイパーバイザー型の仮想化ソフトウェアでは、ライブマイグレーションの機能を提供しており、ゲストOSを稼働させたまま、別の物理マシンに移動させることが可能だが、Dockerにおいては、ライブマイグレーションの機能が標準で提供されていないため、稼働中のコンテナを別のマシンに移動できない。

また、Dockerコンテナの高可用性を考える場合には、HAクラスタのサポート状況がまだ不明確なため、Dockerコンテナによってプロセス関しのためのHAクラスタを構成したとしても、共有ディスクの論理ボリュームの切り替えをどのようにして行うのか、といった課題も残る。もちろんDockerにおける高可用性に向けて、様々な実証実験や研究が行われている(下図)

具体的な事例としてはCRIUプロジェクト、非有ディスクを持たない「DRBD+Corosync+Pacemaker」でのHAクラスタ構成Docker SwamMeososphere社が提供するMeososphere DC/OSの負荷分散機能、KubernetesKeepalivedLinux Virtual Server(LVS)の組み合わせなどが挙げられる。ただ、現時点ではベストプラクティスが得られているわけではない。

Dockerを稼働させるOSの選択条件

Dockerは、誰もが無償で入手できるオープンソースソフトウェアだが、稼働するOS環境によって、不具合に対するベンダーの対応可否、ユーザーの使い勝手、管理工数や手間、手法などが異なる。

コミュニティ版か商用サポートか

OSの選択条件の一つは、コミュニティ版のサーバーOSで稼働するDockerと商用Linuxで稼働するDockerの違いとなる。コミュニティ版の無償提供されるDockerエンジンのことを「コミュニティ版のDocker」と呼ぶが、このコミュニティ版のDockerが稼働するOSとしては、Fedora、CentOS、Ubuntu Serverなどが挙げられる。当然、コミュニティ版のサーバーOSは、ベンダーの保守サポートを受けることができない。その上で稼働するコミュニティ版のDockerもベンダーの保守サポートを受けることができない。障害発生時に、Docker自体に問題があるのか、サーバーOSに問題があるのかなどの切り分け作業をユーザー自身が行う必要がある。

一方、商用LinuxであるRed Hat Enterprise Linux(以下RHEL)やSUSE Linux Enterprise Server(以下SLES)でも、Dockerを稼働できる。Dockerの保守サポートを重視する場合には、この点に注意が必要となる。

RHELやSLESなどの商用Linuxで稼働する商用のDockerエンジンについては、そのサブスクリプション契約の範囲でOSとDockerエンジンに関する保守サポートが受けられる。例えば、ハードウェア、ドライバや監視エージェント類、ミドルウェア、そしてDockerの問題の切り分け作業をベンダーに依頼できる。Dockerに関するある程度の技術面でのサポートが必要となる場合は、ベンダーサポートが受けられる商用Linuxで稼働するDockerの導入を検討すべきである。特にDockerのような更新が頻繁に行われる先進的なソフトウェアを本番システムに導入する場合、動作の安定性や機能的な側面だけではなく、Docker自体の不具合や障害発生時の回避策、解決策の情報入手の容易さが、システムの安定稼働において重要な意味を持つ。

Dockerの導入検討する場合の主なチェックポイントとしては以下のようなものがある。

  • そもそもDockerが必要なのか
  • 既存の仮想環境における課題は何か
  • 既存の仮想環境をコンテナ環境に置き換えることが可能か
  • Dockerを適用する際の最大の障害は何か
  • 既存のシステムのどの部分にDockerを適用するのか
  • 物理環境の高可用性に関するSLA(Service Level Agreement)をDcokerでも実現できるか

またDocker導入決定後のサーバーOS選定における主なチェックポイントとしては以下のものがある。

  • Dockerを稼働さらるOS環境は、コミュニティ版のLinux OSで良いのか?商用版のLinux OSにすべきか?
  • コミュニティ版OSにする場合、どのディストリビューションを採用するのか?
  • 商用Linuxの場合、どのディストリビューションを採用するのか?
  • OEMベンダーからOSとDockerの保守サポートを同時に受けられるか?
  • OEMベンダーからの保守サポートが受けられない場合、問題切り分けを自社で行えるか?
コンテナ専用OSの現状を把握する

もう一つの選択要件は、通常のサーバーOSで稼働するDockerと、Docker向けに開発された専用OSでの管理の違いとなる。ここでは、Dockerなどのコンテナ利用に特化して開発された専用OSのことをコンテナ専用OSと呼ぶ。このコンテナ専用OSは、汎用のCentOSやRHELで稼働させるDockerと異なり、コンテナを稼働させることに目的を絞ったアプライアンスOSとなる。そのため、専用OS自体の管理方法も、CentOSなどの一般的なLinuxOSとは異なる。

コンテナ専用OSは、アプリケーションや稼働するデーモン、パッケージ管理マネージャなどが削られており、コンテナの稼働に必要最低限のコンポーネントで構成されている。コンテナ専用OSでは、コンテナに無関係なデーモンやアプリケーションなどが稼働することを極力排除しているため、一般的なサーバーOSに比べてより強固なセキュリティ、性能面での優位性、高い保守性を確保できるとされている。

コンテナ専用OSとして有名なものとして、CoreOS(Container Linux)、Atomic HostRancherOSSnappy Ubuntu Coreなどがある。

  • Project Atomic : Project Atomicは、コンテナの配備や管理などを効率化したDocker専用OSの発展を目指すコミュニティベースのプロジェクトとなる。Project Atomicでは、主に2つのDocker専用OSの開発が行われており、Fedoraベースの「Fedora Atomic Host」とContOSベースの「CentOS Atomic Host」がある。無償で入手することができ、Docker専用OSを体験できる。
  • Red Hat Enterprise Linux Atomic Host : 商用製品としては、RedHat社がリリースしている「Red Hat Enterprise Linux Atomic Host」がある。RHEL Atomic Hostは、project Atomicの成果物を商用化しつつも、管理ツールなどを搭載した製品となる。
  • Snappy Ubuntu Core : Canonical社が提供するSnappy Ubuntu Coreも、Dockerのようなコンテナの利用を目的とした軽量OSであり、Project Atomicと同様、必要最低限のコンポーネントで構成されている。
  • CoreOS(Container Linux) : CoreOSは、Dockerやそれとよく似たrktと呼ばれるコンテナランタイムに最適化された軽量OSであり、従来のLinuxOSとは異なる管理手法を採用しているのが特徴となる。WebブラウザベースのGUI管理ツールを導入することで、マウス操作によりコンテナの管理を行うことができる。
  • RancherOS : RancherOSは、1025年にRancher Labsにより発表されたコンテナ専用OSとなる。Dockerエンジンが稼働し、必要最低限の機能に絞る人により、OSのサイズも非常にコンパクトとなる。CoreOSと同様に、独自の構成ファイルによってOS自体の設定を行うのが特徴となる。CoreOS、AtomicHostと同様にインストール用のISOイメージが提供され、GUI管理画面が標準で提供されており、コンテナのオーケストレーションソフトウェアであるKubernetesがすぐに利用できるのもこの製品の特徴となる。
サーバーOS vs コンテナ専用OS

サーバーOSおよびコンテナ専用OSの採用に関する主なチェックポイントを以下に示す。

  • 使い慣れたLinuxサーバーOSからコンテナ専用のアプライアンスの利用に切り替えてもよいか?
  • ホストOS上で、サードパーティ製のアプリケーションを稼働させる必要があるか?
  • OSとDockerのインストールに際し、手順書や人員のスキルセットを確保しているか?
  • サーバーOSの管理は、従来と同様の手法が必要か?新たな管理手法でも問題がないか?
  • Dockerコンテナは、GUIによる管理が必要か?
  • 外部ストレージの利用はあるか?
  • ハードウェアベンダーやミドルウェアベンダーが提供する監視エージェント類は必要か?
Dockerのエディション

現在、Dockerエンジンには、大きく分けて2種類存在する。一つは無償版のDockerエンジンであり、もう一つは有償版のDockerエンジンとなる。無償版のDockerエンジンは、Docket Community Edition(Docker CE)と呼ばれ、有償版の製品はDocker Enterprise Edition(Docker EE)と呼ばれる。

Docker CE

Docker CEは、主に開発者やDockerのアプリケーションを小規模に試すといった場合に適したエディションとなる。コミュニティによってメンテナンスされておりDocker社の純正製品の提供を行うOEMベンダーの保守サポートは受けられない。Docker CEは安定版のStableチャネル、テスト用のTestチャネル、最新機能が搭載されているNightlyチャネルに分かれる。

Docker CEは、必要に応じて約1ケ月ごとにバッチがリリースされ、6ケ月毎に安定版がリリースされる。Docker CEでは、すべてのチャネルのバイナリパッケージをdownload.docker.coから無償で手に入れることができる。

Docker EE

Docker EEは、大規模なエンタープライズにおける開発や、厳しいセキュリティ要件が必要とされるシステム向けのエディションとなり、Docker社の保守サポートが受けられるものとなる。Docker EEにおいて、Dockerエンジンのみは「Docker Engine Enterprise」と呼ばれる。またDocker Engine Enterproseに加えて、GUI管理、Dockerイメージ管理、ユーザー管理、セキュリティスキャンなどの機能を付加したものは「Docker Enterprise」と呼ばれる。

Docker EEは、Windowsサーバー、サーバー用Linux OS、オンプレミス、またはクラウド城で稼働し、コンテナオーケストレーション機能としてKubernetesとSwarmの2つを搭載している。

Docker EEとDocker CEの違いを以下に示す。

デスクトップ向けDocker

Docker DesktopはDocker社が提供しているソフトウェアでオープンソースソフトウェアであるDockerをWindowsやMacOSにおいて簡単にインストールし利用できるアプリケーションとなる。

DockerはLinuxで動くものなので、LinuxではないWindowsやMacOSではこういったアプリケーションが必要になる。よって、WindowsやMacOSを利用している開発者のほとんどはこのDocker Desktopを今まで利用してきた。(Docker Desktop以外にも仮想マシンとしてLinuxを動かし、その中でDockerを動かすという方法がある)

このDocker デスクトップは2021年9月よりスモールビジネス、教育機関、個人、非商用の使用を除いて有料となった。これはあくまでDockerをWindowsやMacOSで動かすための「Docker Desktop」が有料化されただけで、Dockerそのものは無料で使えるものとなる。

有料化および2022年10月27日の価格変更について企業について必要な対応を以下にまとめる。

  • 従業員数250人以上もしくは年間売上1000万ドル(約15億円)以上の企業がDocker Desktopを商用利用するには、Proプラン以上に加入しなければいけない
  • 利用人数が100名を超える場合はTeam Planは利用できず、Business Planを利用しなければならない(Pro Planが利用できるのかどうかは不明)

ここで言う商用利用とは”製品やサービスが商業的な利益のために使用される活動のことを指します。この利益とは、金銭的なもの、名誉に関わるもの、その他のもので、最終的にはユーザーの商業活動に利益をもたらすものです “となる。

つまり営利企業において業務上こういったツールを利用する場合は厳密に言えば全て「商用利用」にあたると考えて良い。利用規約によると、Docker Desktopをダウンロードした時点で利用規約に同意したことになり、支払いが遅延した場合は月々1.5%の延滞利息が発生すると記載されている。

基本的には、Docker Desktopを使わずにDockerによる開発を行う必要がある。そのための方法としては①Linuxを使う(UbuntuなどのLinuxであれば、Docker Desktopが無くても簡単に無料でDockerを使うことができる)、②VMwareやVirtualBox、Parallels、Hyper-Vといった仮想化ツールでLinuxを動かし、その中でDockerを使う、③WSL(Windows Subsystem for Linux)を使う、等のアプローチがある。

上記のような状況を踏まえた上で、以下にDockerデスクトップの利用について述べる。

M1 macにDockerデスクトップをダウンロードする手順は以下のようになる。

  • 以下のページより、Docker Desktop for Macをダウンロード
  • M1チップかIntelチップか聞かれる画面が出るのでApple chipを選択
  • ダウンロードしたDocker.imgをダブルクリック
  • Dockerアイコンをアプリケーションフォルダにドラッグ
  • アプリケーションフォルダのDocker.appを起動
  • 警告が表示されるが、「開く」を選択
  • アクセス権限を与える必要があり、OKボタンを押してパスワードを入力
  • Dockerの規約画面が表示される。確認し、問題なければ「Accept」ボタンをクリック
  • Dockerが正常に起動すると以下の画面が表示される

  • ターミナルを起動し”docker ps”と入力して”CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES”と表示されれば正常に動作している。
  • スタート画面に表示されているコンテナを起動”docker run -d -p 80:80 docker/getting-started”しばらく待つとコンテナがダウンロードされて起動する
  • ブラウザを起動して”localhost:80″を開くと以下の画面となる。これはコンテナ上のサーバーのページにアクセスしていることになる。

  • dockerデスクトップの画面を見ると、作成したコンテナ一覧が見える(現在は1つのみ)

  • 停止するには、このdockerデスクトップで該当コンテナを選び”stop”のボタンを押すと停止できる。

コメント

タイトルとURLをコピーしました