taro373
@taro373

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Dockerで起動したWordpressのデータはどこに保存されている?

Docker Desktop for Macを使ってMac上でDockerを起動しました。

docker hubからWordpressのdocker-compose.ymlをコピーして、

version: '3.1'

services:

  wordpress:
    image: wordpress
    restart: always
    ports:
      - 8080:80
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: exampleuser
      WORDPRESS_DB_PASSWORD: examplepass
      WORDPRESS_DB_NAME: exampledb
    volumes:
      - wordpress:/var/www/html

  db:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_DATABASE: exampledb
      MYSQL_USER: exampleuser
      MYSQL_PASSWORD: examplepass
      MYSQL_RANDOM_ROOT_PASSWORD: '1'
    volumes:
      - db:/var/lib/mysql

volumes:
  wordpress:
  db:

コンテナを起動しました

$ docker compose up -d

 ブラウザで「http ://localhost:8080/」にアクセスすると、言語選択のあと、ユーザIDやパスワードの設定画面となり、Wordpressの画面が表示されました。

データベースに関しては、docker-compose.ymlに「- db:/var/lib/mysql」とありましたが、
実体はどこにあるのでしょうか。
てっきり、dbというディレクトリが作成されるのかと思ったのですが、docker-comose.ymlのあるディレクトリには、ディレクトリは作成されていませんでした。
「docker compose down」でコンテナを停止して、再度「up」で起動すると、投稿した記事は反映されいていたので、どこかには残っていると思いましたが、見つけられませんでした。

~/Documents/sample/7/7-2$ ls                  
docker-compose.yml

下記の部分は、コロンの左側が、PC側のディレクトリではないのでしょうか?

    volumes:
      - wordpress:/var/www/html
     および
    volumes:
      - db:/var/lib/mysql
1

3Answer

mkdir -p /var/www/html
mkdir /var/db

volumes: /var/www/html:/var/www/html
volumes: /var/db:/var/lib/mysql

左辺はコンテナ外の実在するディレクトリを指定しないと、コンテナ内では共有出来なくとも、右辺のフォルダーをコンテナ内に作成して、installします。
 結果、コンテナ内にdbファイルが生成されます。
 偶然、左辺のディレクトリがあれば、コンテナ内外が共有されます。

p.s. 左辺は一般的にローカルが指定されますが、ネットワークボリュームでもドライバーがあれば可能です。

3Like

あまり詳しくはないのですが…
「:」の右側以降は、左側のディレクトリで起動?したものの内部ディレクトリを指していると思われます。…が、この場合dbディレクトリが見つからないとなればちょっと分からないです…。
データとして触りたいというのであれば、コンテナが起動している時に

docker compose exec db mysql

してmysqlを起動し、その中でSELECT文等叩いて確認することになるかと思います。
こんな回答ですみません…。

追記

上記設定でどこに存在しているかは正直なところ分からなかったのですが、分かる場所にデータを置かせることについては分かりました。

  db: 
    # ...
    volumes:
      - ./db/data/:/var/lib/mysql

このように設定すればdocker-compose.ymlがあるディレクトリ内にDBのデータを保持している実体が生成されるはずです。

1Like

Comments

  1. @taro373

    Questioner

    てっきりできていると思ったのですが、ない.... です
    教えていただいた方法を試してみます
  2. @taro373

    Questioner

    教えていただいた書き方に変えてみたところ、ディレクトリが出来ました
    - ./data/wordpress:/var/www/html
    - ./data/db:/var/lib/mysql

    自分では作成していませんが、ディレクトリが作成され、WordPress用のファイルが作成されていました。
    DockerHubからコピーした書き方だと、どこに出来ていたのでしょう。
    探してみます

    ~/Documents/sample/7/7-2$ ls data
    db wordpress
    ~/Documents/sample/7/7-2$ ls data/wordpress
    wp-admin
    ~/Documents/sample/7/7-2$ ls data/wordpress/wp-admin
    about.php js options-writing.php
    admin-ajax.php link-add.php options.php

マウントには「ボリュームマウント」と「バインドマウント」があり、ボリュームマウントでは
DockerEngineが管理している領域内にボリュームを作成してデータが保存されるのですね。
私が読んだ書籍では、ボリュームマウントがさらっと書いてありましたが、しっかり理解してから使いたいですね。
ボリュームができたかどうかは、dockerコマンドで確認ができました。
みなさん、回答いただきありがとうございました。

$ docker volume ls
DRIVER    VOLUME NAME
local     7-2_db
local     7-2_wordpress
1Like

Your answer might help someone💌