はじめに
macに標準搭載されているApacheを使用していたのだけれども、バンドルされているPHPのバージョンなどをあげれないなど仕様上の問題があるので、ほかの方法を検討。そこで、Dockerを使用すれば、色々バージョンをあげたり、設定を変えたりする際、複数の環境を簡単に立ち上げるのが簡単そうだったので選択してみた。
インストール
dockerは、Linuxの上で動くエンジンとのことだが、windows版、mac版のデスクトップ版も用意されている。
64bitじゃない古いmacなどは動かない。また、M1搭載macも勉強し始めた段階(2021年03月頃)では、beta版なので、64bitのintel mac でとりあえず動かすのがよさそうだ。
- https://www.docker.com にアクセスして、Get Started ページに進む
- Docker Desktop にて、mac を選択して、ダウンロード
- ダウンロードしたdmgからインストール
- Appを起動
- チュートリアルを見るか聞かれるので、Skip (見てもよい)
- 左下のクジラマークが緑になれば起動OK
起動
基本的にdockerの操作はターミナルにて行う、アプリケーション > ユーティリティ > ターミナル を起動
docker version
と試しに打ってみて、ドッカーのバージョンが表示されれば起動OK。
ちなみに、自動起動に関しては、dockerアプリの上部にある歯車ボタンから設定にはいり、Generalの項目にある、 Start Docker Desktop when you log in にチェックがあればいい。(自動起動したくなければ外す)
とりあえずApacheを立ち上げてみる
では早速ターミナルで、以下を打ち込む
docker run --name test -d -p 8080:80 httpd
safariで localhost:8080 と打ち込んで表示してみて、It Works! が表示されればOK。
コマンドを分解すると、
docker run・・・・コンテナを作成 上位コマンド付きの docker container run の方が本来はいいようだ。近い将来上位コマンド付きじゃないと通らなくなるかも
--name test・・・・--name でコンテナの名前を指定。分かりやすい名前を付ける
-d・・・・バックグランドで実行させる
-p 8080:80・・・・host側の8080と コンテナのApacheの80ポートをつなげる
httpd・・・・Apacheのイメージ名。
となる。コンテナのストップ、再起動、削除はアプリのUIからできるが、
docker stop コンテナ名
docker rm コンテナ名
でもできる。また、起動中のコンテナを確認するのは、
docker ps
停止中も含めてすべて確認するには、最後に -a オプションを足せば表示できる
ルートディレクトリを変えてみる
dockerに記憶領域を設定したい場合、docker engine 内にボリュームをマウントする方法と、既存のフォルダ(またはファイル)を接続するバインドマウント方法がある。
既にhost側にhtmlファイルを保存していたので、今回は後者を選択する。
先ほどのコマンドにオプションを加えて接続してみる
docker run --name test2 -d -p 8081:80 -v /host側のフォルダパス/:/usr/local/apache2/htdocs httpd
イメージ名の指定前に、-v でhost側のフォルダパスとコンテナのApacheのhtdocsのパスを指定してつくると、ルートディレクトリを指定できる。
PHPを動かしてみる
上記のApacheのイメージのhttpd.conf を見るとphp のmoduleはないようなので、インストールしないといけないので面倒くさい。なので、PHPの公式イメージでApache付きのものでコンテナを作るのがよさそうだ。今回は、7.4を使用する。
docker pull php:7.4-apache
でイメージをインストール。で、先ほどの
docker run --name test3 -d -p 8082:80 -v /host側のフォルダパス/:/usr/local/apache2/htdocs php:7.4-apache
・・・・動かない。というか、Forbiddenになる。
Apache自体は動いていたので、調べたところ、httpdとルートディレクトリが違うようだ。
php:x.x-apache 系のimageは、 /var/www/html/ がドキュメントルートになっているので、
docker run --name test3 -d -p 8082:80 -v /host側のフォルダパス/:/var/www/html/ php:7.4-apache
とすれば動く。
余談として、特定のファイルは、ルートディレクトリの上部から呼び出すようにしていたのだけれども、上記のコマンドでは読み込めない。ルート外のディレクトリも -v で指定してあげる必要がある。
docker run --name test3 -d -p 8082:80 -v /host側のフォルダパス/:/var/www/html/ -v /2つ目のhost側のフォルダパス/:/var/www/hoge/ php:7.4-apache
として、読み込めた。とりあえず環境はできたので、次回はdockerfileやcomposeを備忘録としてまとめたい