◆行うこと
・windowsでdocker toolbox を使用して、laravelプロジェクトを動作できる環境を作成する。
docker for windowsじゃなくてtoolboxを使う理由
Hyper-Vを有効化しちゃうとVirtualBoxが使えないようになるため
[参考にさせていただいた記事]https://goodbyegangster.hatenablog.com/entry/2018/09/09/201045
◆dockerとは
・Dockerは、Linuxのコンテナ技術を使ったもので、Linux上で何かやりたい(サーバーのインストールなど)ときに便利
・パッケージ化して配布できる
[参考にさせていただいた記事]https://knowledge.sakura.ad.jp/13265/
◆docker インストール
・Virtualboxをインストールしていない場合はインストール
[参考にさせていただいた記事]https://www.virtualbox.org/
・toolboxインストール
[参考にさせていただいた記事]https://docs.docker.com/toolbox/overview/
◆初回起動時する
・デスクトップ上のクジラのアイコンのショートカットをクリック->初期設定が行われる
・初期設定完了後、VirtualBoxを開くとdefaultというものが実行中になっており、これがdockerで使用するOS
ちなみdocker-toolboxのコマンドプロンプトでこのコマンドを打つとOSがわかる
$ docker info | grep Operating
Operating System: Boot2Docker 18.09.3 (TCL 8.2.1)
[参考にさせていただいた記事]https://teratail.com/questions/105687
◆dockerのコンテナとイメージ
[参考にさせていただいた記事]https://paiza.hatenablog.com/entry/docker_intro
◆dockerコンテナを作成していく
dockerTest ----- php
|
--- mysql
|
--- db
|
--- docker-compose.yml
sample ----- index.php
laravelProject
docker-composeは、複数のコンテナ(今回だとphpやmysql)のサービスを構築・実行する手順を自動・管理できる機能
[参考にさせていただいた記事]https://qiita.com/TsutomuNakamura/items/7e90e5efb36601c5bc8a
これを利用するためにdocker-compose.ymlを作成していきます。
version: '2'
services:
mysql:
build: ./mysql
container_name: mysql57
ports:
- '3306:3306'
environment:
MYSQL_USER: dbuser
MYSQL_PASSWORD: dbuser
MYSQL_ROOT_PASSWORD: root
volumes:
- ./db:/var/lib/mysql
command: --innodb-use-native-aio=0
php:
build: ./php
container_name: php72
ports:
- '80:80'
environment:
- APACHE_DOCUMENT_ROOT=/var/www/public
working_dir: /var/www/
volumes:
- "../sample/:/var/www/html"
depends_on:
- mysql
これでdocker-compose.ymlは一応完了
[補足(ファイルの中身の解説を書いております)]
[参考にさせていただいた記事]https://qiita.com/naga3/items/d1a6e8bbd0799159042e
serviceとcontainer_nameはわかりやすければ何でもいい。
ymlファイルはインデント(行の開始位置をずらす)で管理している。
例えば、servicesの配下にmysqlとphpがservice。
buildはこのディレクトリの中のDockerFileを元にイメージをビルドする
volumesはローカル同期するもの
- ./db:/var/lib/mysql mysqlの場合は保存領域を設定している
[参考にさせていただいた記事]https://qiita.com/onokatio/items/fcc9f8f94f8533bb030a
--innodb-use-native-aio=0 エラー防御のため
[参考にさせていただいた記事]https://webxreal.com/docker-lamp/
working_dir
はコンテナ内にログインした際のディレクトリを表している
depends_on:
- mysql
phpがmysqlに依存していることを表す。mysqlから立ち上がるので、phpからmysqlにアクセスできるようになる
[参考にさせていただいた記事]http://www.obenri.com/_webserver/document_root.html
◆mysqlディレクトリの中身の作成
docker-compose.ymlのmysqlの中で、build: ./mysqlと書いたので、同階層のmysqlディレクトリの中のDockerFileが
mysqlのコンテナの構成内容として読まれます。
FROM mysql:5.7
COPY ./my.cnf /etc/mysql/conf.d/
FROMは元となるDockerイメージの指定
COPY は設定をローカルファイルのものをコピーしております。
[参考にさせていただいた記事(DockerFileの書き方について)]https://qiita.com/soushiy/items/0945bcbc7ecce4822985
[FROMでとれるイメージは公式サイトにあります]https://hub.docker.com/_/php
[mysqld]
character-set-server=utf8
文字コードだけ指定させていただきました。
◆phpディレクトリの中身の作成
FROM php:7.2.7-apache
COPY php.ini /usr/local/etc/php/
RUN sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf
RUN sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf
RUN apt-get update \
&& apt-get install -y libmemcached-dev libmcrypt-dev zlib1g-dev wget unzip libyaml-dev \
&& docker-php-ext-install pdo_mysql mysqli mbstring zip
RUN apt-get install -y git ssh
RUN a2enmod rewrite
FROM・COPYはmysqlと同じです(php-apacheを使わせていただきました。)
ドキュメントルート(アクセス時に見に行くディレクトリ)を変更するため、sedで置換してあげる
そのあと必要なものをインストールすることにした
[Date]
date.timezone = "Asia/Tokyo"
[mbstring]
mbstring.internal_encoding = "UTF-8"
mbstring.language = "Japanese"
◆dbディレクトリは作成するだけ
◆コンテナを作成する
上の構成を参考にdockerTestと同階層にsampleを作成する。
その下にindex.phpを作成する。index.phpの中身は
コマンドを実行して、コンテナを作成する
\dockerTest>docker-compose up -d
作成が完了したら、
\dockerTest>docker-machine ip で確認してアクセスする。
phpの画面が出れば成功
◆laravelプロジェクトのpublicを指定して、アクセスする
docker-compose.ymlの中身を変える
php:
build: ./php
container_name: php72
ports:
- '80:80'
environment:
- APACHE_DOCUMENT_ROOT=/var/www/public
working_dir: /var/www/
volumes:
- "../laravelProject/:/var/www/"
depends_on:
- mysql
apacheのルートをlaravelProject配下のpublicに指定してあげて、起動したときにアクセスできるようにする
\dockerTest>docker-compose up -d
作成が完了したら、
\dockerTest>docker-machine ip で確認してアクセスする。
laravel画面が出てクリア
##おまけメモ
apache設定
<Directory /var/www/public>
OptionsOptions Indexes DirectoryIndex FollowSymLinks MultiViews
AllowOverride All
Require all granted
</Directory>
phpのDockerFIle
FROM php:7.3-apache
COPY php.ini /usr/local/etc/php/
WORKDIR /var/www
ENV APACHE_DOCUMENT_ROOT /var/www/public/
RUN sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf
RUN sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf
RUN apt-get update
RUN apt-get install -y libmcrypt-dev zlib1g-dev libzip-dev
RUN docker-php-ext-install zip pdo_mysql mysqli mbstring iconv
RUN apt-get install -y git ssh
RUN a2enmod rewrite
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
RUN curl -LO https://deployer.org/deployer.phar && mv deployer.phar /usr/local/bin/dep && chmod +x /usr/local/bin/dep