本記事では以下の3つを実行します。
- 前提条件:VirtualBox上のUbuntuにDockerがインストール済み
- ホストOS(Windows)とUbuntu間のフォルダ共有
- Apacheコンテナを作成。作成時に、Ubuntuの共有ディレクトリにコンテナのドキュメントルートをマウントする
上記で記載した通り、コンテナ – Ubuntu – Windows という形式でそれぞれディレクトリを共有している為、コンテナ内のドキュメントルートにあるファイルをWindowsで編集できます。
なお、仮想マシンのネットワークはデフォルトである「NAT」を想定しています。
ホストOSと仮想マシンのフォルダ共有
はじめに、ホストOSと仮想マシン(Ubuntu)のフォルダ共有から行います。
コンテナ作成後でも問題はありませんが、コンテナが頻繁に削除される可能性を考えると、ホスト-ゲスト間の共有はコンテナ削除に影響を受けない為、共通設定として先に行っておいた方が混乱せずに済むと思います。
- Windowsに共有用のフォルダを作成
- 仮想マシンで「sudo apt install virtualbox-guest-utils」を実行
- VirtualBoxの設定から
- フォルダーのパス: C:\Users\user\Documents\docker
- マウントポイント: /home/user
- 上記以外はデフォルト(”自動マウント”や”永続化する”はデフォルトのままチェックを入れない)
- vi /etc/fstab
- docker /home/user vboxsf defaults 0 0
- sudo reboot
ポートフォワーディングの設定
次にポートフォワーディングの設定を行います。
以下のように設定することで、Windowsのローカルホスト宛の80番をUbuntuの80番宛に転送し、コンテナ作成時にUbuntuの80番宛をコンテナの80番に接続するように設定するため、Windowsのブラウザから80番でコンテナのApacheにアクセスることができます。
Webサーバの構築
次にDocker上にApacheを構築します。
- sudo docker pull php:apache
- phpが必要ない場合は”sudo docker pull httpd”
- sudo docker images
- mkdir apache
- cd ./apache
- sudo docker run –name apache -v $(pwd):/var/www/html -d -p 80:80 php:apache
- phpが必要ない場合は”sudo docker run –name apache -v $(pwd):/usr/local/apache2/htdocs -d -p 80:80 httpd”
- sudo docker ps
コンテナを削除する場合、以下のようにstopしてからrmします。
psの-aは停止中のコンテナも含めて表示するオプションです。
- sudo docker ps -a
- sudo docker stop apache
- sudo docker rm apache
コンテナにsudoとvimのインストール
必須ではありませんが、コンテナには最低限のパッケージしかインストールされていないので、sudoやvimが存在しません。
まともにファイルを編集することすら出来ないので、検証目的の場合はsudoとvimを最初から入れてしまって問題ないと思います。
- sudo docker exec -it apache /bin/bash
- apt update
- apt install sudo vim
動作確認
Windowsのブラウザのアドレスバーに”localhost”と入力してアクセスしてみます。
アクセスすると上図のように403エラーになりますが、これはファイルが存在しない為です。
Ubuntuで以下のコマンドを実行してください。
echo '<?php phpinfo();' > index.php
phpinfoを表示するindex.phpが作成され、下図のように問題なく動作していることが分かります。