Ubuntu 14.04でDocker Composeを使用してWordpressとPhpMyAdminをインストールする方法

前書き

Docker Composeは、Dockerコンテナのオーケストレーションプロセス(たとえば、起動、シャットダウン、コンテナ内のリンクとボリュームの設定など)が非常に簡単です。

この記事では、Docker Composeを使用してアプリケーション(この場合は追加のPHPMyAdminを使用したWordPress)をインストールする実際の例を示します。 WordPressは通常、LAMPスタックで実行されます。これは、Linux、Apache、MySQL / MariaDB、およびPHPを意味します。 公式のWordPress DockerイメージにはApacheとPHPが含まれているため、心配する必要があるのはMariaDBだけです。

前提条件

この記事を読むには、次のものが必要です。

  • Ubuntu 14.04ドロップレット

  • sudo特権を持つ非ルートユーザー(https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-14-04[Ubuntu 14.04での初期サーバーセットアップ]は、このセットアップ方法を説明しています。 )

  • https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-compose-on-ubuntu-14-04 [インストール方法と使用方法]の手順からインストールされたDockerおよびDocker Compose Ubuntu 14.04でのDocker Compose]

ステップ1-WordPressのインストール

公式のhttps://hub.docker.com//wordpress/[WordPress]およびhttps://hub.docker.com//mariadb/[MariaDB] Dockerイメージを使用します。 興味がある場合は、GitHubおよびDocker Hubの各ページにこれらの画像とその構成オプションに関する詳細情報があります。

まず、データを格納するフォルダーを作成し、WordPressコンテナーを実行するための最小限の `+ docker-compose.yml +`ファイルを作成します。

mkdir ~/wordpress && cd $_

次に、お気に入りのテキストエディタで `+〜/ wordpress / docker-compose.yml +`を作成します(好みがなければナノは簡単です)。

nano ~/wordpress/docker-compose.yml

そして、以下を貼り付けます:

〜/ wordpress / docker-compose.yml

wordpress:
 image: wordpress

これは、Docker Composeに「+ wordpress 」という新しいコンテナを開始し、Docker Hubから「 wordpress +」イメージをダウンロードするよう指示するだけです。

次のように画像を表示できます。

docker-compose up

Dockerがダウンロードされ、Docker HubからWordPressイメージが抽出されます。しばらくすると、次のようなエラーメッセージが表示されます。

Outputwordpress_1 | error: missing WORDPRESS_DB_HOST and MYSQL_PORT_3306_TCP environment variables
wordpress_1 |   Did you forget to --link some_mysql_container:mysql or set an external db
wordpress_1 |   with -e WORDPRESS_DB_HOST=hostname:port?
dockercompose_wordpress_1 exited with code 1

これは、WordPressがデータベースを見つけることができないと訴えています。 MariaDBイメージをミックスに追加し、それをリンクして修正します。

ステップ2-MariaDBのインストール

MariaDBイメージをグループに追加するには、テキストエディターで `+ docker-compose.yml`を再度開きます。

nano ~/wordpress/docker-compose.yml

`+ docker-compose.yml +`を以下に一致するように変更します(インデントに注意してください、YAMLファイルは空白に敏感です)

docker-compose.yml

wordpress:
 image: wordpress

ここで行ったのは、 `+ wordpress_db `という新しいコンテナーを定義し、Docker Hubの ` mariadb `イメージを使用するように指示することです。 また、 ` wordpress `コンテナに ` wordpress_db `コンテナを ` wordpress `コンテナにリンクし、それを ` mysql `と呼びます( ` wordpress `コンテナ内でホスト名 ` mysql `が転送されます) ` wordpress_db +`コンテナ)。

もう一度 `+ docker-compose up +`を実行すると、MariaDBイメージがダウンロードされます。また、まだまだそこにないこともわかります。

Outputwordpress_db_1 | error: database is uninitialized and MYSQL_ROOT_PASSWORD not set
wordpress_db_1 |   Did you forget to add -e MYSQL_ROOT_PASSWORD=... ?
wordpress_1    | error: missing required WORDPRESS_DB_PASSWORD environment variable
wordpress_1    |   Did you forget to -e WORDPRESS_DB_PASSWORD=... ?
wordpress_1    |
wordpress_1    |   (Also of interest might be WORDPRESS_DB_USER and WORDPRESS_DB_NAME.)
wordpress_wordpress_db_1 exited with code 1
wordpress_wordpress_1 exited with code 1
Gracefully stopping... (press Ctrl+C again to force)

WordPressはまだデータベースを見つけることができないと不平を言っており、現在、MariaDBからrootパスワードが設定されていないという新しい不満があります。

2つのコンテナをリンクするだけでは十分ではないようです。 先に進み、 `+ MYSQL_ROOT_PASSWORD +`変数を設定して、実際にこのことを実行できるようにします。

Docker Composeファイルをもう一度編集します。

nano ~/wordpress/docker-compose.yml

これらの2行を `+ wordpress_db +`セクションの_end_に追加しますが、より安全なパスワードに変更してください!

docker-compose.yml

wordpress_db:
...


...

これにより、 `+ MYSQL_ROOT_PASSWORD `という名前の ` wordpress_db `コンテナ内に環境変数が設定され、希望のパスワードが設定されます。 MariaDB Dockerイメージは、起動時にこの環境変数を確認するように設定され、 ` MYSQL_ROOT_PASSWORD +`として定義されたパスワードを持つルートアカウントでDBをセットアップします。

また、WordPressインストールが実際に読み込まれたときに接続できるように、ポートを前方に設定します。 「+ wordpress +」セクションの下に、次の2行を追加します。

docker-compose.yml

wordpress:
...


...

最初のポート番号はホスト上のポート番号であり、2番目のポート番号はコンテナ内のポートです。 そのため、この構成では、ホストのポート8080のリクエストをコンテナ内のデフォルトのWebサーバーポート80に転送します。

完全な `+ docker-compose.yml +`ファイルは次のようになります。

docker-compose.yml

wordpress:
 image: wordpress
 links:
   - wordpress_db:mysql
 ports:
   - 8080:80
wordpress_db:
 image: mariadb
 environment:
   MYSQL_ROOT_PASSWORD:

この構成を使用すると、実際にWordPressを起動できます。 今回は、 `+ -d `オプションを指定して実行します。これにより、ターミナルを使用し続けることができるように、バックグラウンドでコンテナを実行するように docker-compose +に指示します。

docker-compose up -d

画面の周りにたくさんのテキストが飛んでいるのが見えます。 落ち着いたら、Webブラウザーを開き、ポート8080でDigitalOceanボックスのIP +を参照します(たとえば、サーバーのIPアドレスをブラウザーに入力する必要がある場合)。

新しいWordPressインストールページが表示され、通常どおりインストールとブログを完了することができます。

これらはどちらも公式のDockerイメージであり、Dockerのすべてのベストプラクティスに従っているため、これらの各イメージには事前定義された永続的なボリュームがあります。 Dockerボリュームの操作の詳細については、https://www.digitalocean.com/community/tutorials/how-to-work-with-docker-data-volumes-on-ubuntu-14-04 [Dockerデータボリュームチュートリアル]。

ステップ3-PhpMyAdminコンテナーの追加

素晴らしい、それは比較的痛みがなかった。 ちょっと空想してみましょう。

これまでは、公式画像のみを使用してきましたが、Dockerチームは正確な画像を作成するために多大な労力を費やしています。 WordPressコンテナに環境変数を設定する必要がないことに気づいたかもしれません。 適切に設定されたMariaDBコンテナにリンクするとすぐに、すべてが機能しました。

これは、WordPress Dockerコンテナ内に、実際に `+ wordpress_db `コンテナから ` MYSQL_ROOT_PASSWORD +`変数を取得し、それを使用してWordPressに接続するスクリプトがあるためです。

公式の画像領域から少し出て、https://hub.docker.com/r/corbinu/docker-phpmyadmin/ [コミュニティが提供するPhpMyAdmin画像]を使用してみましょう。 先に進み、もう一度 `+ docker-compose.yml +`を編集します:

nano docker-compose.yml

ファイルの最後に次を貼り付けます。

docker-compose.yml

phpmyadmin:
 image: corbinu/docker-phpmyadmin
 links:
   - wordpress_db:mysql
 ports:
   - 8181:80
 environment:
   MYSQL_USERNAME: root
   MYSQL_ROOT_PASSWORD:

以前に設定した `+ wordpress_db +`コンテナの正確に同じルートパスワードに置き換えてください。

これは、コミュニティメンバー「+ corbinu 」によって「 docker-phpmyadmin 」を取得し、「 mysql 」という名前の「 wordpress_db 」コンテナにリンクします(つまり、「 phpmyadmin 」コンテナ内からホスト名「 mysql 」への参照を意味します) ` wordpress_db `コンテナに転送され、ホストシステムのポート8181でポート80を公開し、最後にMariaDBのユーザー名とパスワードでいくつかの環境変数を設定します。 この画像は、 ` wordpress `画像のように ` wordpress_db `コンテナの環境から ` MYSQL_ROOT_PASSWORD `環境変数を自動的に取得しません。 実際には、 ` wordpress_db `コンテナから ` MYSQL_ROOT_PASSWORD:`行をコピーし、ユーザー名を ` root +`に設定する必要があります。

完全な `+ docker-compose.yml +`ファイルは次のようになります。

docker-compose.yml

wordpress:
 image: wordpress
 links:
   - wordpress_db:mysql
 ports:
   - 8080:80
wordpress_db:
 image: mariadb
 environment:
   MYSQL_ROOT_PASSWORD: examplepass

次に、アプリケーショングループを再度起動します。

docker-compose up -d

PhpMyAdminがインストールされているのがわかります。 終了したら、サーバーのIPアドレスに再度アクセスします(今回はポート8181を使用します。例: ). PhpMyAdminログイン画面が表示されます。

先に進み、ユーザー名「+ root 」とYAMLファイルで設定したパスワードを使用してログインすると、データベースを閲覧できるようになります。 サーバーには、WordPressインストールからのすべてのデータを含む「 wordpress +」データベースが含まれていることがわかります。

この方法で好きなだけコンテナを追加し、好きな方法でそれらをすべてリンクできます。 ご覧のとおり、このアプローチは非常に強力です。個々のコンポーネントの構成と前提条件を処理し、それらをすべて同じサーバー上でセットアップする代わりに、Legoブロックのようにピースをプラグインし、コンポーネントを断片的に追加します。 Docker Swarmなどのツールを使用すると、これらのコンテナを複数のサーバーで透過的に実行することもできます。 ただし、これはこのチュートリアルの範囲外です。 興味がある場合は、Dockerで[ドキュメント]((https://docs.docker.com/swarm/install-w-machine/))が提供されます。

ステップ4-WordPressサイトの作成

新しいWordPressサイトのすべてのファイルはDockerコンテナー内に格納されているため、コンテナーを停止して再起動するとファイルはどうなりますか?

デフォルトでは、WordPressコンテナのドキュメントルートは永続的です。 これは、Docker HubからのWordPressイメージがこのように構成されているためです。 WordPressサイトに変更を加え、アプリケーショングループを停止してから再度開始した場合、Webサイトには変更が残っています。

試してみよう。

WebブラウザーからWordPressにアクセスします(例: ). 既に存在する* Hello World!*投稿を編集します。 次に、次のコマンドですべてのDockerコンテナーを停止します。

docker-compose stop

WordPressサイトを再度ロードしてください。 Webサイトがダウンしていることがわかります。 Dockerコンテナーを再度起動します。

docker-compose up -d

再度、WordPressサイトをロードします。 ブログサイトと以前に行った変更が表示されます。 これは、コンテナが停止している場合でも、行った変更が保存されることを示しています。

手順5-ホストファイルシステムへのドキュメントルートの保存(オプション)

ホストとコンテナ間でファイルを共有するために、Dockerデータボリュームを使用して、ホストファイルシステムにWordPressのドキュメントルートを保存することができます。

やるだけやってみよう。 `+ docker-compose.yml +`ファイルをもう一度開きます:

nano ~/wordpress/docker-compose.yml

`+ wordpress:+`セクションに次の行を追加します。

〜/ wordpress / docker-compose.yml

wordpress:
...


   ...

現在実行中の `+ docker-compose +`セッションを停止します。

docker-compose stop

ボリュームをホストファイルシステムにマップできるように、既存のコンテナーを削除します。

docker-compose rm wordpress

WordPressをもう一度起動します。

docker-compose -d

プロンプトが返されたら、WordPressが再び稼働しているはずです-今度はホストファイルシステムを使用してドキュメントルートを保存します。

`〜/ wordpress +`ディレクトリを見ると、 ` wp_html +`ディレクトリが含まれていることがわかります。

ls ~/wordpress

すべてのWordPressソースファイルがその中にあります。 行った変更は、WordPressコンテナーによってリアルタイムで反映されます。

このエクスペリエンスは、通常よりも少しスムーズでした-WordPress Dockerコンテナは、起動してファイルを適切にコピーするときに、 `+ / var / www / html +`が空かどうかをチェックするように設定されています。 通常、この手順は自分で行う必要があります。

結論

完全なWordPressを展開して実行する必要があります。 同じ方法を使用して、Docker Hubで利用可能なイメージを使用する非常に幅広いシステムを展開できるはずです。 +どのボリュームが永続的で、どのボリュームがあなたが作成したコンテナごとではないかを必ず確認してください。

ハッピードッキング!

Related