Ubuntu14.04でDockerComposeを使用してWordPressとPhpMyAdminをインストールする方法
序章
Docker Compose を使用すると、Dockerコンテナーのオーケストレーションプロセス(コンテナー内のリンクとボリュームの起動、シャットダウン、セットアップなど)を非常に簡単に処理できます。
この記事では、Docker Composeを使用してアプリケーションをインストールする実際の例を示します。この場合は、WordPressとPHPMyAdminを追加でインストールします。 WordPressは通常LAMPスタックで実行されます。つまり、Linux、Apache、MySQL / MariaDB、およびPHPです。 公式のWordPressDockerイメージにはApacheとPHPが含まれているため、心配する必要があるのはMariaDBだけです。
前提条件
この記事をフォローするには、次のものが必要です。
- Ubuntu14.04ドロップレット
- sudo権限を持つroot以外のユーザー( Ubuntu 14.04 を使用した初期サーバーセットアップでは、これをセットアップする方法について説明しています。)
- Ubuntu14.04にDockerComposeをインストールして使用する方法の手順からインストールされたDockerとDockerCompose
ステップ1—WordPressをインストールする
公式のWordPressおよびMariaDBDockerイメージを使用します。 興味がある場合は、それぞれのGitHubページとDocker Hubページに、これらのイメージとその構成オプションに関する詳細情報があります。
データが保存されるフォルダを作成し、最小限のデータを作成することから始めましょう docker-compose.yml
WordPressコンテナを実行するファイル:
mkdir ~/wordpress && cd $_
次に、を作成します ~/wordpress/docker-compose.yml
お気に入りのテキストエディタを使用します(好みがない場合はnanoは簡単です):
- nano ~/wordpress/docker-compose.yml
次のように貼り付けます。
wordpress:
image: wordpress
これは、DockerComposeにという新しいコンテナを開始するように指示するだけです。 wordpress
とダウンロード wordpress
DockerHubからのイメージ。
次のように画像を表示できます。
- docker-compose up
DockerがDockerHubから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ファイルは空白に敏感です)
wordpress:
image: wordpress
links:
- wordpress_db:mysql
wordpress_db:
image: mariadb
ここで行ったことは、という新しいコンテナを定義することです。 wordpress_db
そしてそれを使用するように言った mariadb
DockerHubからのイメージ。 私達はまた私達に言った 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はまだデータベースが見つからないという苦情を言っていますが、今では、rootパスワードが設定されていないというMariaDBからの新しい苦情があります。
2つのコンテナをリンクするだけでは十分ではないようです。 先に進んで、 MYSQL_ROOT_PASSWORD
変数を使用して、実際にこのことを実行できるようにします。
DockerComposeファイルをもう一度編集します。
- nano ~/wordpress/docker-compose.yml
これらの2行をendの wordpress_db
セクションですが、必ずexamplepassをより安全なパスワードに変更してください!
wordpress_db:
...
environment:
MYSQL_ROOT_PASSWORD: examplepass
...
これにより、環境変数が内部に設定されます wordpress_db
と呼ばれるコンテナ MYSQL_ROOT_PASSWORD
ご希望のパスワードで。 MariaDB Dockerイメージは、起動時にこの環境変数をチェックするように構成されており、次のように定義されたパスワードを持つrootアカウントでDBをセットアップします。 MYSQL_ROOT_PASSWORD
.
その間、ポートフォワードを設定して、WordPressインストールが実際にロードされたら接続できるようにします。 下 wordpress
セクションはこれらの2行を追加します:
wordpress:
...
ports:
- 8080:80
...
最初のポート番号はホストのポート番号であり、2番目のポート番号はコンテナ内のポートです。 したがって、この構成では、ホストのポート8080での要求が、コンテナー内のデフォルトのWebサーバーのポート80に転送されます。
注: WordPressをホストのデフォルトのWebサーバーポート80で実行する場合は、前の行を次のように変更します。 80:80
ホストのポート80へのリクエストがWordpressコンテナ内のポート80に転送されるようにします。
あなたの完全な docker-compose.yml
ファイルは次のようになります。
wordpress:
image: wordpress
links:
- wordpress_db:mysql
ports:
- 8080:80
wordpress_db:
image: mariadb
environment:
MYSQL_ROOT_PASSWORD: examplepass
この構成では、実際に先に進んでWordPressを起動できます。 今回は、 -d
オプション、それは教えてくれます docker-compose
コンテナをバックグラウンドで実行して、ターミナルを使い続けることができるようにするには:
- docker-compose up -d
たくさんのテキストが画面のそばを飛んでいるのがわかります。 落ち着いたら、Webブラウザーを開き、ポート8080でDigitalOceanボックスのIPを参照します(たとえば、サーバーのIPアドレスが 123.456.789.123 の場合は、httpと入力する必要があります。 ://123.456.789.123:8080 をブラウザに追加します。)
新しいWordPressインストールページが表示され、通常どおりインストールとブログを完了できるはずです。
これらは両方とも公式のDockerイメージであり、Dockerのすべてのベストプラクティスに従っているため、これらの各イメージには事前定義された永続的なボリュームがあります。つまり、コンテナーを再起動しても、ブログの投稿はそのまま残ります。 Dockerボリュームの操作について詳しくは、Dockerデータボリュームチュートリアルをご覧ください。
ステップ3—PhpMyAdminコンテナを追加する
素晴らしい、それは比較的痛みがなかった。 少し凝ってみよう。
これまでは公式の画像のみを使用してきましたが、Dockerチームはこれを正確に確認するために多大な労力を費やしています。 WordPressコンテナに設定するための環境変数を指定する必要がないことに気付いたかもしれません。 適切に構成されたMariaDBコンテナーにリンクするとすぐに、すべてが機能しました。
これは、WordPressDockerコンテナ内に実際に MYSQL_ROOT_PASSWORD
私たちからの変数 wordpress_db
コンテナとそれを使用してWordPressに接続します。
公式の画像領域から少し離れて、コミュニティが提供するPhpMyAdmin画像を使用してみましょう。 先に進んで編集 docker-compose.yml
もう1回:
- nano docker-compose.yml
ファイルの最後に以下を貼り付けます。
phpmyadmin:
image: corbinu/docker-phpmyadmin
links:
- wordpress_db:mysql
ports:
- 8181:80
environment:
MYSQL_USERNAME: root
MYSQL_ROOT_PASSWORD: examplepass
examplepass を、 wordpress_db
以前に設定したコンテナ。
このグラブ docker-phpmyadmin
コミュニティメンバーによる corbinu
、それを私たちにリンクします wordpress_db
名前のコンテナ mysql
(内側からの意味 phpmyadmin
ホスト名へのコンテナ参照 mysql
私たちに転送されます wordpress_db
コンテナ)、ホストシステムのポート8181でポート80を公開し、最後に、MariaDBのユーザー名とパスワードを使用していくつかの環境変数を設定します。 この画像は自動的に取得しません MYSQL_ROOT_PASSWORD
からの環境変数 wordpress_db
コンテナの環境 wordpress
画像はありません。 実際にコピーする必要があります MYSQL_ROOT_PASSWORD: examplepass
からの行 wordpress_db
コンテナ、およびユーザー名をに設定します root
.
完全な docker-compose.yml
ファイルは次のようになります。
wordpress:
image: wordpress
links:
- wordpress_db:mysql
ports:
- 8080:80
wordpress_db:
image: mariadb
environment:
MYSQL_ROOT_PASSWORD: examplepass
phpmyadmin:
image: corbinu/docker-phpmyadmin
links:
- wordpress_db:mysql
ports:
- 8181:80
environment:
MYSQL_USERNAME: root
MYSQL_ROOT_PASSWORD: examplepass
次に、アプリケーショングループを再度起動します。
- docker-compose up -d
PhpMyAdminがインストールされているのがわかります。 完了したら、サーバーのIPアドレスに再度アクセスします(今回はポート8181を使用します。例: http://123.456.789.123:8181 )。 PhpMyAdminのログイン画面が表示されます。
先に進み、ユーザー名を使用してログインします root
YAMLファイルで設定したパスワードとパスワードを使用すると、データベースを参照できるようになります。 サーバーに wordpress
データベース。WordPressインストールからのすべてのデータが含まれています。
この方法でコンテナをいくつでも追加し、好きな方法でそれらをすべてリンクすることができます。 ご覧のとおり、このアプローチは非常に強力です。個々のコンポーネントの構成と前提条件を処理し、それらをすべて同じサーバーに設定する代わりに、レゴブロックのようにそれらをつなぎ合わせて、コンポーネントを少しずつ追加することができます。 Docker Swarm などのツールを使用すると、これらのコンテナーを複数のサーバー上で透過的に実行することもできます。 ただし、これはこのチュートリアルの範囲外です。 興味があれば、Dockerはドキュメントを提供します。
ステップ4—WordPressサイトを作成する
新しいWordPressサイトのすべてのファイルはDockerコンテナー内に保存されているため、コンテナーを停止して再開すると、ファイルはどうなりますか?
デフォルトでは、WordPressコンテナのドキュメントルートは永続的です。 これは、DockerHubのWordPressイメージがこのように構成されているためです。 WordPressサイトに変更を加え、アプリケーショングループを停止して再開しても、Webサイトには変更が加えられたままになります。
試してみよう。
WebブラウザからWordPressにアクセスします(例: http://123.456.789.123:8080 )。 すでに存在するHelloWorld!投稿を編集します。 次に、次のコマンドを使用してすべてのDockerコンテナを停止します。
- docker-compose stop
WordPressサイトをもう一度読み込んでみてください。 Webサイトがダウンしていることがわかります。 Dockerコンテナーを再起動します。
- docker-compose up -d
もう一度、WordPressサイトをロードします。 ブログサイトと以前に行った変更が表示されます。 これは、コンテナが停止している場合でも、行った変更が保存されることを示しています。
手順5—ドキュメントルートをホストファイルシステムに保存する(オプション)
Dockerデータボリュームを使用してホストファイルシステムにWordPressのドキュメントルートを保存し、ホストとコンテナー間でファイルを共有することができます。
注: Dockerデータボリュームの操作の詳細については、Dockerデータボリュームのチュートリアルを参照してください。
やるだけやってみよう。 あなたの docker-compose.yml
もう一度ファイルします:
nano ~/wordpress/docker-compose.yml
の中に wordpress:
セクションに次の行を追加します。
wordpress:
...
volumes:
- ~/wordpress/wp_html:/var/www/html
...
現在実行中の停止 docker-compose
セッション:
- docker-compose stop
ボリュームをホストファイルシステムにマップできるように、既存のコンテナを削除します。
- docker-compose rm wordpress
WordPressを再起動します:
- docker-compose -d
プロンプトが戻ったら、WordPressが再び稼働しているはずです。今回は、ホストファイルシステムを使用してドキュメントルートを保存します。
あなたがあなたを見れば ~/wordpress
ディレクトリ、あなたは今あることがわかります wp_html
その中のディレクトリ:
- ls ~/wordpress
すべてのWordPressソースファイルはその中にあります。 行った変更は、WordPressコンテナによってリアルタイムで取得されます。
このエクスペリエンスは通常よりも少しスムーズでした—WordPressDockerコンテナーは次のことをチェックするように構成されています /var/www/html
起動時に空であるかどうかにかかわらず、ファイルを適切にコピーします。 通常、この手順は自分で行う必要があります。
結論
完全なWordPressをデプロイして実行する必要があります。 同じ方法を使用して、DockerHubで利用可能なイメージを使用して非常に多種多様なシステムをデプロイできるはずです。 どのボリュームが永続的で、どのボリュームが作成する各コンテナー用ではないかを必ず把握してください。
ハッピードッカー!