LoginSignup
0
1

chatGPTの力を借りてLaravelのdocker環境を作成した

Posted at

概要

vagrantとvirtualboxで開発環境を作り、Laravelでホームページを作成していたのですが
起動がめんどくさくなったので重い腰を上げてdockerに切り替えようと思いました

だけどdockerほぼ初めて使うしdockerファイルの作り方がよくわからん
結局何を書けばいいんだ???となったので
じゃあchatGPT先生に聞いてみるかというのが経緯です

準備

WSLを有効化
Ubuntu 22.04.1を導入

この辺りの記事を参考に、docker desctopを使わないdocker環境を構築しました
Windows で Docker Desktop を使わない Docker 環境を構築する (WSL2)
wsl2にインストールしたDockerを自動起動する

聞いてみる

準備が完了したのでとりあえずchatGPTに聞いてみました

image.png
image.png

わぁ、すごい親切

条件をちょっと詳しく書く

先ほどの回答だとLaravelプロジェクトを1から作成する前提だったので
既存のプロジェクトを使いたいよ、ということと
PHPのバージョン、DBサービスを指定しました

image.png
image.png

で、実際に提案された内容が以下(原文そのまま)

DockerFile
FROM php:8.0-fpm

RUN apt-get update && apt-get install -y \
    libonig-dev \
    libzip-dev \
    unzip \
    && docker-php-ext-install pdo_mysql \
    && docker-php-ext-install zip \
    && docker-php-ext-install opcache

RUN pecl install xdebug \
    && docker-php-ext-enable xdebug

RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

WORKDIR /var/www/html

COPY . /var/www/html

RUN chown -R www-data:www-data /var/www/html/storage /var/www/html/bootstrap/cache

RUN chmod -R 775 /var/www/html/storage /var/www/html/bootstrap/cache

docker-compose.yml
version: "3"

services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
    image: app
    container_name: app
    ports:
      - "8000:80"
    volumes:
      - .:/var/www/html
    depends_on:
      - db
    networks:
      - app-network

  db:
    image: mysql:8.0
    container_name: db
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: db
      MYSQL_USER: user
      MYSQL_PASSWORD: pass
    ports:
      - "3306:3306"
    networks:
      - app-network

networks:
  app-network:
    driver: bridge

Xdebugとcomposerを言わなくても入れてくれているの親切だなと思いました

ページが開けない

とりあえずコレをそのままコピーして立ち上げたが、アクセスしてもページが開けない
ので解決策も聞いてみた

image.png
image.png
image.png
image.png

アホの子っぷりを晒してるようで恥ずかしいが
色々聞いてみたけど解決できない

...と、ここまで聞いた後、あ、WEBサーバー入ってねぇじゃんと気付きが降りてくる

聞き直す

image.png

Dockerfile
FROM php:8.0-apache

# 必要なPHPの拡張機能をインストールする
RUN docker-php-ext-install pdo_mysql

# Apacheの設定を変更する
RUN sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf \
    && sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf \
    && a2enmod rewrite

# ドキュメントルートを設定する
ENV APACHE_DOCUMENT_ROOT /var/www/html/public
ENV APACHE_LOG_DIR /var/log/apache2

# ドキュメントルートをApacheのデフォルト設定に設定する
RUN sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf \
    && sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf

# Composerをインストールする
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

# ワーキングディレクトリを設定する
WORKDIR /var/www/html

apache入りでDockerfileが提案されました。
ただコレを見ると重複部分あるしちょっと変だな?となったので
最初に提案されたDockerfileと合わせて修正を行った

完成

最終的にちょっと手を加えて内容をこうしました

Dockerfile
FROM php:8.0-apache

# 必要パッケージインストール
RUN apt-get update && apt-get install -y \
    libonig-dev \
    libzip-dev \
    unzip \
    && docker-php-ext-install pdo_mysql \
    && docker-php-ext-install zip \
    && docker-php-ext-install opcache

# XDEBUG
RUN pecl install xdebug \
    && docker-php-ext-enable xdebug

# composerインストール
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

# ドキュメントルートを設定する
ENV APACHE_DOCUMENT_ROOT /var/www/html/public
ENV APACHE_LOG_DIR /var/log/apache2

# ドキュメントルートをApacheのデフォルト設定に設定する
RUN sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf \
    && sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf \
    && a2enmod rewrite

# 作業ディレクトリ設定
WORKDIR /var/www/html
COPY . /var/www/html
RUN chown -R www-data:www-data /var/www/html/storage /var/www/html/bootstrap/cache
RUN chmod -R 777 /var/www/html/storage /var/www/html/bootstrap/cache
docker-compose.yml
version: "3"

services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
    image: app
    container_name: app
    ports:
      - "8000:80"
    volumes:
      - .:/var/www/html
    depends_on:
      - db
    networks:
      - app-network

  db:
    image: mysql:8.0
    container_name: db
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: db
      MYSQL_USER: user
      MYSQL_PASSWORD: pass
    ports:
      - "3306:3306"
    networks:
      - app-network

networks:
  app-network:
    driver: bridge

起動してみると成功!
ここまで大体2~3時間くらいで終わりました。
簡単な環境を作るのに凄く心強かったです。

0
1
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
1