そんな今日この頃の技術ネタ

本家側に書くほどでもない小ネタ用

DockerでNginxを立ち上げる、Proxyとして使用する

イメージ

そのものずばりなnginx:latestを用いる。

docker pull nginx


普通にnginxがインストールされた状態と同じ状態のものがコンテナとして動く。

  • ログは/var/log/nginxに吐かれる
  • 設定ファイル等は/etc/nginx以下に配置されている
  • ポート80番で待ち受けている
  • ドキュメントルートは/usr/share/nginx/htmlに設定されている

したがって、これらのディレクトリやファイルを適時マウントして置き換えて使用すれば良い。


Webサーバとして使用する

特に小難しいことなしに普通にWebサーバを立ち上げるだけであれば、

  1. html等の収まったディレクトリ
  2. ログの吐き出し場所
  3. 割り当てるポート

をそれぞれマウントしてやれば良い。

※ログのタイムスタンプを気にするならば/etc/localtimeもマウントしといた方が良い

docker run --rm -v <HTMLディレクトリ>:/usr/share/nginx/html/ -v <ログディレクトリ>:/var/log/nginx/ -v /etc/localtime:/etc/localtime:ro -p <ポート>:80  nginx


Proxyとして使用する

設定ファイルをマウントして置き換える形で実現できる。

ごく単純な例として、 http://consul.service.local.consulとしてアクセスされたらhttp://192.168.77.6:8500に飛ばしたいならば、 下記のようなnginx.confを作成し、

user  nginx;
worker_processes  1;

pid    /var/run/nginx.pid;


events {
  worker_connections  1024;
}


http {
  include   /etc/nginx/mime.types;
  default_type  application/octet-stream;

  sendfile  on;
  keepalive_timeout  65;

  server {
    server_name consul.service.local.consul;
    proxy_set_header Host $http_host;
    location / {
      proxy_pass http://192.168.77.6:8500;
    }
  }

}

これをマウントする形で起動すればよい。

docker run --rm -v <confのディレクトリ>:/etc/nginx/ -p 80:80  nginx

※Docker Composeを使った記述だとファイルそのものを指定してマウントできたんだけど、素のコマンドの-vオプションだとディレクトリじゃないと怒られる模様