「Ansible」と「Docker」の違いは? 両ツール連携の仕組みは?:併用すれば多くのインフラ管理が可能に
AnsibleとDockerにはそれぞれ特定の役割がある。AnsibleのPlaybookとDockerのDockerfileを一緒に使えば、サーバの制御と構成可能性が向上する。本稿では、AnsibleとDockerの違いと、両ツールが連携する仕組みを解説する。
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.
関連記事
- クラウドネイティブをけん引してきた「Docker」10周年 前佛氏が「コンテナの価値を実感するのにちょうど良いタイミング」と断言する理由
多くの企業でITインフラやシステム開発の在り方を見直す機運が高まりつつある。急速に変化するビジネス環境に対応するためには「クラウドネイティブ」の取り組みも欠かせない。さくらインターネットの前佛雅人氏は、2023年に10周年を迎えたDockerの歩みを振り返りながら、コンテナ技術が重要な理由や、開発や運用においてDockerコンテナを利用する際のポイントを解説した。 - Docker、生成AIアプリの開発環境構築を容易にする「GenAI Stack」を発表
Dockerは「GenAI Stack」を発表した。生成AIによるアプリケーション開発に必要な開発環境が、Dockerコンテナを通じて連携可能な状態で提供されるものだ。「GenAI Stack」の概要や入手方法などを紹介する。 - Kubernetesを使ったリモート開発が容易になる? 「Telepresence for Docker」が登場
チームがKubernetes上で開発、テストする方法を簡素化し、アプリケーションを迅速に提供できるようにする「Telepresence for Docker」の提供が開始された。