LoginSignup
232

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-11-05

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

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
232