LoginSignup
0
1

More than 1 year has passed since last update.

DockerでLaravel環境構築

Last updated at Posted at 2022-03-06

業務でVirtualBox利用したので、仮想環境ついでにやってみることに。
以前からDockerに興味はあったが壁が高いかなと思っててできていませんでした。ちなみに自分のエンジニアレベルは初級です。

Docker for Macのインストール

下記にアクセス。
https://docs.docker.com/desktop/mac/install/
Install Docker Desktop on Mac.png
docker.dmgファイルをダウンロード。
少し待つ。

終わったらダブルクリックで展開。検証される。
Pasted Graphic 2.png
Applicationsフォルダへ、ドラック&ドロップする。
drag and drop.png
Pasted Graphic 4.png
が終わると、インストール完了。

Dockerを開く。
Pasted Graphic 7.png
開いてもいいですかと聞かれる。開く。
Pasted Graphic 6.png
Docker Desktop needs privileged access.png
Pasted Graphic 9.png
右下の「I accept the terms」
Our Service Agreement has Changed.png
No containers running.png
起動できているか確認。
ターミナルで下記表示されればOK。
[machidaryo ~]$ docker version
Client:
Cloud integration: v1.0.22
Version: 20.10.12
API version: 1.41
Go version: go1.16.12
Git commit: e91ed57

Docker Hubのアカウント作成

アカウントがないとイメージのpullに制限がかかるらしいので、作成する。

https://hub.docker.com アクセス。
ID、メールアドレス、passを入力。
Build and Ship any.png
Pasted Graphic 13.png
Enter Your Password.png
1番左のPersonalを選択する。
Business.png
Please verify your email address.png
メールが飛んでくるので、verifyする。
(Docker) Please confirm your email address.png
このページが表示されればOK。
Download the desktop application.png

インストールしたDockerでDockerHubアカウントにログイン

Mac上部にあるDockerアイコン(くじら)>Sign inを押す
Docker Desktop is running.png

許可押すとログイン状態に。
You're Almost Done!.png

ターミナルで確認は下記。

[machidaryo ~]$ docker login
Authenticating with existing credentials...
Login Succeeded

docker-compse.yamlを作る

docker-compose.yaml
version: "3"
services:
  db:
    image: mariadb:10.4
    container_name: "laravel-db"
    volumes:
      - ./data:/var/lib/mysql
      - ./db/my.cnf:/etc/mysql/conf.d/my.cnf
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: laravel
      MYSQL_USER: docker
      MYSQL_PASSWORD: docker
      TZ: 'Asia/Tokyo'
    ports:
      - "3306:3306"
  php:
    build: ./php
    container_name: "laravel-php"
    volumes:
      - ./source:/var/www/html
      - ./php/vhost.conf:/etc/apache2/conf-enabled/vhost.conf
    ports:
      - "8080:80"

Dockerfileの作成

./php/Dockerfile
FROM php:7.4.28-apache #FROMでベースのDockerイメージを決める。
RUN apt-get update \
  && apt-get install -y zlib1g-dev \
  && apt-get install -y zip unzip \
  && apt-get install -y libonig-dev \
  && apt-get -y install libzip-dev \
  && docker-php-ext-install pdo_mysql mysqli mbstring zip \
  && docker-php-ext-enable mysqli \
  && a2enmod rewrite

# composerのインストール
RUN curl -sS https://getcomposer.org/installer | php \
  && mv composer.phar /usr/local/bin/composer \
  && chmod +x /usr/local/bin/composer

WORKDIR /var/www/html

ENV COMPOSER_ALLOW_SUPERUSER 1
ENV COMPOSER_HOME /composer
ENV PATH $PATH:/composer/vendor/bin
#タイムゾーン設定
ENV TZ=Asia/Tokyo

フォルダ構成

image.png

他設定ファイル

vhost.conf
NameVirtualHost *:80
<VirtualHost *:80>
  ServerAdmin webmaster@localhost
  ServerName localhost
  DocumentRoot /var/www/html/public
  <Directory "/var/www/html/public">
    Options Indexes FollowSymLinks
    DirectoryIndex index.php
    AllowOverride All
    Require all granted
    Order allow,deny
    Allow from all
  </Directory>
</VirtualHost>
my.cnf
空
※任意でDB設定を

コンテナを立ち上げる

No package 'oniguruma' found エラー発生。下記参考で解決。
php7.4-apacheイメージのビルド時に "No package 'oniguruma' found" エラーが発生する際の対処

[machidaryo laravel]$ docker-compose run php composer create-project --prefer-dist laravel/laravel . "6.*"
:
:
Application key set successfully.

[machidaryo laravel]$ docker-compose up -d
[+] Running 13/13
 ⠿ db Pulled

[machidaryo laravel]$ docker ps
CONTAINER ID   IMAGE         COMMAND                  CREATED          STATUS          PORTS                  NAMES
ce8a3a9d0645   laravel_php   "docker-php-entrypoi…"   14 seconds ago   Up 12 seconds   0.0.0.0:8080->80/tcp   laravel-php

コンテナ起動しない
→設定ファイルの記述ミスのためやった。
 phpが起動しなかったのは、vhost.confのミス。
 dbが起動しなかったのは、yamlのミス。
 →いけた!

[machidaryo laravel]$ docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED       STATUS                  PORTS                    NAMES
31faf0174549   mariadb:10.4   "docker-entrypoint.s…"   3 hours ago   Up 3 hours              0.0.0.0:3306->3306/tcp   laravel-db
8fdb020651e1   laravel_php    "docker-php-entrypoi…"   3 hours ago   Up 3 hours              0.0.0.0:8080->80/tcp     laravel-php

ちなみにこれで、なにがおかしいのか分かった。logs重要。

[machidaryo laravel]$ docker logs laravel-php

phpコンテナからdbコンテナに接続できるようにする。

.source/.envファイルの修正
:
DB_CONNECTION=mysql
DB_HOST=db ←修正
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=docker ←修正
DB_PASSWORD=docker ←修正
:

phpコンテナに入って接続確認。migrate成功すればOK。

[machidaryo laravel]$ docker exec -it laravel-php bash
root@8fdb020651e1:/var/www/html# php artisan migrate
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
:
:
Migrated:  2019_08_19_000000_create_failed_jobs_table (0.04 seconds)

その他気になったこと

laravel開発していくのははsource/を触ればよい?
→そう

db見るには?

[machidaryo laravel]$ docker exec -it laravel-db bash
root@31faf0174549:/# mysql -u root -p         
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 12
Server version: 10.4.24-MariaDB-1:10.4.24+maria~focal mariadb.org binary distribution
:
:
MariaDB [(none)]>

参考

udemy 駆け出しエンジニアのためのDocker入門

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