【備忘録】MAMPからDockerへの移行ガイド 


# 【備忘録】MAMPからDockerへの移行ガイド

### はじめに
こんにちは！PHP開発をしているエンジニアです。今回は、MAMPからDockerへの開発環境移行について、実際の経験をもとに解説していきます。

## 移行を決意した理由

### 現状の課題
- **複数プロジェクトによるストレージ容量の圧迫**
- **プロジェクトごとの環境管理が面倒臭い**

### 解決した点
- **開発環境の向上(体感です)**
- **プロジェクト単位での環境分離**

## 事前準備

### 1. 既存環境の棚卸し
以下のコマンドで現在の開発環境のバージョンを確認します。

```
# PHPバージョンの確認
php -v

# MySQLバージョンの確認
mysql --version

# Apacheバージョンの確認
httpd -v
```

### 2. 必要なバックアップの取得
既存データをバックアップします。

```
# データベースのバックアップ
mysqldump -u root -p database_name > backup.sql

# プロジェクトファイルのバックアップ
cp -r /Applications/MAMP/htdocs/your_project ./backup/
```

## Docker環境の構築

### 1. プロジェクト構成

プロジェクトのディレクトリ構造を以下のように構築します。

```
your_project/
├── docker-compose.yml
├── docker/
│   ├── php/
│   │   └── Dockerfile
│   ├── mysql/
│   │   └── my.cnf
│   └── nginx/
│       └── default.conf
├── src/
└── .env
```

### 2. docker-compose.ymlの設定

以下は `docker-compose.yml` の基本的な設定例です。

```yaml
version: '3.8'

services:
  app:
    build:
      context: .
      dockerfile: docker/php/Dockerfile
    volumes:
      - ./src:/var/www/html
    depends_on:
      - db

  web:
    image: nginx:alpine
    ports:
      - "80:80"
    volumes:
      - ./src:/var/www/html
      - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - app

  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'
      MYSQL_DATABASE: '${DB_DATABASE}'
      MYSQL_USER: '${DB_USERNAME}'
      MYSQL_PASSWORD: '${DB_PASSWORD}'
    volumes:
      - mysql-data:/var/lib/mysql
    ports:
      - "3306:3306"

volumes:
  mysql-data:
```

### 3. PHPのDockerfile

PHPのDockerfileで必要なパッケージをインストールします。

```dockerfile
FROM php:8.1-fpm

RUN apt-get update && apt-get install -y \
    git \
    curl \
    libpng-dev \
    libonig-dev \
    libxml2-dev \
    zip \
    unzip
```

## 移行手順

### 1. 環境構築

Dockerコンテナのビルドと起動を行います。

```
# Dockerコンテナのビルド
docker-compose build

# Dockerコンテナの起動
docker-compose up -d

# コンテナの状態確認
docker-compose ps
```

### 2. データの移行

バックアップしたデータを新しいDocker環境にインポートします。

```
# データベースのインポート
docker exec -i your_project_db_1 mysql -u root -p database_name < backup.sql

# プロジェクトファイルの配置
cp -r backup/* ./src/
```

## つまづきポイントと解決策

### 1. パーミッション関連

`storage`ディレクトリの権限を適切に設定します。

```
docker-compose exec app chmod -R 777 storage
docker-compose exec app chmod -R 777 bootstrap/cache
```

### 2. ネットワーク関連

ポートが重複している場合は、`docker-compose.yml`内でポートを変更します。

```yaml
ports:
  - "8080:80"  # 80番ポートが使用中の場合
```

### 3. 環境変数の設定

`.env` ファイルに必要なデータベース設定を記述します。

```
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=your_database
DB_USERNAME=root
DB_PASSWORD=your_password
```

## 移行後の運用とメリット

### 日常的なコマンド

以下はDocker環境での一般的な操作コマンドです。

```
# 開発環境の起動
docker-compose up -d

# コンテナのログ確認
docker-compose logs -f

# 開発環境の停止
docker-compose down
```

### メリット

- **プロジェクト単位での環境分離が可能**
- **バージョン管理が簡単**

## まとめ

MAMPからDockerへの移行は大変だろうなと思っていましたが1度やってみたらそんなにでもなかったかなと思います。もし移行を検討中の方は、ぜひこのガイドを参考にしてみてください。

## 参考資料

- [Docker公式ドキュメント](https://docs.docker.com/)
- [Docker Compose公式ドキュメント](https://docs.docker.com/compose/)

## 採用拡大中！

アシストエンジニアリングでは一緒に働くフロントエンド、バックエンドのエンジニア仲間を大募集しています！
少しでも興味ある方は、カジュアル面談からでもぜひお気軽にお話ししましょう！
お問い合わせはこちらから↓
[https://official.assisteng.co.jp/contact/](https://official.assisteng.co.jp/contact/)