Docker Desktopが有料化に伴ってMac環境にてVagrant+Dockerで構築してみる話

Dockerが2022年1月31日をもって、条件を満たす企業が有料化することが大きなニュースになりました。

250人以上または11億円以上の企業でDocker Desktopを利用する場合には、有料となります。

個人的利用、教育的利用、非商用利用、オープンソースプロジェクトに対しては無料のままではありますが、上記条件を満たす企業は1人1ヶ月$5からの有料の購読が必須になります。

プランはDocker Pro, Docker Team, Docker Businessの3プランが存在するようです。

https://www.docker.com/pricing

Mac/Windowsでのローカル環境でDockerを利用する場合はほぼほぼ必須のようなDocker Desktopであり今まで無料で提供していたのも驚きです。

こちらは用途に合わせて購入をお勧めしますが、正直有料プランの提供ほど必要でなかったり学習のためにDocker Desktopを入れてそのまま規約違反になるのも嫌だったりする人もいるかもしれません。

Docker自体はとても素晴らしいものなので、今回はDocker Desktopを利用せずにDocker環境を構築する手順を紹介しようと思います。

Vagrant環境にDockerをインストールしてLaravelを構築してみよう

ここではこれまでLaradock(Docker環境)でLaravelを構築していたプロジェクトを例として、Vagrant + Virtualbox上に構築してみます。

Laradock自体はLaravelの環境構築を楽にするものなのでこちらを参照にしてみてください。

インストール

まずはVagrant + Virtualboxをインストールしましょう。

必要なプラグインをインストールします。vagrant-vbguest はホストOSとゲストOSのGuestAdditionsのバージョンを自動で合わせるために利用します。

vagrant plugin install vagrant-docker-compose
vagrant plugin install vagrant-vbguest

2.Vagrantの起動

https://github.com/ateliee/vagrant-docker-exampleからサンプルコードをダウンロードし、Vagrantを起動します。

vagrant up

うまく起動できるとvagrant ssh にてログインすることができると思います。

3.Laradockの初期設定

今回のサンプルではPHP8を利用するため、環境整備を行います。 まずは設定変数の準備を行います。

cd laradock
cp .env.example .env

下記を更新。PHPのバージョンは今回利用するプロジェクトに合わせての設定になります。

- APP_CODE_PATH_HOST=../
+ APP_CODE_PATH_HOST=../sample
- PHP_VERSION=7.4
+ PHP_VERSION=8.0

設定が終わったら、dockerコンテナを起動します。

docker-compose up -d nginx mysql

4.サンプルlaravelプロジェクトの初期設定

今回はdrehimself/laravel-shopping-cart-exampleをPHP8/Laravel8に簡易的に対応したプロジェクトを 設置してあるのでそちらを利用します。

php/composerを利用するためにvagrant -> dockerコンテナの順にssh接続を行います。

# vagrant にssh接続
vagrant ssh
# dockerのworkspaceにssh
cd share/laradock
docker-compose exec --user=laradock workspace bash

packageのインストールを行います。

composer install

DB作成・サンプルデータを投入します。

php artisan key:generate
php artisan migrate
php artisan db:seed

これでホストマシンから http://192.168.56.10 に接続できれば完了です。

詳しい説明とサンプルコードはgithubに上がっているので、よければ利用してみてください。

https://github.com/ateliee/vagrant-docker-example

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です