Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

外部からコンテナにアクセスするにはポートフォワードを使うと聞いたので試してみました。
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
Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away