#やりたいこと
掲題の通り。
#環境
- ホストOS:Windows 10
- 仮想マシン:Virtual Box
- ゲストOS:Ubuntu(16.04.6)
- docker
#前提条件
-
ホスト側からゲスト側へアクセスするための設定ができている
Key Word:NAT + ホストオンリーアダプター -
ゲストOSにdockerを動かすための環境が整っている
#やったこと
- Virtual Box:ネットワーク設定からアダプター1(NAT)のポートフォワーディングを以下のように設定
名前(任意) | プロトコル | ホストポート | ゲストポート |
---|---|---|---|
HTTP ※1 | TCP | 50080 | 80 |
HTTP ※2 | TCP | 58080 | 8080 |
SSH | TCP | 50022 | 22 |
※1 ゲストOS上にサーバー(Tomcat, apache2等)を立てた状態でホスト側から"http://ゲストOSのIPアド:50080" | |||
にアクセスがあると、立てたサーバーのWelcome Pageに遷移する | |||
※2 docker上に立てたWebサーバーにアクセスするためのポートを指定(ポート番号は任意でOK) |
- Webサーバーのイメージを作成する
- 今回の目的はただホスト側のWebブラウザからdocker上のwebサーバー(on 仮想マシン)
にアクセスするだけなので、Webブラウザ上で"Hello world"を出力する単純なWebアプリの
イメージを作成する。(ここは今回の主眼ではないので手順の概要のみ残す)
- 今回の目的はただホスト側のWebブラウザからdocker上のwebサーバー(on 仮想マシン)
※Dockerfileは任意のディレクトリ内に作成
※Dockerfileを作成したのと同じディレクトリ内にindex.html("Hello world"と記載)も用意しておく
※Dockerfileの記載内容は下記の記事を参考にした
https://qiita.com/nl0_blu/items/1de829288db2670276e8
手順1:ゲストOS上に任意のディレクトリを作成
手順2: 作成したディレクトリ上にDockerfileを作成する
#Dockerfileの中身
FROM centos
CMD echo "now running..."
RUN yum install -y httpd
ADD ./index.html /var/www/html/
#ポート80を開ける
EXPOSE 80
#起動した時にapache起動するコマンド
CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]
- 作成したDockerfileを元にコンテナを起動する
- 以下のコマンドを実行しコンテナを起動する
$ docker run -d --name コンテナ名(任意) -p 8080:80 イメージ名(or ID)
※ "-p 8080:80"とすることで、ゲストOS側の8080ポートとコンテナ側の80ポートが紐づく。
※ ゲストOS側の8080ポートはホスト側の58080ポートと紐づいているので、
ホスト側からゲストOS側の58080ポートに受けるアクセスは、ゲストOSの8080ポートを経由して
コンテナ側の80へのアクセスとなり、コンテナ上のWebサーバーへのアクセスが可能となる。
-
実際にアクセスしてみる
⚪︎ ホスト側からゲスト側へ50080ポート経由でアクセスした場合
→ゲストOS上で起動しているapache2のデフォルトページが表示される。
⚪︎ ホスト側からゲスト側へ58080ポート経由でアクセスした場合
→"Hello world"が表示される。