# データの永続化 docker volume 周り

## Wordpress においては MySQL が扱かうデータがサービス、見た目に大きく影響を与える

当然のことだが、Wordpress は MySQL をデータベース管理システムとして使用している。これによって管理されるデータには、記事の情報やそれに伴う画像等のコンテンツ、さらにはプラグインの設定や、サイトのパスワードといった情報も含まれる。

そのため、MySQL, Wordpress(NGINX + PHP + Wordpress ) という二つのコンテナを作り、それぞれを例えば docker-compose で連携させる場合、**「MySQL 側のデータが重要」**&#x306B;なってくる。特に、プラグインの情報が含まれるということが大きい。プラグインによって Wordpress のサービスは大きく変わってくる。見た目すらも大きく変わる。

### 普通に立てた MySQL 用 Docker コンテナ内のデータベースは、container を停止すると、消える

しかし Docker Container を停止すると、データベースのデータは消える。これでは Wordpress の開発に問題がある。なぜなら、DB の内容も、Wordpress の開発に影響してくるからだ。

### 一つの方法としての volume を使った永続化

まず volume を作る。これはホスト上に実際に作られる。(Docker for Mac の場合、仮想システムにできるようなので、直接 cd 等でアクセスできるわけではない模様。)

```
docker volume create --name testdatavol
docker volume create --name volume名
```

できたかどうか調べる。

```
docker volume ls | grep testdatavol # grep でフィルタリングしてみた
```

VOLUME NAME に対象の名前をもった Volume ができていれば OK。次にその volume の詳細を調べてみる。

```
docker volume inspect testdatavol
docker volume inspect vol名
```

```
[
    {
        "CreatedAt": "2018-06-06T10:43:05Z",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/testvolume/_data", # ただし仮想環境の path
        "Name": "testvolume", # マウントさせるとき等に指定する名前
        "Options": {},
        "Scope": "local"
    }
]
```

できている。

### Volume をマウントして run してみる

```
docker run -it -v testvolume:/test_volume ubuntu:latest /bin/bash
docker run -it -v volume名:コンテナ内のどこに配置するか イメージ名 /bin/bash
```

これで ubuntu にログインした後に ls すると、`/test_volume` ができていることがわかる。

さらにここにファイルを作ってみる。

```
cd test_volume && touch test
```

で

```
exit # container から抜ける
```

でもう一回 volume を乗っけて実行すると

```
docker run -it -v testvolume:/test_volume ubuntu:latest /bin/bash
```

/test\_volume/test がある。

けど volume をマウントしないと

```
docker run -it ubuntu:latest /bin/bash
```

/test\_volume/test がない。

変更がしっかり永続化できている。

### Docker Compose の場合の一例

```yaml
version: '3.3'

services:
   db:
     image: mysql:5.7
     volumes: # 上の階層で指定した db_data を使いますよ
       - db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: somewordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress

   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     ports:
       - "8000:80"
     restart: always
     volumes:
       - ./public_html/:/var/www/html/
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress
volumes: 
    db_data: # まずこの名前で volume を作る

```

compose の場合は少し特殊。だが、volume で永続化しているのは同じ。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://super-yusuke.gitbook.io/wordpress-memo/dtano-docker-volume-ri.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
