【 docker入門 】 docker-compose でwordpress環境を解説しながら構築

コンテナ

docke入門 docker-compose アイキャッチ

docker入門 第四弾です。今回は docker-compose を使います。

第一弾から第三弾まででdockerコマンドを使って色々やってきました。

今回は、docker-composeというツールでwordpressの環境を作りながら docker-compose.yml の書き方を解説します。

docker-compose とは

毎度お世話になっているDocker ドキュメント日本語化プロジェクトによると

Compose とは、複数のコンテナを定義し実行する Docker アプリケーションのためのツールです。Compose においては YAML ファイルを使ってアプリケーションサービスの設定を行います。コマンドを1つ実行するだけで、設定内容に基づいたアプリケーションサービスの生成、起動を行います。

Docker ドキュメント日本語化プロジェクト Docker Compose 概要

とのこと。

今までの記事では、コンテナを1つ作成する度に$ docker run コマンドを実行しなければいけませんでした。

しかし、実際にサービスを動かすにはプロセスごとにコンテナを複数台作成する必要が出てきます。

ひとつづつコンテナ作成するのは面倒ですよね。。ということでdocker-composeを使って定義したコンテナを一つのコマンドで作成してしまいましょうという感じです。

docke入門 docker-composeのイメージ

今回作る環境

今回は、docker hubで公開されているイメージを使ってwordpressを構築します。

docke入門 docker-compose 構成図

そしてディレクトリ構成は以下の通りです。

$ tree .
.
├── docker-compose.yml
└── environments
    ├── db.env
    └── wp.env

メインは、docker-compose.ymlでここにwordpressとdbの設定を書いていきます。

environments配下には、ユーザー名やパスワードなどの情報を記載してコンテナの環境変数として設定します。

docker-compose.ymlに直接書くこともできますが、別ファイルに分離することでgitignoreでリモートリポジトリの管理から除外できます。

docker-compose .ymlの作成

先に完成品を

version: '3.8'

services:

## dbコンテナの定義
   db:
   ## 使用するイメージを指定
     image: mysql:5.7
     ## ローカルPCのマウントポイントを指定
     volumes:
       - db_data:/var/lib/mysql
     ## dockerホスト起動時に再起動するかを設定
     restart: always
     ## 環境変数ファイルの読み込み
     env_file:
      - ./environments/db.env

## wordpressコンテナの定義
   wordpress:
     ## 依存関係の指定(dbコンテナが起動したら起動する)
     depends_on:
       - db
     image: wordpress:latest
     ## ポートのマッピングを指定
     ports:
       - "8000:80"
     restart: always
     env_file:
      - ./environments/wp.env
volumes:
    ## db_dataというボリュームを作成
    db_data:

最上位のインデントをそれぞれざっくり説明します。

versionキー

docker-compose.ymlのバージョンを指定するところです。

docker-composeはバージョンによって記述の仕方が多少変わることがあります。

現在の最新は、3.8のようです。(2022/2/18:Compose file version 3 reference)

servicesキー

起動するコンテナについての定義を書いていく場所です。

serviceキーの中でさらにネストして各コンテナの定義を記述していきます。

今回は、dbというコンテナとwordpressというコンテナがネストされています。

servicesキー内のオプション

今回docker-compose.ymlで使われているものは以下の通りです。

imageコンテナのイメージを指定します。
volumesコンテナのボリュームを指定します。このセクションに記述されたvolumeは記述されているコンテナからしか参照できません。
restartdockerホストが起動した時に、コンテナを再起動するかどうかの設定
depends_onコンテナの依存関係を記述します。
このオプションが記述されたコンテナは、depends_onで指定されたコンテナが起動した後に起動します。
今回、wordpressが起動するためはdbが起動している必要があるので記述しています。
portsコンテナのポートマッピングを指定します。
env_file別ファイルに切り出した環境変数を読み込むためにパスを指定します。

volumesキー

複数のコンテナから参照可能な永続記憶領域を定義できます。

明示的に削除されるまではコンテナが削除されても消えません。

volumeはserviceキーのコンテナ定義の中でも設定することができますがそのコンテナからしか参照することができません。

今回は、db_dataというボリュームを作成してdbコンテナから参照しています。

networksキー

独自ネットワークを作成する場合に使用します。

ddocker-composeでは、このキーを設定しなくても独自のネットワークが作成されます。

docker-compseが管理していない外部のネットワークと接続する場合などに使われます。

docker-compose コマンドでコンテナの起動

docker-compose.ymlの準備ができたらコンテナを起動します。

コマンドの実行場所に注意

$ docker-compose コマンドを実行する時はdocker-compose.ymlと同じディレクトリにいる必要があります。

実行時にdocker-compose.ymlを参照しているため、ファイルが見つからず以下のようなエラーになってしまいます。

$ docker-compose images
Can't find a suitable configuration file in this directory or any
        parent. Are you in the right directory?

        Supported filenames: docker-compose.yml, docker-compose.yaml, compose.yml, compose.yaml
$ docker-compose up -d 

localhostの8000ポートにアクセスできればOKです!

docke入門 docker-composeで構築したwordpress

終了する時は以下のコマンドで終了します。

$ docker-compose down
Stopping sample-wp_wordpress_1 ... done
Stopping sample-wp_db_1        ... done
Removing sample-wp_wordpress_1 ... done
Removing sample-wp_db_1        ... done
Removing network sample-wp_default

その他使いそうなコマンド

docker-compose ps

$ docker-compose upで起動しているコンテナの一覧を表示します。

docker-compose.ymlを参照しているため、カレントディレクトリにdocker-compose.ymlがないと実行できません。

$ docker-compose ps
        Name                       Command               State                  Ports
-----------------------------------------------------------------------------------------------------
sample-wp_db_1          docker-entrypoint.sh mysqld      Up      3306/tcp, 33060/tcp
sample-wp_wordpress_1   docker-entrypoint.sh apach ...   Up      0.0.0.0:8000->80/tcp,:::8000->80/tcp

docker-compose images

$ docker-compose up で起動しているコンテナのイメージを表示します。

$ docker-compose images
      Container         Repository    Tag       Image Id       Size
---------------------------------------------------------------------
sample-wp_db_1          mysql        5.7      4181d485f650   448.2 MB
sample-wp_wordpress_1   wordpress    latest   4af01dc1f7fb   622.9 MB

参考

コンテナ

Posted by kotaro