外部からコンテナにアクセスするにはポートフォワードを使うと聞いたので試してみました。
apacheにしようとしたけど設定が面倒そう、node.jsにしようとしたけどインストールまでが長かったので、公式サイトのnginxを利用することにしました。
https://hub.docker.com/_/nginx/
上から読むとずらずら何かが出てくるので、まずはnginxのWelcomeページを表示させてみます。
その後、マウントしてHello Worldのhtmlを表示させてみます。
最後にDockerfileのCOPYを使ってコンテナにコピーしてからHello Worldのhtmlを表示させます。
runコマンドでWelcomeページを表示
- ひとまず下記のコマンドを打ってみる
-p
オプションで、外部からアクセスされるポート番号:コンテナ側のポート番号を指定
-d
オプションはバックグラウンドで実行
$ docker run --name some-nginx -d -p 8080:80 nginx
- psで確認するとPORTSのところでフォワードされている
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
013518db8609 nginx "nginx -g 'daemon off" 28 seconds ago Up 28 seconds 443/tcp, 0.0.0.0:8080->80/tcp some-nginx
- アクセスしてみる
http://localhost:8080/
ポート8080でアクセスすると、nginxのポート80にフォワードされたので、Welcomeページが表示された!
nginxのコンテナ停止
- 一旦nginxを落とす
$ docker stop 013518db8609
Hello Worldをマウントして表示
- 簡単にHello WorldのHTMLファイルを用意し、/home/tiffany/nginx/index.htmlに保存
index.html
<html>
<head>
<title>Hello</title>
</head>
<body>
<p>Hello World!</p>
</body>
</html>
-
nginxを起動(今度はポートを8081にしてみる)。
-v
オプションで、マウント元(ローカルディレクトリ):マウント先(コンテナ側のディレクトリ)
$ docker run --name hello-nginx -v /home/tiffany/nginx:/usr/share/nginx/html:ro -d -p 8081:80 nginx
- アクセスしてみる
http://localhost:8081/
Hello Worldの表示!
DockerfileでコンテナにHello Worldをコピーして表示
- Dockerfileの作成
Dockerfile
FROM nginx
COPY html /usr/share/nginx/html
- はじめてのCOPYでハマった…
ローカル側は絶対パスではなく、読み込むディレクトリはDockerfileから見た相対パス(コンテナ側は絶対パス)
nginx/
├── Dockerfile
└── html
└── index.html
- ビルド
$ docker build -t hello-nginx .
$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
hello-nginx latest c0f13486865d 10 minutes ago 132.8 MB
- nginxの実行し、一応ポートを8082番にしてみたけど上記同様にHello Worldが表示された
$ docker run --name hello -d -p 8082:80 hello-nginx
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1b734082ec74 hello-nginx "nginx -g 'daemon off" 20 minutes ago Up 20 minutes 443/tcp, 0.0.0.0:8082->80/tcp hello