業務でVirtualBox利用したので、仮想環境ついでにやってみることに。
以前からDockerに興味はあったが壁が高いかなと思っててできていませんでした。ちなみに自分のエンジニアレベルは初級です。
Docker for Macのインストール
下記にアクセス。
https://docs.docker.com/desktop/mac/install/
docker.dmgファイルをダウンロード。
少し待つ。
終わったらダブルクリックで展開。検証される。
Applicationsフォルダへ、ドラック&ドロップする。

が終わると、インストール完了。
Dockerを開く。

開いてもいいですかと聞かれる。開く。

右下の「I accept the terms」
起動できているか確認。
ターミナルで下記表示されれば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を入力。

1番左のPersonalを選択する。
メールが飛んでくるので、verifyする。
このページが表示されればOK。
インストールしたDockerでDockerHubアカウントにログイン
Mac上部にあるDockerアイコン(くじら)>Sign inを押す

許可押すとログイン状態に。

ターミナルで確認は下記。
[machidaryo ~]$ docker login
Authenticating with existing credentials...
Login Succeeded
docker-compse.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の作成
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
フォルダ構成
他設定ファイル
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>
空
※任意で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コンテナに接続できるようにする。
:
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)]>