概要
次の記事では、Ansibleを使用してDockerにWordPressをデプロイする方法について説明します。この手順の目的は、Ansibleプレイブックを使用してDockerでのWordPressのデプロイプロセスを自動化することです。
ansibleを使用してWordPressをDockerにデプロイするには、最初に構成する必要のある要件がいくつかあります(前提条件に以下にリストされています)
前提条件
- Dockerがターゲットホストマシンにインストールされて実行されている(DockerのインストールはAnsibleで自動化することもできます– POSTへのリンク)
- Ansiblehostsファイルに事前設定されたログインパラメータを使用してリモートホストでSSHアクセスを有効にする
- Ansibleがクライアントマシン(お使いのマシン)にインストールされています
- ターゲットマシンにAnsible用のPythonおよびPythondockerモジュールをインストールしました
- ローカルマシンにPythonをインストールしました
Ansible用のPythonDockerモジュールをインストールする
ほとんどのLinuxディストリビューションにはPython3がプリインストールされていますが、他のディストリビューションでは、Ansibleが使用するPythonDockerモジュールが欠落している可能性があります。モジュールが見つからないか見つからないというエラーが表示された場合にわかります。以下のエラーの画像例:
上記のモジュールは、実際にはPythonがDockerと連携するために使用するDockerSDKです。 Python Dockerモジュールをインストールする最も簡単な方法は、「pip」ツールを使用することです。 「pip」ツールがない場合は、簡単にインストールしてから、PythonDockerモジュールをインストールできます。
Debian/Ubuntu sudo apt install python3-pip Fedora sudo dnf install python3-pip CentOS/RedHat sudo yum python3-pip
pipをインストールしたら、コマンドを実行してdockermoduleをインストールします。
pip3 install docker
万が一、AnsibleでPythonモジュールが見つからないというエラーが発生した場合は、hostsファイルにpythonインタープリター変数を追加してください。ほとんどの場合、「/ usr / bin/python3」のいずれかにあります。 または「/usr/ lib /python3」 。
エラーは次のようになります:
hostsファイルのインタプリタ変数は次のようになります。
ansible_python_interpreter=/usr/bin/python3
ログインパラメータを使用してhostsファイルにhostsを書き留めます
最初のステップ– Ansibleがマシンに到達し、ログインして対話できるように、hostsファイルに必要なパラメーターを追加します。
sudo nano /etc/ansible/hosts
hostsファイルで、次のようなパラメータを追加します。
リモートホストに必要なパラメータを追加したら、ファイルを保存して終了します。
DockerにWordPressをデプロイするためのAnsibleプレイブック
この導入では、次のプレイブックを使用します。
--- - hosts: docker vars: db_volume: mariadb wordpress: wordpress tasks: - name: Deploy MariaDB server docker_container: image: mariadb name: mariadb volumes: - "{{db_volume}}:/var/lib/mysql" env: MYSQL_ROOT_PASSWORD: somerootpassword MYSQL_PASSWORD: somemysqlpassword MYSQL_DATABASE: db MYSQL_USER: mysqluser - name: Deploy WordPress docker_container: image: wordpress name: wordpress restart_policy: always ports: - "8080:80" links: - "{{db_volume}}:/var/lib/mysql" volumes: - "{{wordpress}}:/var/www/html" env: MYSQL_PASSWORD: somemysqlpassword MYSQL_DATABASE: db MYSQL_USER: mysqluser MYSQL_HOST: mariadb
コピーしてください。
プレイブックの内訳:
hosts: docker // variable to target only machine hosts that are in the docker group
vars: db_volume: mariadb wordpress: wordpress // [OPTIONAL] defined variables for each container. These are used for setting volumes on the host and are matching the container names.
tasks: // Defined a task which will deploy a MariaDB container(MariaDB database server in container form). Task will pull down the official Docker image of MariaDB from the Docker hub, set a name container name "mariadb" and set a persistent volume on the host machine for the database storage. - name: Deploy MariaDB server // Task name docker_container: // Docker function that Ansible will use image: mariadb // Docker image to pull down name: mariadb // Specify the container name volumes: - "{{db_volume}}:/var/lib/mysql" // Specify a volume on the host machine for persistent storage
env: // Environment variables to define parameters for the database such as the root password, admin user password, name of the database and the user name of the new user on the MariaDB server MYSQL_ROOT_PASSWORD: somerootpassword // MySQL root password MYSQL_PASSWORD: somemysqlpassword // MySQL admin/standard user password to be used by WordPress MYSQL_DATABASE: db // MySQL database name MYSQL_USER: mysqluser // Admin/standard user username for WordPress to use
// This the task that will deploy the WordPress Docker container. Same just like for the MariaDB container, Ansible will pull down the official WordPress image from the Docker hub. Here we also specified the container restart policy(when to restart the container) and also set number of ports to expose on the container and bind to the host, so that the container can be accessible via browser and http protocol. - name: Deploy WordPress // Task name docker_container: // Docker function that Ansible will use image: wordpress // Docker image to pull down name: wordpress // Specify the container name restart_policy: always // Set attribute for container restart ports: - "8080:80" // Specify ports to expose on the container to be accessible via web browser links: - "{{db_volume}}:/var/lib/mysql // Variable to specify the link to the MySQL server so that WordPress can connect to the database volumes: - "{{wordpress}}:/var/www/html" // Specify a volume on the host machine for persistent storage
// Environment variables for the MariaDB database, for WordPress to use in order to connect to the database and use the database for data storage. env: MYSQL_PASSWORD: somemysqlpassword // Variable to specify MySQL for WordPress to use MYSQL_DATABASE: db // MySQL database name which will WordPress connect to MYSQL_USER: mysqluser // MySQL user for WordPress to use MYSQL_HOST: mariadb // MySQL database server to connect to(docker container name we previously set)
Ansibleを使用してDockerにWordPressをデプロイする
Ansibleプレイブックを入手したら、プレイブックを実行します:
docker deploy-wordpress.yml -l docker
期待される結果:
コンテナが実行されているかどうか、およびブラウザからWordPressにアクセスできるかどうかを確認します。
概要
記事を要約すると、Ansibleを使用してDockerにWordPressを正常にデプロイでき、それによってDockerにWordPressをデプロイするプロセスが自動化されました。ただし、このプロセスを成功させるには、PythonおよびPythonDockerモジュールを使用してセットアップするためにAnsible環境が必要でした。その後、WordPressをデータベースとともにデプロイし、データとファイルがDockerコンテナー内に保存されないようにデータを永続化する、Ansibleプレイブックを作成して実行しました。
お時間をいただきありがとうございます…