docker-composeでcentosベースのlaravel開発環境を構築してみる
前提条件
- ホスト側でdockerとdocker-composeが使えること
- ゲスト側OSはcentos7
- フレームワークはlaravel5.6
- データベースはmysql5.7
ホスト側ファイル構成
/laraveldev
/web
/Dockerfile
/docker-compose.yml
web用コンテナイメージの準備
$ mkdir laraveldev $ mkdir laraveldev/web $ vim laraveldev/web/Dockerfile
FROM centos:7 # apacheとphp7.2のインストール RUN yum -y update RUN yum -y install epel-release unzip vim git RUN yum -y install http://rpms.remirepo.net/enterprise/remi-release-7.rpm RUN yum -y --enablerepo=remi-php72 install php php-devel php-mbstring php-mysql php-gd php-pdo php-pear php-process php-soap php-xml php-bcmath php-pecl-zip RUN yum -y install httpd-devel # composerのインストール WORKDIR /tmp RUN curl -sS https://getcomposer.org/installer | php RUN mv composer.phar /usr/local/bin/composer RUN useradd developer RUN groupadd web RUN gpasswd -a apache web RUN gpasswd -a developer web RUN chown -R apache:web /var/www RUN chmod g+ws -R /var/www # composerでlaravelのインストール USER developer RUN composer global require "laravel/installer" RUN echo 'PATH=$PATH:$HOME/.composer/vendor/bin' >> ~/.bashrc RUN source ~/.bash_profile # プロジェクトの作成 WORKDIR /var/www RUN composer create-project --prefer-dist laravel/laravel mysite "5.6.*" USER root RUN chmod g+ws -R /var/www/mysite # apacheの設定変更 RUN sed -i -e 's#DocumentRoot "/var/www/html"#DocumentRoot "/var/www/mysite/public"#' /etc/httpd/conf/httpd.conf RUN echo $'\n\ <Directory "/var/www/mysite/public">\n\ AllowOverride All\n\ Require all granted\n\ </Directory>\n\ ' >> /etc/httpd/conf/httpd.conf RUN systemctl enable httpd # データベースの設定 RUN sed -i -e 's/DB_HOST=127.0.0.1/DB_HOST=db/' \ -e 's/DB_DATABASE=homestead/DB_DATABASE=dbmysite/' \ -e 's/DB_USERNAME=homestead/DB_USERNAME=umysite/' \ -e 's/DB_PASSWORD=secret/DB_PASSWORD=password/' \ /var/www/mysite/.env RUN sed -i -e "s/env('DB_HOST', '127.0.0.1')/env('DB_HOST', 'db')/" \ -e "s/env('DB_DATABASE', 'forge')/env('DB_DATABASE', 'dbmysite')/" \ -e "s/env('DB_USERNAME', 'forge')/env('DB_USERNAME', 'umysite')/" \ -e "s/env('DB_PASSWORD', '')/env('DB_PASSWORD', 'password')/" \ /var/www/mysite/config/database.php CMD ["/sbin/init"]
docker-compose化
$ vim laraveldev/docker-compose.yml
version: '3.3' services: db: image: mysql:5.7 volumes: - db_data:/var/lib/mysql ports: - 3306:3306 restart: always environment: MYSQL_ROOT_PASSWORD: password MYSQL_DATABASE: dbmysite MYSQL_USER: umysite MYSQL_PASSWORD: password web: depends_on: - db build: ./web volumes: - web_data:/var/www/mysite ports: - 80:80 restart: always volumes: db_data: web_data:
ビルドと起動
$ cd laraveldev $ docker-compose build $ docker-compose up -d