技術選定の理由
- Dockerの勉強のため
- Laravelを使って何か作ってみたかった
発生したこと
ホームページには自作CMSを用いてブログ機能をつけた。
デプロイから1日程度は問題なく見ることができたが、データがテーブルごと吹っ飛んだ
管理アカウントも消えている...
仕方なくもう一度サーバーにログインしアカウント作成。
しかし、また消える....
解決策
以下の記事を参考にしながら、なんとか自力でやってみた
コンテナ構成(docker-compose)
コンテナは以下のように構築した
version: '3'
services:
app:
container_name: mapworks_hp
build:
context: .
dockerfile: Dockerfile
ports:
- "8000:8000"
- "5173:5173"
volumes:
- .:/var/www/html
db:
container_name: mapworks_hp_db
image: mysql:5.7
restart: always
environment:
MYSQL_ROOT_PASSWORD: ***
MYSQL_DATABASE: ***
MYSQL_USER: ****
MYSQL_PASSWORD: ***
TZ: Asia/Tokyo
volumes:
- ./data:/var/lib/mysql
ports:
- "3306:3306"
certbot:
image: certbot/certbot:latest
volumes:
- /etc/letsencrypt:/etc/letsencrypt
- /var/www/html:/var/www/html
command: ["--version"]
nginx:
image: nginx
volumes:
- ./server/conf:/etc/nginx/conf.d
- /etc/letsencrypt:/etc/letsencrypt
ports:
- "80:80"
- "443:443"
depends_on:
- app
着目点はdbのvolumesのところ
同階層にdataディレクトリを配置しといた。
この状態でdocker-compose up -d
を実行したら、中になんか生成された。
volumesとは?
~Chat GPTに聞いた~
Dockerのvolumes(ボリューム)は、Dockerコンテナとホストマシンの間でデータを永続化するための仕組みです。Dockerコンテナは通常、コンテナ内にデータを保存する仮想的なファイルシステムを持ちますが、コンテナが削除されるとデータも失われます。ボリュームを使用すると、コンテナ内のデータをホストマシン上のディレクトリにマウントし、データの永続性を確保できます。
volumesの「:」の意味について
Chat GPTに聞いた
Dockerのvolumesにおける:は、ホストマシンとコンテナ内のファイルシステムの間でデータを共有するための区切り記号です。具体的には、以下のような形式で使用されます。
とのこと。
なるほど。
結論
簡単にいうとdocker内のデータベースは再起動だったり、色々でリセットされてしまうけど
その影響を受けないところにデータベースを配置してアクセスさせればいいんじゃね?みたいなことかな..
追記
やっぱり消えた...
なのでDockerコンテナからMySQLを除いた
これでなんとかなりそう...