Docker

コンテナに外部からアクセス(ポートフォワード)

外部からコンテナにアクセスするにはポートフォワードを使うと聞いたので試してみました。

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_welcome.png



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の表示!

    nginx_hello.png



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