Giztech環境構築 - Hirosada/koa.co.jp GitHub Wiki

Section 11 Docker 仮想環境構築(Mac)

Docker 仮想環境構築(Mac) コンテナ型仮想環境と呼ばれるもの 特徴 ・ サーバ環境をソースコードで管理することが可能で複数人での開発に向いています。

・ VagrantとVirtualBoxを使用した仮想環境とは異なり、起動が早く、また使用するtoolごとにコンテナを分けて管理することが可能になります。

必要なものがまとまっている Docker for Mac を使用します。

準備 Docker for Macのダウンロード方法は2種類ありますが今回は、Homebrew を使用してインストールしていきます。

  1. 使用しているPCにDocker関連のパッケージ等があるかどうか確認します。 $ brew list 上記コマンド結果で表示された物の中にDockerに関するものがある方は、必ず uninstall を行ってください。

  2. 早速インストールを行います $ brew cask install docker

これだけで十分です。インストール中にパスワードを聞かれると思いますが自身のPCのパスワードを入力しEnterを押してください。

$ docker --version 上記のコマンドで問題なくバージョンが確認できたらインストール完了です。

次にLaravelのProjectを準備 dockerでもvagrant同様に、動作確認をするためLaravelレッスンで作成したTodoアプリケーションを使用します。 以下のコマンドを自身の環境に合わせて実行し、Laravelプロジェクトのコピーを docker_dirディレクトリ下に作成しましょう。

$ mkdir docker_dir && cd docker_dir $ cp -r laravel_appディレクトリまでの絶対パス ./

早速起動を行い、必要なものをGithubからCloneして来ます 起動方法は大きく分け2種類存在しますがここはエンジニアらしくコマンドで実行しましょう。

$ open -a "docker" このコマンドを実行したら上部に存在するmenuの箇所にクジラが現れ、かつdockerのwindowが表示されましたでしょうか? 表示されれば問題ありません。

次に今回dockerを使用してLaravelの環境構築をするにあたって便利な laradock というものを使用します。 LaradockのClone用URLを取得しCloneを行います。

docker_dir

$ git clone https://github.com/laradock/laradock.git $ cd laradock $ cp env-example .env プロジェクトごとにdockerマシンを区別して使うために、envファイルの DATA_PATH_HOST の設定をLaravelのプロジェクト名と同じにしておきます。

DATA_PATH_HOST=~/.laradock/data

↓ 以下に編集

DATA_PATH_HOST=~/.laradock-laravel_app/data また作成するコンテナの作業ディレクトリを指定します。 docker-compose.yml ファイルの以下に一行追加しましょう。ymlファイルはインデントが崩れているとエラーが起きてしまうため気をつけましょう。

Workspace Utilities

workspace:
  build:
    context: ./workspace
    args:
      - LARADOCK_PHP_VERSION=${PHP_VERSION}

     # 省略

      - no_proxy
    working_dir: /var/www/laravel_app # この行を追加
    volumes:
      - ${APP_CODE_PATH_HOST}:${APP_CODE_PATH_CONTAINER}${APP_CODE_CONTAINER_FLAG}
      - ./php-worker/supervisord.d:/etc/supervisord.d

laradockにあるもので必要なものだけをbuildしましょう 今回必要となるコンテナは、以下です。それ以外のコンテナは作成する必要はありません。 ・ workspace ・ mysql ・ apache ・ nginx ・ php-fpm

コマンドを実行しコンテナの作成を行います。 尚、 docker-compose というコマンドは コマンドを実行したディレクトリの docker-compose.yml ファイルの内容に従って処理を行いますので、必ず docker-compose.yml があるディレクトリに移動してコマンドを実行しましょう。

$ docker-compose build workspace mysql apache2 nginx php-fpm コンテナの作成には少々時間がかかりますのでこのタイミングで休憩でもしましょう。

コンテナの作成が終了したら、ここで一旦コンテナを起動するコマンドを実行してみましょう。

$ docker-compose up -d workspace apache2 mysql docker-composeで一元管理しているコンテナの状態を確認するコマンドは下記になります。

$ docker-compose ps 下記のように5つのコンテナが立ち上がっていること(Up)が確認できたでしょうか?

       Name                          Command               State                    Ports

laradock_apache2_1 /opt/docker/bin/entrypoint ... Up 0.0.0.0:443->443/tcp, 0.0.0.0:81->80/tcp laradock_docker-in-docker_1 dockerd-entrypoint.sh Up 2375/tcp, 2376/tcp laradock_mysql_1 docker-entrypoint.sh mysqld Up 0.0.0.0:3309->3306/tcp, 33060/tcp laradock_php-fpm_1 docker-php-entrypoint php-fpm Up 9000/tcp laradock_workspace_1 /sbin/my_init Up 0.0.0.0:2222->22/tcp ではここで一度 http://localhost へアクセスしてみましょう。 何も表示されないはずですのでブラウザで確認できるようにまずは、apacheの設定ファイルを編集していきます。

Apacheの設定ファイルを編集 対象ファイルは、laradock/apache2/sites/default.apache.conf です。 Vagrantでの環境構築にてApacheの設定ファイルを編集した際と同様の内容の編集を行っていきます。

<VirtualHost *:80>

変更点①

ServerName laradock.dev

↓ 以下に編集

ServerName localhost

変更点②

DocumentRoot /var/www/

↓ 以下に編集

DocumentRoot /var/www/laravel_app/public/ Options Indexes FollowSymLinks

変更点③

<Directory "/var/www/">

↓ 以下に編集

<Directory "/var/www/laravel_app/public"> AllowOverride All <IfVersion < 2.4> Allow from all = 2.4> Require all granted

設定ファイルを編集した際は再度 build を実行することで設定ファイルの変更内容が反映されたコンテナを再生成してくれます。

build でコンテナの生成・再生成をしたら次は up を実行しコンテナを起動していきますが、docker-compose up で起動した場合、Logを吐き出し続け入力を受け付けない状態となり不便なので、バックグラウンドで起動をし続けられるよう -d オプションを付けて実行しましょう。

$ docker-compose up -d workspace apache2 早速ブラウザにて確認を行いたいと思います。http://localhost と入力をしましょう。 画面にLaravelのwelcomeページが表示されましたでしょうか??

では次にDBの設定を行っていきます。

DBの設定 laravel_app ディレクトリ下に .env というファイルが存在しているかと思います。このファイルを以下に変更しましょう。

DB_CONNECTION=mysql DB_HOST=mysql # 変更 DB_PORT=3306 DB_DATABASE=default # 変更 DB_USERNAME=root # 変更 DB_PASSWORD=root # 変更 変更が完了したら、動作の確認としてマイグレーションを実行していきましょう。

実行方法としてコンテナ内に入ってコマンドを実行する方法と、コンテナの外からコンテナの中に対してコマンドを実行する2つの方法がありますのでどちらも試してみましょう。

  1. コンテナ内に入ってコマンドを実行 $ docker-compose exec サービス名 bash サービス名を指定することでコンテナの中に入ることが可能です。 今回は サービス名に workspace を指定しましょう。 実際にコマンドを実行した後の表示は以下のような内容になります。

root@XXXXXXXXX:/# XXXXXXXXX という文字は、各々の環境によって異なります。

コンテナ内にログインしたら php artisan migrate を実行してみましょう。 マイグレーションが正常に実行できましたでしょうか?? 実行できたらもう一つの方法を試すために一度 php artisan migrate:reset を実行してテーブルを削除して exit でコンテナから抜けましょう。

  1. コンテナ外からコンテナ内にコマンドを実行 では次にコンテナ外からマイグレーションを実行してみましょう。

docker-compose.ymlがあるディレクトリにて

$ docker-compose exec workspace php artisan migrate 正常にマイグレーションを実行できましたでしょうか??

では http://localhost と入力して問題なく画面が表示されその後ユーザーの作成ができればApacheを使用した動作確認は終わりとなります。 次に Nginx を使用してアプリケーションを動かしていきます。

Nginxのファイルを編集 ApacheとNginxは同じWebサーバソフトウェアでどちらも80番ポートを使用するよう設定されているため、この設定を変更しないと同時に起動することはできません。 今回は設定自体は変更せずにApacheコンテナの起動を停止して対応します。

$ docker-compose stop apache2 編集するファイルは、nginx/sites/default.conf です。

server {

listen 80 default_server;
listen [::]:80 default_server ipv6only=on;

# 以下のように編集をしてください
server_name localhost;
root /var/www/laravel_app/public;

以下省略

} 次に以下のコマンドでコンテナの再ビルドを行いましょう。

docker-compose up -d --build nginx 再度ブラウザにて http://localhost で確認してください。 Apache同様に画面が表示され、ユーザーの作成ができれば動作確認は完了となります。

⚠️ **GitHub.com Fallback** ⚠️