はじめに
本ページでは、
Dockerを用いてブログサイト作成用のOSS製品であるWordPress の実行環境を構築するハンズオンを通して、
Dockerの基本的な操作 と Dockerの利便性を学んでいただきます。
前提条件
- ホストOS:CentOS 7
- Dockerインストール済み
※未インストールの場合は、 こちら を参考にインストールしてください。
参考
こちら に よく使うDockerコマンドについてまとめていますので、ご参考ください。
それでは、WordPress環境を構築してみましょう
1. イメージファイルの準備
DockerHubからイメージファイルを取得します。
WordPress環境を構築するには、WordPressのDockerイメージに加えて、
DB用にMySQLのDockerイメージも必要です。
以下2つのDockerイメージを使用します。
はじめに docker search
コマンドで、Dockerイメージを検索してみましょう。
$ docker search wordpress
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
wordpress The WordPress rich content management system… 2940 [OK]
bitnami/wordpress Bitnami Docker Image for WordPress 107 [OK]
appcontainers/wordpress Centos/Debian Based Customizable Wordpress C… 34 [OK]
etopian/alpine-php-wordpress Alpine WordPress Nginx PHP-FPM WP-CLI 20 [OK]
centurylink/wordpress Wordpress image with MySQL removed. 14 [OK]
・・・
検索結果が表示されました。
今回は OFFICIAL イメージである、wordpress
という名前のDockerイメージを使用します。
同じく MySQL も検索してみましょう。
$ docker search mysql
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 8086 [OK]
mariadb MariaDB is a community-developed fork of MyS… 2740 [OK]
mysql/mysql-server Optimized MySQL Server Docker images. Create… 604 [OK]
zabbix/zabbix-server-mysql Zabbix Server with MySQL database support 188 [OK]
hypriot/rpi-mysql RPi-compatible Docker Image with Mysql 113
・・・
こちらも検索結果が表示されました。
同じく OFFICIAL イメージである、mysql
という名前のDockerイメージを使用します。
それでは、この2つのDockerイメージを取得(Pull)していきます。
ここでは wordpress は 5.4.2
をtag指定します。
mysql は wordpress との連携確認済みの 5.7.21
をtag指定します。
$ docker pull mysql:5.7.21
5.7.21: Pulling from library/mysql
2a72cbf407d6: Pull complete
38680a9b47a8: Pull complete
4c732aa0eb1b: Pull complete
c5317a34eddd: Pull complete
f92be680366c: Pull complete
e8ecd8bec5ab: Pull complete
2a650284a6a8: Pull complete
5b5108d08c6d: Pull complete
beaff1261757: Pull complete
c1a55c6375b5: Pull complete
8181cde51c65: Pull complete
Digest: sha256:691c55aabb3c4e3b89b953dd2f022f7ea845e5443954767d321d5f5fa394e28c
Status: Downloaded newer image for mysql:5.7.21
$ docker pull wordpress:5.4.2
5.4.2: Pulling from library/wordpress
27833a3ba0a5: Pull complete
2d79f6773a3c: Pull complete
f5dd9a448b82: Pull complete
95719e57e42b: Pull complete
cc75e951030f: Pull complete
78873f480bce: Pull complete
1b14116a29a2: Pull complete
887fc426d9b4: Pull complete
e8a2a7e68e47: Pull complete
44116bd4b499: Pull complete
5a7ed133cf7c: Pull complete
a0cc2e7ce3b9: Pull complete
3ea943f2a6e6: Pull complete
b7cbb4ae8469: Pull complete
f1ee59d1627e: Pull complete
480e816f1b42: Pull complete
9803a14680f4: Pull complete
a9d5149d7240: Pull complete
7a162cc00537: Pull complete
Digest: sha256:eb7fb32d7098153b586cb6c0c8c7fb3b9684c66ccff803734b0895e49210fe08
Status: Downloaded newer image for wordpress:5.4.2
取得したDockerイメージを docker images
コマンドで確認してみましょう。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
wordpress 5.4.2 837092bc87de 3 weeks ago 421MB
mysql 5.7.21 5195076672a7 13 months ago 371MB
Dockerイメージが取得できていることが確認できました。
2. Dockerコンテナの起動
イメージファイルから、コンテナを起動していきます。
まずは、MySQLコンテナを起動します。
$ docker run -d -it --name test-mysql -e MYSQL_ROOT_PASSWORD=password mysql:5.7.21
-d
:コンテナをバックグラウンドでの実行するためのオプション
-it
:コンテナに標準入力とTTY(端末デバイス)を提供するオプション
→このオプションをつけると、コンテナにログインできるようになります。
--name
:コンテナにユーザ指定の名前を付与するオプション。
→ここでは、test-mysql という名前を付与しています。
-e
:環境変数を定義するオプション
→MySQLのパスワードとして 「password」を設定しています。
つづいて、WordPressコンテナを起動します。
$ docker run -d -it --name test-wordpress --link test-mysql:mysql -p 8080:80 wordpress:5.4.2
--link
:複数のコンテナを連携するためのオプション
→WordPressコンテナに、先ほど起動した test-mysql コンテナを紐づけています。
-p
:ホストのIPをコンテナのIPとマッピングするためのオプション
→コンテナのポート 80(HTTP)を、ホストのポート 8080 にマッピングしています。
起動したコンテナを docker ps
コマンドで確認してみましょう。
-a
オプションをつけることで、停止中のコンテナを含めてすべて表示します。
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0482597eb65c wordpress:5.4.2 "docker-entrypoint.s…" 4 seconds ago Up 3 seconds 0.0.0.0:8080->80/tcp test-wordpress
b3fe0d703916 mysql:5.7.21 "docker-entrypoint.s…" 12 minutes ago Up About a minute 3306/tcp test-mysql
wordpressコンテナと、mysqlコンテナが起動していることが確認できました。
3. WordPressコンテナに接続
ブラウザを起動して、http://<ホストのIPアドレス>:8080 にアクセスしてみましょう。
WordPress の初期画面が表示されました。
ここでは 日本語 を選択して、「続ける」 を押下してください。
つづいて、必要情報の入力を求められます。
サイトのタイトル、ユーザー名、パスワード、メールアドレス を入力してください。
※メールアドレスは、実在しないものでも構いません。
先ほど設定した、ユーザー名、パスワードを入力して「ログイン」を押下します。
WordPressが使用できるようになりました。
せっかくですので適当に触ってみてください。
WordPressでは、このようなブログサイトを簡単に作成することができます。
4. コンテナ操作
起動中のコンテナにログインするには、 docker exec
コマンドを使用します。
docker exec
は、コンテナ内で指定したコマンドを実行します。
ここでは、/bin/bash
コマンドを起動することで bash ターミナルを起動し、
bashターミナルからコンテナ内の操作を行うことができるようになります。
$ docker exec -it test-wordpress /bin/bash
root@0482597eb65c:/var/www/html# ls -la
total 208
drwxrwxrwx. 5 www-data www-data 4096 May 2 13:54 .
drwxr-xr-x. 1 root root 18 Mar 27 01:00 ..
-rw-r--r--. 1 www-data www-data 235 May 2 14:03 .htaccess
-rw-r--r--. 1 www-data www-data 420 Nov 30 2017 index.php
-rw-r--r--. 1 www-data www-data 19935 Jan 1 20:37 license.txt
-rw-r--r--. 1 www-data www-data 7425 Jan 9 02:56 readme.html
-rw-r--r--. 1 www-data www-data 6919 Jan 12 06:41 wp-activate.php
drwxr-xr-x. 9 www-data www-data 4096 Mar 13 00:18 wp-admin
-rw-r--r--. 1 www-data www-data 369 Nov 30 2017 wp-blog-header.php
-rw-r--r--. 1 www-data www-data 2283 Jan 21 01:34 wp-comments-post.php
-rw-r--r--. 1 www-data www-data 2808 May 2 13:54 wp-config-sample.php
-rw-r--r--. 1 www-data www-data 3176 May 2 13:54 wp-config.php
drwxr-xr-x. 7 www-data www-data 99 May 2 14:07 wp-content
-rw-r--r--. 1 www-data www-data 3847 Jan 9 08:37 wp-cron.php
drwxr-xr-x. 19 www-data www-data 8192 Mar 13 00:18 wp-includes
-rw-r--r--. 1 www-data www-data 2502 Jan 16 05:29 wp-links-opml.php
-rw-r--r--. 1 www-data www-data 3306 Nov 30 2017 wp-load.php
-rw-r--r--. 1 www-data www-data 38883 Jan 12 06:41 wp-login.php
-rw-r--r--. 1 www-data www-data 8403 Nov 30 2017 wp-mail.php
-rw-r--r--. 1 www-data www-data 17947 Jan 30 11:01 wp-settings.php
-rw-r--r--. 1 www-data www-data 31085 Jan 16 16:51 wp-signup.php
-rw-r--r--. 1 www-data www-data 4764 Nov 30 2017 wp-trackback.php
-rw-r--r--. 1 www-data www-data 3068 Aug 17 2018 xmlrpc.php
root@0482597eb65c:/var/www/html# cat index.php
<?php
/**
* Front to the WordPress application. This file doesn't do anything, but loads
* wp-blog-header.php which does and tells WordPress to load the theme.
*
* @package WordPress
*/
/**
* Tells WordPress to load the WordPress theme and output it.
*
* @var bool
*/
define( 'WP_USE_THEMES', true );
/** Loads the WordPress Environment and Template */
require( dirname( __FILE__ ) . '/wp-blog-header.php' );
コンテナからログアウトするには exit
を入力します。
root@0482597eb65c:/var/www/html# exit
exit
コンテナを停止するには、docker stop
コマンドを使用します。
$ docker stop test-wordpress
docker ps -a
コマンドで、コンテナの状態を確認してみましょう。
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0482597eb65c wordpress:5.4.2 "docker-entrypoint.s…" 33 minutes ago Exited (0) 6 seconds ago test-wordpress
b3fe0d703916 mysql:5.7.21 "docker-entrypoint.s…" 45 minutes ago Up 34 minutes 3306/tcp test-mysql
test-wordpress コンテナが 停止(Exited(0))となっていることが確認できます。
ブラウザをリロードしてみると、
WordPressにアクセスできなくなっていることがわかります。
コンテナを再度起動するには、docker start
コマンドを使用します。
$ docker start test-wordpress
docker ps -a
コマンドで、コンテナの状態を確認してみましょう。
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0482597eb65c wordpress:5.4.2 "docker-entrypoint.s…" 38 minutes ago Up 4 seconds 0.0.0.0:8080->80/tcp test-wordpress
b3fe0d703916 mysql:5.7.21 "docker-entrypoint.s…" About an hour ago Up 39 minutes 3306/tcp test-mysql
test-wordpress コンテナが 起動(UP)していることが確認できます。
ブラウザをリロードしてみると、
再びWordPressにアクセスできるようになっていることがわかります。
5. 後片付け
起動したコンテナ、取得(Pull)したDockerイメージを削除しましょう。
まずは、コンテナを削除します。
コンテナを削除するには、docker stop
コマンドでコンテナを停止したのち、
docker rm
コマンドで、コンテナを削除します。
$ docker stop test-wordpress
$ docker stop test-mysql
$ docker rm test-wordpress
$ docker rm test-mysql
docker ps -a
コマンドで、コンテナが削除されていることが確認できます。
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATE
つづいて、Docker イメージを削除します。
まずはdocker images
コマンドで、Docker イメージ一覧を確認します。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
wordpress 5.4.2 837092bc87de 3 weeks ago 421MB
mysql 5.7.21 5195076672a7 13 months ago 371MB
Docker イメージを削除するには、docker rmi
コマンドを使用します。
$ docker rmi wordpress:5.4.2
Untagged: wordpress:5.4.2
Untagged: wordpress@sha256:eb7fb32d7098153b586cb6c0c8c7fb3b9684c66ccff803734b0895e49210fe08
Deleted: sha256:837092bc87def29cf6e40fbbe65dafee9715b5a64d32fc94aec7c73773805a29
Deleted: sha256:c76dd05c6fcb07bcda3b8d982978b7537f38f9b654649e69653c15fbfd1c20ee
Deleted: sha256:2c4f25a6cdd08288d1df7282f545b5e5b4530e5c236243a43ce593fd78f4bac4
Deleted: sha256:5df0a75e0c8651eaf6cb85dbb4c615b91792f9d26fe36c07fc014f267559bb0e
Deleted: sha256:d7db080c0d7ad12bb9d11917cad9d923c76a582766339099101c7925cbe30ef5
Deleted: sha256:cdd4986c7ffa5488603aef15a0d744c87ec7d3cef4071f9403a136df84f434a4
Deleted: sha256:de0022b247a256c3f5a2d6588bef354dadc81b08602763e94a000294ded1bc5d
Deleted: sha256:aa988a8f2b781c15509381977bc1f12df337537c83738bf67eae8bcc85d75827
Deleted: sha256:ba59a6f26aa22f6ef9f2a63bf5a51b3117fb22fb04f12c41bd952faf92c8b6e7
Deleted: sha256:47bdab2bb3d864d3a7a0962326932e38d927a7906dc6aacc57eb524f17ada731
Deleted: sha256:9ced8dd73fb478fb39612794f846211860dcb385902413affbd7919525db7e96
Deleted: sha256:18b2306bc0923de694a056448d2d2e33439f6d02b36b0c6a3d0ed7c323dd4418
Deleted: sha256:17e42b23df8e620e13fa4130fd9a04c43589b5b348480513518fbf6ce9694dfb
Deleted: sha256:dca11b225a640f6c1dac7264469049213078a7c63e99f764851f3a9167463757
Deleted: sha256:aa6e5d2a1c7485b528c7b47ac0aa15a158edc489ce09ae8393b2ed0f6219bd8e
Deleted: sha256:80537a100f0e62fa82ca4420923b120192d72471f1965e7309ffec811de4670b
Deleted: sha256:bad56acc3d625fc0cc379915485cb4f396730097ec1734205f828c7d43d02715
Deleted: sha256:4d0b85a183f5c00e734d5ad7b81c97e97dd8af3b55d5cf929125238faa0c8bf8
Deleted: sha256:ab76068f12a968afdfbabdad9a850102607c5095d3b34ed3b8e00a15ff72639a
Deleted: sha256:5dacd731af1b0386ead06c8b1feff9f65d9e0bdfec032d2cd0bc03690698feda
$ docker rmi mysql:5.7.21
Untagged: mysql:5.7.21
Untagged: mysql@sha256:691c55aabb3c4e3b89b953dd2f022f7ea845e5443954767d321d5f5fa394e28c
Deleted: sha256:5195076672a7e30525705a18f7d352c920bbd07a5ae72b30e374081fe660a011
Deleted: sha256:bc52f6d08bc65c22baab4384ae534d4c5ba8c988197de49975e0a0f78310dd89
Deleted: sha256:b2590548a0917767b420cf20d0cef3aae8912314de216f624c0840f3ad827aa7
Deleted: sha256:756d63a7d5896b52d445ea84ee392cb08a7c119322cfcdfed6303de1ed0d0eab
Deleted: sha256:8e4736576db75536185beba95c5877deeb3915740688cbbc17fe04aed3632282
Deleted: sha256:e6e6e1bb8a16eadbe6628770767615fbc8d67bf11dde69a902116efe847baa7e
Deleted: sha256:080b6c4ec1d55d91a7087e12ae3bd4df252148d94f9911209e0a83d50dc63784
Deleted: sha256:58b97da9f98f75af01ae59c3cb1fdd07a07297015459f3f9f88b140699b29147
Deleted: sha256:3918448e7fe95f36f67a55c938559bab787249b8fa5c7e9914afd46994d045b0
Deleted: sha256:fac8373d1ec4f5bb6c13f12170f558edc3cfbfe8215ae3d1c869940401bc14cf
Deleted: sha256:130f3e567e288fdbbc3ae7cd7aa6c8b3d952bebd3eae58f0a7da93acbb22a258
Deleted: sha256:3358360aedad76edf49d0022818228d959d20a4cccc55d01c32f8b62e226e2c2
再度docker images
コマンドを入力すると、
Docker イメージが削除されていることが確認できます。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE