概要
vagrantとvirtualboxで開発環境を作り、Laravelでホームページを作成していたのですが
起動がめんどくさくなったので重い腰を上げてdockerに切り替えようと思いました
だけどdockerほぼ初めて使うしdockerファイルの作り方がよくわからん
結局何を書けばいいんだ???となったので
じゃあchatGPT先生に聞いてみるかというのが経緯です
準備
WSLを有効化
Ubuntu 22.04.1を導入
この辺りの記事を参考に、docker desctopを使わないdocker環境を構築しました
Windows で Docker Desktop を使わない Docker 環境を構築する (WSL2)
wsl2にインストールしたDockerを自動起動する
聞いてみる
準備が完了したのでとりあえずchatGPTに聞いてみました
わぁ、すごい親切
条件をちょっと詳しく書く
先ほどの回答だとLaravelプロジェクトを1から作成する前提だったので
既存のプロジェクトを使いたいよ、ということと
PHPのバージョン、DBサービスを指定しました
で、実際に提案された内容が以下(原文そのまま)
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
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を言わなくても入れてくれているの親切だなと思いました
ページが開けない
とりあえずコレをそのままコピーして立ち上げたが、アクセスしてもページが開けない
ので解決策も聞いてみた
アホの子っぷりを晒してるようで恥ずかしいが
色々聞いてみたけど解決できない
...と、ここまで聞いた後、あ、WEBサーバー入ってねぇじゃんと気付きが降りてくる
聞き直す
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と合わせて修正を行った
完成
最終的にちょっと手を加えて内容をこうしました
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
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時間くらいで終わりました。
簡単な環境を作るのに凄く心強かったです。