もっと詳しく

Dockerコンテナーは、ソフトウェアをパッケージ化してサーバーにデプロイするための一般的な方法です。 Dockerコンテナーには、移植性、分離、使いやすさなど、多くの利点があります。 ソフトウェア開発を強化したい場合は、Ansible Dockerコンテナーを使用してデプロイしてみませんか?

Ansibleは、ソフトウェアとハ​​ードウェアの構成を自動化するための強力なツールです。 また、このチュートリアルでは、Ansibleを使用してDockerコンテナーを効率的にデプロイする方法を学習します。

準備? 読み進めて、コンテナを手動でデプロイすることに頼らないでください。

前提条件

このチュートリアルは、実践的なデモンストレーションになります。 フォローしたい場合は、次のものがあることを確認してください。

  • Linuxマシン(Ansibleコントロールノード)–このチュートリアルではUbuntu 20.04を使用しますが、最新のLinuxディストリビューションであればどれでも機能します。
  • 2つ以上のマシン(Ansibleホスト)–これらのホストは、仮想マシン、物理サーバー、またはRasberryPisの場合があります。
  • SSHキーペア 制御ノードとすべての管理対象ホストの間に設定されます。

インベントリファイルの作成

コンテナーをデプロイする前に、Ansibleは管理するホストを特定する必要があります。 どのように? インベントリファイルを作成して、Ansibleが管理できるホストを宣言します。 同時に、ファイルにはそれらのホストに固有の変数または設定が含まれています。

インベントリファイルは、INIまたはYAMLの2つの形式のいずれかになります。 ただし、このチュートリアルでは、人間が読みやすいYAML形式を使用しています。 インベントリファイルには通常、 ホスト Ansibleプロジェクトディレクトリに保存されます。

を作成するには ホスト インベントリファイル:

1.コントロールホストにSSHで接続し、というファイルを作成します のホスト / etc / ansible お好みのテキストエディタを使用してディレクトリ。

/ etc / ansibleディレクトリにhostsファイルを作成するには、sudoアクセスが必要であることに注意してください。

2.次に、次の構成を最後に追加します ホスト ファイル。 この構成は、Ansibleが管理できるホストのグループを宣言します。

管理対象ホストは、「前提条件」セクションで設定したキーペアを使用してSSH経由で到達可能である必要があります。

必ず以下を置き換え、変更を保存してファイルを閉じてください。

  • server1server2 サーバーのホスト名を使用します。
  • と管理対象ホストの実際のIPアドレス。
# Group name of hosts (you can rename this as you like).
[webservers]

# List of hosts (you can name these hosts "ansible_host" as you like).
server1 ansible_host=<ip address>
server2 ansible_host=<ip address>

# Sets variables applied to all hosts.
[all:vars]
# Since the default version of Python on most Ubuntu distributions is Python 2
# set Ansible to use Python 3 on all managed hosts.
ansible_python_interpreter=/usr/bin/python3

3.以下を実行します ansible-在庫 インベントリファイルを確認するコマンド(ホスト)は正しく作成されました。

ansible-inventory --list -y 

以下に、2つのグループを示します(Webサーバー全て)、および各グループには、で宣言した適切なホストが含まれています ホスト ファイル。

インベントリファイルが存在することを確認する
インベントリファイルが存在することを確認する

4.最後に、以下のコマンドを実行します。 ping Ansibleが管理対象ホストに接続できることを確認するモジュール。

ansible all -m ping -u root

以下に示すように、Ansibleが接続できるため、管理対象ホストに到達できます。 The 成功 メッセージは、ホストが実行中であることを示します。

Ansibleが管理対象ホストに接続できることの確認
Ansibleが管理対象ホストに接続できることの確認

タスクを定義するためのプレイブックの作成

これで、作業中のインベントリファイルができました。これは、すばらしいスタートです。 しかし、プレイブックを作成しない限り、インベントリファイルは現在あまり機能していません。 管理対象ホストに基本的なDockerコンテナーをデプロイするプレイブックを作成します。 プレイブックは、管理対象ホストで実行される一連のタスクを定義するYAMLファイルです。

AnsibleとDockerは、プレイブックを使用してポータブルコンテナーにソフトウェアアプリケーションをデプロイするための柔軟で効率的な方法を提供します。 その結果、サーバーを手動で構成する際の人為的エラーが排除され、アプリケーション環境を複製できます。

と呼ばれる新しいファイルを作成します playbook.yml 好みのテキストエディタを使用して、現在の作業ディレクトリで。

次に、コードブロックをコピーして貼り付けます。 GitHub 新しく作成されたリポジトリ playbook.yml ファイル。

YMLはインデントに依存するため、コードをそのままplaybook.ymlに貼り付けるようにしてください。 ファイル。

コードが2つのセクションに分かれていることに注意してください。

  • 最初のヘッダー(---)すべてのプレイブックに必要な一般的な情報が含まれています。
  • 2番目のセクション(tasks)は、Ansibleがホストで実行する実際のタスクを作成する場所です。
プレイブックへのコードの追加
プレイブックへのコードの追加

AnsibleVaultでPlaybookを保護する

プレイブックができたので、コラボレーションのために他の人と共有することをお勧めします。 ただし、パスワードやAPIキーなどの機密情報も共有しているわけではありません。

機密情報を保護する方法は? Ansible Vaultを使用すると、プレイブックと変数を暗号化できます。 このようにして、秘密を共有することなく、プレイブックを好きなだけ共有することができます。

全体を暗号化するとします プレイブック ボールトパスワードを持っている人だけがそれを復号化、読み取り、実行できるようにファイルします。 AnsibleVaultにそのトリックを任せましょう。

1.以下を実行します ansible-vault プレイブックファイル(playbook.yml)を暗号化するコマンド。

ansible-vault encrypt playbook.yml

プロンプトが表示されたら、以下に示すように、安全なパスワード(ボールトパスワード)を入力します。 後でプレイブックファイルを復号化するために必要になるため、パスワードを安全な場所に保存します。

ハンドブックの暗号化
ハンドブックの暗号化

2.次に、catコマンドを実行して、 プレイブック ファイル。

ご覧のとおり、プレイブックファイルは暗号化されており、ファイルを復号化するためのパスワードを持っている人だけが読み取ることができます。

プレイブックファイルのヘッダーにある$ANSIBLE_VAULT;1.1; AES256文字列は、ファイルがAES256暗号を使用してAnsibleVaultで暗号化されていることを示します。 ファイルの最後にあるランダムな文字列は、暗号化されたバージョンのプレイブックです。

プレイブックファイルを表示しようとしています
プレイブックファイルを表示しようとしています

3.最後に、次のコマンドを実行して、暗号化されたプレイブック(playbook.yml)の内容を表示します。

ansible-vault view playbook.yml

プロンプトが表示されたら、ファイルの暗号化に使用したパスワードを入力すると、以下に示すように、復号化されたバージョンのファイルが表示されます。

これで、機密情報の共有を心配することなく、プレイブックファイルを適切な人と共有できます。

暗号化されたプレイブックの表示
暗号化されたプレイブックの表示

Playbookを実行してAnsibleDockerコンテナをデプロイする

必要なコンポーネントがすべて揃ったので、Playbookを実行して管理対象ホストにDockerコンテナーをデプロイする準備が整いました。 プレイブックファイル以降(playbook.yml)は暗号化されているため、追加する必要があります --ask-vault-pass ボールトのパスワードを要求するオプション。

次を実行します ansible-playbook プレイブックに対するコマンド(playbook.yml)管理対象ホストにDockerコンテナーをデプロイします。

ansible-playbook --ask-vault-pass playbook.yml

ボールトのパスワードを入力すると、Ansibleがプレイブックのタスクを実行します(playbook.yml)ホスト上にDockerコンテナを作成します。

以下に、Ansibleが両方のサーバーを次のステータスで正常に構成したことがわかります。

  • The わかった statusは、タスクが問題なく実行されたことを示します。
  • The かわった statusは、サーバー構成に変更が加えられたことを示します。<>
プレイブックの実行
プレイブックの実行
タスク出力の表示
タスク出力の表示

次に、各ホストにSSHで接続し、 docker 以下のコマンド。 このコマンドはすべてをリストします(-a)サーバー上で実行中および停止中のコンテナー。

以下に、プレイブックで指定した各ホストを実行している4つのコンテナを示します(playbook.yml)とそのコンテナ名。

デプロイされたコンテナが実行されていることを確認する

結論

このチュートリアルでは、プレイブックファイルがAnsible Vaultを使用して暗号化されていることを確認しながら、サーバーにAnsibleDockerコンテナーを効率的にデプロイする方法を学習しました。 この時点で、セキュリティを損なうことなく、Ansibleプレイブックを作成してサーバーにDockerコンテナーを独自にデプロイできるようになりました。

この新しく発見された知識を使用して、アプリケーションを次のような他のクラウドプロバイダーにデプロイしてみませんか。 アマゾンウェブサービス (AWS)と Google Cloud プラットフォーム(GCP)?

または、インベントリファイルにサーバーを追加してアプリケーションをスケールアップします(数百台のサーバーなど)。 グループ化 地域や機能ごとに?

The post AnsibleDockerコンテナを使用した効率的なデプロイ appeared first on Gamingsym Japan.