どうも千利休です。
Docker-composeと行って複数のコンテナを管理できる機能があったりします。
今回はそちらを使ってWordPressサイトを簡単構築してみましょう。
docker-composeとは?
dockerでのコンテナは1コンテナに1役割というのがおすすめされています。
そうすると必然的にDBはこのコンテナ、WEBはこのコンテナと分かれてくるわけですね。
それらをいちいちコマンドで構築するのは面倒くさい。
そこでレシピをあらかじめ作っといて自動化しちゃおう!というのがdocker-composeなのです。
wordpressを簡単構築
基本的には*.ymlというデータがあるだけで問題ないです。
このymlというのにどのようにコンテナを起動して行くのかというレシピを書いていきます。
必要な設定ファイルを外部に切り出すというのも可能なのでそちらも後ほど説明しますが、まずは手軽にwordpressサイトを構築してみましょう。
適当なフォルダを作って (筆者はdocker-wordpressというフォルダ)
docker-compose.yml
というファイル名で下記の内容をコピペしてみてください。
version: "2" services: wordpress: image: wordpress:latest ports: - "9000:80" depends_on: - db environment: WORDPRESS_DB_HOST: "db:3306" WORDPRESS_DB_NAME: "wordpress" WORDPRESS_DB_USER: "wp_user" WORDPRESS_DB_PASSWORD: "hogehoge" volumes: - ./volumes/wordpress:/var/www/html/ db: image: mysql:latest environment: MYSQL_RANDOM_ROOT_PASSWORD: "yes" MYSQL_DATABASE: "wordpress" MYSQL_USER: "wp_user" MYSQL_PASSWORD: "hogehoge" volumes: - ./db-data:/var/lib/mysql # 永続データとしてマウント volumes: db-data: driver: local volumes: driver: local
これで下準備は完了です。
新しく作ったフォルダに移動します。
このような状態のはずです。
$ ls docker-compose.ym
この状態で
docker-compose up -d
コマンドを実行します。
-dオプションはバックグラウンド起動のオプションです。
初回作成だと長いですが、2回目からだと早くなりますのでしばらくお待ちください。
コマンド終了後、
http://localhost:9000/
こちらにアクセスするとなんとWordPressに初期サイトが作成されています!
素晴らしいですね。
コマンドでも見てみましょう。
しっかりと二つのコンテナが起動していますね。
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e060c320237c wordpress:latest "docker-entrypoint..." 17 minutes ago Up 17 minutes 0.0.0.0:9000->80/tcp dockerrikyuwordpress_wordpress_1 e812181c3762 mysql:latest "docker-entrypoint..." 17 minutes ago Up 17 minutes 3306/tcp dockerrikyuwordpress_db_1
ボリュームとは?
今回はDBとwordpressのファイルを永続データとてボリュームを作成しました。
version: "2" services: wordpress: ・・・ volumes: - ./volumes/wordpress:/var/www/html/ db: ・・・ volumes: - ./db-data:/var/lib/mysql # 永続データとしてマウント volumes: db-data: driver: local volumes: driver: local
この「volumes」のところがそれになります。
今回はwordpressの設定ファイルとDBです。
実際にymlファイルがあるフォルダをみてみるとわかるかと思います。
$ ls db-data docker-compose.yml volumes
db-dataとvolumesになっているかと思います。
実際にvolumesの下にはwordpressの設定ファイルがあってこちらを弄るとコンテナのwordpressもこちらを参照するのでサイトに反映されます。
コンテナは削除されるとデータは消失しますが、ボリュームとして外に出しておくとコンテナが削除されてもデータが消えませんので安心です。
またターミナルで作業をせずに好きなクライアントで作業ができるのも楽ですね。
ymlでのボリューム指定は下記です。
volumes:の下がが実際のボリュームの指定で、複数個指定することもできます。
volumes: # - "クライアントのフォルダ":"コンテナ内のフォルダ" - ./volumes/wordpress:/var/www/html/
またコマンドでも現在使用されているボリュームを調べられます。
$ docker volume ls DRIVER VOLUME NAME local dockerrikyuwordpress_db-data local dockerrikyuwordpress_volumes
設定ファイルを外だしする
ymlにこのような記述がありました。
・・・ environment: WORDPRESS_DB_HOST: "db:3306" WORDPRESS_DB_NAME: "wordpress" WORDPRESS_DB_USER: "wp_user" WORDPRESS_DB_PASSWORD: "hogehoge"
パスワードなどここに書いとくのはあまり得策だとは言えません。
個々人の設定に任せるのがいいですね、そのためにここは可変的に変えられるように設定を外だししときましょう。
ymlファイルと一緒の箇所に
「.env」ファイルを作成します。
その中に先ほどの設定を外出ししましょう。
WORDPRESS_DB_NAME=wordpress WORDPRESS_DB_USER=wp_user WORDPRESS_DB_PASSWORD=hogehoge MYSQL_RANDOM_ROOT_PASSWORD=yes MYSQL_DATABASE=wordpress MYSQL_USER=wp_user MYSQL_PASSWORD=hogehoge
これで保存、外だししたのでymlファイルも書き換えます。
version: "2" services: wordpress: image: wordpress:latest ports: - "9000:80" depends_on: - db environment: WORDPRESS_DB_HOST: "db:3306" env_file: .env volumes: - ./volumes/wordpress:/var/www/html/ db: image: mysql:latest env_file: .env volumes: - ./db-data:/var/lib/mysql volumes: db-data: driver: local volumes: driver: local
env_file: .env
これが外だしした設定を読み込んでいる部分になります。
これで個々人のパスワードなどは勝手に決められますね!
今回使ったコマンド
起動
docker-compose up -d
中断
docker-compose down
中断からの復帰
docker-compose start
コンテナ・ボリュームなど完全削除(ローカルからは消えない)
docker-compose -v
ボリューム一覧
docker volume ls
全てのボリュームを削除(危険だよ!)
$ docker volume rm $(docker volume ls -qf dangling=true)
まとめ
いかがだったでしょうか。
dockerのいいところはスクラップ&ビルドがしやすい点だと思います。
またコンテナの一括作成もdocker-composeのおかげでだいぶ楽になったのではないでしょうか。
まだまだ初心者なので間違っていたら教えていただけると幸いです。
参考サイト
https://tech.recruit-mp.co.jp/infrastructure/post-11266/
http://qiita.com/Ikumi/items/b319a12d7e2c9f7b904d