検索
ニュース

「Ansible」と「Docker」の違いは? 両ツール連携の仕組みは?併用すれば多くのインフラ管理が可能に

AnsibleとDockerにはそれぞれ特定の役割がある。AnsibleのPlaybookとDockerのDockerfileを一緒に使えば、サーバの制御と構成可能性が向上する。本稿では、AnsibleとDockerの違いと、両ツールが連携する仕組みを解説する。

Share
Tweet
LINE
Hatena

 Red Hatの「Ansible」とDockerの「Docker」はいずれも、自動化によってソフトウェアのリリース速度を上げたいと考えるIT部門に広く使われているツールだ。両ツールは大きく異なるが、うまく連携して機能する。ソフトウェアのデプロイと運用に関して、両ツールはそれぞれ異なる重要なタスクを担う。

 Dockerにより、メンテナンスが容易で反復可能な方法でアプリケーションを運用できる。管理者はアプリケーションのコマンド全てを格納する「Dockerfile」を作成してから、Dockerイメージをビルドする。こうしてビルドしたイメージはほぼ全てのシステムで運用できる。

 Ansibleの自動化機能により、管理者はサーバのプロビジョニングと構成が容易になる。Ansibleは「Python」で開発されているため、ほぼ全てのPCで実行でき、依存関係への更新のインストール、ソフトウェアの構成、運用中のアプリケーションのオーケストレーションなどを実行する。

 本稿ではAnsibleとDocker、両ツールの違いと、両ツールが連携する仕組みを確認する。

DockerとDockerfileの仕組み

 Dockerは全てのクラウドプロバイダーがサポートしている。そのため、アプリケーションをクラウドにデプロイする場合に最も抵抗が少ないパスになることが多い。新しいコンテナを素早く稼働して運用できる、Dockerイメージの移植性が高い、アプリケーションの環境構成をDockerfileに変換できるといったメリットがある。

 DockerコンテナはOSを読み込まないため、数秒で運用を開始できる。同様にアプリケーションの拡張も迅速に行える。Amazon Web Services(AWS)の「AWS Fargate」、Googleの「Cloud Run」、Microsoftの「Azure Container Instances」などのDockerデプロイメントツールを使えば、多数のコンテナを簡単にスピンアップできる。Dockerコンテナはクラウドホスト型の環境でもローカル環境でも容易に構成できるため、クラウドプロバイダー間でアプリケーションを切り替えることも、オンプレミスでアプリケーションをホストすることもできる。

 Dockerイメージを操作する場合、アプリケーションのデプロイメントの情報はDockerfile内に保持される。Dockerコンテナ内でのアプリケーションの運用環境を構成するコマンドをDockerfileに記述する。Dockerfileのシンプルなコマンドの例には、「COPY」コマンドや「ENTRYPOINT」コマンドなどがある。COPYコマンドは、アプリケーションの実行可能ファイルをDockerコンテナにコピーする。ENTRYPOINTコマンドは、コンテナのメインプロセスとして実行する実行可能ファイルを指定する。

 Dockerfileで行う構成はコードとして扱われるため、バージョン管理リポジトリで管理できる。例えば、GitHubの「GitHub」では、アプリケーションのDockerfileへの全ての変更履歴が管理される。そのため、複数の開発者が協力してアプリケーションの運用環境のメンテナンスを行うことができる。

 アプリケーションコードの作成と、アプリケーションの実行や運用との間にある障壁を取り除くことを目指すDevOpsの取り組みにとっては、開発者がアプリケーションの運用環境を作成してメンテナンスできることが極めて重要になる。

AnsibleのPlaybookの実行

 Ansibleはさまざまなプロセスを自動化する。そのため、多種多様な効率向上に役立つ。開発者のPCを管理するといったITタスクにAnsibleを利用すると、開発者のPCのセットアップの作成やメンテナンスをコードで行うことができる。

 これを実現するためにAnsibleが使用するのがPlaybookだ。Playbookには複数のプレイが含まれる。プレイはAnsibleでの実行の基本単位で、タスクを繰り返し実行できるよう、変数、ロール(role)、タスクの実行順序のリストを保持する。例えば、カスタムSecure Sockets Layer(SSL)/Transport Layer Security(TLS)証明書のインストールと構成に必要な手順をプレイに含めることで、Secure Socket Shell(SSH)プロトコルでアクセスできる全てのPCでこのプレイが実行可能になる。

 Playbookによって、アプリケーションを運用するサーバのプロビジョニングも可能になる。Ansibleを使用するメリットは、Dockerと同様、構成をコードとして扱うことで、変更履歴を管理できる点にある。

AnsibleとDockerの併用

 AnsibleとDockerを併用すれば、多くのインフラの管理が可能になる。Dockerコンテナにより、アプリケーション構築の効率を向上する方法が提供される。だが、コンテナの構成、デプロイメント、オーケストレーションを処理するサービスが必要になる。こうした処理に役立つのがAnsibleだ。AnsibleのPlaybookにより、ホストPCにDockerをインストールして構成し、Dockerイメージをインストールしてそのイメージをサービスとして実行することが可能になる。

 アプリケーションのDockerランタイムのセットアップと構成を管理するメリットは、コストとカスタマイズにある。AWS Fargateなどのコンテナツールは、基本的なサーバをオンプレミスで運用するよりもコストがかかる。独自のカスタムAnsible Playbookを作成すれば、完全な構成可能性を手に入れることもできる。

 アプリケーションをクラウドで運用していないのであれば、手作業でPCやサーバをプロビジョニングするよりも、Ansibleを使う方が大きなメリットを得られる。AWS Fargateなどのクラウドベースのツールを利用することには魅力があるが、AnsibleとDockerを併用すれば、自社のアプリケーションを運用するサーバを完全に制御できるようになる。

Copyright © ITmedia, Inc. All Rights Reserved.

[an error occurred while processing this directive]
ページトップに戻る