LoginSignup
0
0

Docker×Laravel×MySQLでHPを作ったらデータが全て消えた話

Last updated at Posted at 2024-02-26

技術選定の理由

  • 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を除いた
これでなんとかなりそう...

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0