1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Docker で LAMP 環境を作ろう 第 4 回

Last updated at Posted at 2022-01-12

前回までのあらすじ

サンプルのコンテナをダウンロードしてイメージを作成、起動。その後 hosts ファイルへの記述追加と netsh コマンドを使って、構築したコンテナにドメイン名でアクセスできるようにしました。
ただし

192.168.***.*** www.bulletin-board.internal
192.168.***.*** www2.bulletin-board.internal

のように、同じ IP アドレスに別名をつけても、http://www2.bulletin-board.internal で同じページが表示されてしまい、これでは目的が達せられないよね、というところで終わっています。
今回は、この点を何とかしてみましょう。

複数の IP アドレスを用意する

私の環境は Windows10 なので、タスクバー右端のネットワークのアイコンを右クリックして [ネットワークとインターネットの設定を開く] を選んで、順次 [ネットワークと共有センター] → [イーサネット] → [プロパティ] → [インターネット プロトコル バージョン4(TCP/PIv4) ] → [プロパティ] → [詳細設定(V)] と進み、 [追加] から適当な IP アドレスを追加してやればいいのですが、
・なかなか深いところにある
・複数の IP アドレスを一気に入力できない
ことから、なかなか面倒です。
こんなときは、前回もお世話になっている Windows PowerShell を管理者権限で開き、

netsh interface ip add address name="イーサネット" addr=192.168.xxx.xxx mask=255.255.255.0

等とすることで追加できます。
「イーサネット」の部分は「ローカル エリア接続」の人もいるかもしれません。
うまく追加できないときは ipconfig で確認してみてください。

さて、こんな感じで、私の環境では 192.168.xxx.1 ~ 5 まで追加しました。

hosts とプロキシ設定の変更

さて、次は作った IP アドレスにドメインを紐づけます。
前回は www.bulletin-board.internal としましたが、長いので www.bb.internal にしちゃいます。

192.168.***.1 www.bb.internal
192.168.***.2 www2.bb.internal

前回セットしたプロキシもいったん削除し、新たに付け替えます。

PS C:\Windows\system32> netsh interface portproxy delete v4tov4 listenport=80 listenaddr=www.bulletin-board.internal
PS C:\Windows\system32> netsh interface portproxy add v4tov4 listenport=80 listenaddr=www.bb.internal connectport=8000 connectaddress=127.0.0.1
PS C:\Windows\system32> netsh interface portproxy show all
ipv4 をリッスンする:         ipv4 に接続する:

Address         Port        Address         Port
--------------- ----------  --------------- ----------
www.bb.internal 80          127.0.0.1       8000

PS C:\Windows\system32> ping www.bb.internal

www.bb.internal [192.168.xxx.1]に ping を送信しています 32 バイトのデータ:
192.168.xxx.1 からの応答: バイト数 =32 時間 <1ms TTL=128
192.168.xxx.1 からの応答: バイト数 =32 時間 <1ms TTL=128
192.168.xxx.1 からの応答: バイト数 =32 時間 <1ms TTL=128
192.168.xxx.1 からの応答: バイト数 =32 時間 <1ms TTL=128

192.168.xxx.1 の ping 統計:
    パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
    最小 = 0ms、最大 = 0ms、平均 = 0ms

正しく設定できているようです。

動作検証

まずは www.bb.internal にアクセスしてみます。
bb8080.png
こちらは成功、www2.bb.internal にアクセスすると
bb2.png
ということで、前回は見えてしまったものが見えなくなっています。
ついでにもうひとつコンテナを起動してみます。
D:\vm\node-bulletin-board\bulletin-board-app をコピーして D:\vm\nbb\bba を作成、起動します。
ただしこのままでは見た目の区別がつかないので、ちょっとだけ変更します。
site.css の 12 行目を変更して背景色を変更、

    background-color: rgb(98, 145, 41);

ついでに index.html の h1 も変えておきます。

    <h1>Welcome to the Bulletin Board2</h1>

この状態で起動し、http://localhost:8001/ にアクセスします。

$ docker build --tag bulletinboard:1.1 .
[+] Building 2.2s (11/11) FINISHED
 => [internal] load build definition from Dockerfile                                                                                                                                        0.0s
 => => transferring dockerfile: 164B                                                                                                                                                        0.0s
 => [internal] load .dockerignore                                                                                                                                                           0.0s
 => => transferring context: 2B                                                                                                                                                             0.0s
 => [internal] load metadata for docker.io/library/node:current-slim                                                                                                                        1.9s
 => [auth] library/node:pull token for registry-1.docker.io                                                                                                                                 0.0s
 => [1/5] FROM docker.io/library/node:current-slim@sha256:8f8a97163bed5b292bcd7a92a96849ef7a4c1fc2b105b5579dff258307de25fe                                                                  0.0s
 => [internal] load build context                                                                                                                                                           0.0s
 => => transferring context: 655B                                                                                                                                                           0.0s
 => CACHED [2/5] WORKDIR /usr/src/app                                                                                                                                                       0.0s
 => CACHED [3/5] COPY package.json .                                                                                                                                                        0.0s
 => CACHED [4/5] RUN npm install                                                                                                                                                            0.0s
 => [5/5] COPY . .                                                                                                                                                                          0.1s
 => exporting to image                                                                                                                                                                      0.1s
 => => exporting layers                                                                                                                                                                     0.0s
 => => writing image sha256:777db44bd53c96fa547d958a6680af6a816a81b23f3b27fab3d4c1c43fc6216d                                                                                                0.0s
 => => naming to docker.io/library/bulletinboard:1.1                                                                                                                                        0.0s

Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them

$ docker run --publish 8001:8080 --detach --name bb1 bulletinboard:1.1
fea5584bcdc5265510e98b3c7e47f4935efafc647badd025a3eac4a0f10a24a3

こちらも無事起動できました。

bb8001.png

では最後の仕上げ、www2.bb.internal に localhost:8001 を割り当ててアクセスしてみます。

PS C:\Windows\system32> netsh interface portproxy add v4tov4 listenport=80 listenaddr=www2.bb.internal connectport=8001 connectaddress=127.0.0.1

PS C:\Windows\system32> netsh interface portproxy show all

ipv4 をリッスンする:         ipv4 に接続する:


Address         Port        Address         Port
--------------- ----------  --------------- ----------
www.bb.internal 80          127.0.0.1       8000
www2.bb.internal 80          127.0.0.1       8001

bb21.png

成功です。

参考 URL

Network Shell (netsh)
普段あまり使わないけど知ってると便利な netsh コマンド(前回と一緒)。

Docker で LAMP 環境を作ろう 第 1 回
Docker で LAMP 環境を作ろう 第 2 回
Docker で LAMP 環境を作ろう 第 3 回

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?