VirautlBox(Ubuntu)のDockerにWebサーバを構築してディレクトリを共有する

本記事では以下の3つを実行します。

  1. 前提条件:VirtualBox上のUbuntuにDockerがインストール済み
  2. ホストOS(Windows)とUbuntu間のフォルダ共有
  3. Apacheコンテナを作成。作成時に、Ubuntuの共有ディレクトリにコンテナのドキュメントルートをマウントする

上記で記載した通り、コンテナ – Ubuntu – Windows という形式でそれぞれディレクトリを共有している為、コンテナ内のドキュメントルートにあるファイルをWindowsで編集できます。

なお、仮想マシンのネットワークはデフォルトである「NAT」を想定しています。

ホストOSと仮想マシンのフォルダ共有

はじめに、ホストOSと仮想マシン(Ubuntu)のフォルダ共有から行います。

コンテナ作成後でも問題はありませんが、コンテナが頻繁に削除される可能性を考えると、ホスト-ゲスト間の共有はコンテナ削除に影響を受けない為、共通設定として先に行っておいた方が混乱せずに済むと思います。

  1. Windowsに共有用のフォルダを作成
  2. 仮想マシンで「sudo apt install virtualbox-guest-utils」を実行
  3. VirtualBoxの設定から
    • フォルダーのパス: C:\Users\user\Documents\docker
    • マウントポイント: /home/user
    • 上記以外はデフォルト(”自動マウント”や”永続化する”はデフォルトのままチェックを入れない)
  4. vi /etc/fstab
    • docker /home/user vboxsf defaults 0 0
  5. sudo reboot
③VirtualBox側の共有設定

ポートフォワーディングの設定

次にポートフォワーディングの設定を行います。

以下のように設定することで、Windowsのローカルホスト宛の80番をUbuntuの80番宛に転送し、コンテナ作成時にUbuntuの80番宛をコンテナの80番に接続するように設定するため、Windowsのブラウザから80番でコンテナのApacheにアクセスることができます。

Webサーバの構築

次にDocker上にApacheを構築します。

  1. sudo docker pull php:apache
    •  phpが必要ない場合は”sudo docker pull httpd”
  2. sudo docker images
  3. mkdir apache
  4. cd ./apache
  5. 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”
  6. sudo docker ps
コンテナの削除方法

コンテナを削除する場合、以下のようにstopしてからrmします。

psの-aは停止中のコンテナも含めて表示するオプションです。

  1. sudo docker ps -a
  2. sudo docker stop apache
  3. sudo docker rm apache

コンテナにsudoとvimのインストール

必須ではありませんが、コンテナには最低限のパッケージしかインストールされていないので、sudoやvimが存在しません。

まともにファイルを編集することすら出来ないので、検証目的の場合はsudoとvimを最初から入れてしまって問題ないと思います。

  1. sudo docker exec -it apache /bin/bash
  2. apt update
  3. apt install sudo vim

動作確認

Windowsのブラウザのアドレスバーに”localhost”と入力してアクセスしてみます。

アクセスすると上図のように403エラーになりますが、これはファイルが存在しない為です。

Ubuntuで以下のコマンドを実行してください。

echo '<?php phpinfo();' > index.php

phpinfoを表示するindex.phpが作成され、下図のように問題なく動作していることが分かります。

コメントを残す

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

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)