dockerのubuntuコンテナにnginxを設定
dockerのubuntuでnginxとphpを動かすことになったので、調べたことのメモ
今回はubuntuにnginxを設定します。
環境
- ubuntu 18.04
- nginx 1.14.0
- php5.6(予定)
Dockerfile
Docker Hubのnginxがalpineかdebianだったので、ubuntuイメージをベースにします。
FROM ubuntu:18.04 LABEL maintainer="" RUN apt-get update && \ apt-get install -y -q curl gnupg2 RUN curl http://nginx.org/keys/nginx_signing.key | apt-key add - RUN apt-get update && \ apt-get install -y -q nginx EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]
イメージビルドしてコンテナ起動します。
docker build -t my-nginx . docker run --rm -p 443:443/tcp -p 80:80/tcp my-nginx:latest
--rmはコンテナ終了時に削除するオプションなので、不要なら削除してください。
いったんlocalhostにつないでnginxのindex.htmlが表示されることを確認。
(追記)
ちなみにnginxのインストール前に以下を入れるとvar.1.14.2になり、設定が変わります(nginxのrootが/usr/share/nginx/htmlになったり)。今回は無しで動かしてます。
RUN touch /etc/apt/sources.list.d/nginx.list && \ echo "deb http://nginx.org/packages/ubuntu/ bionic nginx" >> /etc/apt/sources.list.d/nginx.list && \ echo "deb-src http://nginx.org/packages/ubuntu/ bionic nginx" >> /etc/apt/sources.list.d/nginx.list
nginxの設定
以前nginxの設定したのはWindows Serverで、nginxもだいぶ前のバージョンだったのでデフォルトの設定を確認しました。
user www-data; worker_processes auto; pid /run/nginx.pid; include /etc/nginx/modules-enabled/*.conf; events { worker_connections 768; # multi_accept on; } http { ## # Basic Settings ## sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; # server_tokens off; # server_names_hash_bucket_size 64; # server_name_in_redirect off; include /etc/nginx/mime.types; default_type application/octet-stream; ## # SSL Settings ## ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE ssl_prefer_server_ciphers on; ## # Logging Settings ## access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; ## # Gzip Settings ## gzip on; # gzip_vary on; # gzip_proxied any; # gzip_comp_level 6; # gzip_buffers 16 8k; # gzip_http_version 1.1; # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; ## # Virtual Host Configs ## include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; } . . .
どうやら仮想サーバーの設定は別のところでするらしい。
確認すると/etc/nginx/conf.dは何も入っておらず、 /etc/nginx/sites-enabledにデフォルト設定が入ってました。
server { root /var/www/html; index index.html index.htm index.nginx-debian.html; }
rootの場所にindex.nginx-debian.htmlがあったので、これを変更してlocalhostで変更が反映されることが確認できました。
conf.dとsites-enabled
nginx.confでこれらをincludeしてますが、違いがわからなかったので調べました。
パッと見ですが公式のドキュメントを見つけられなかったので、以下の内容をざっくりまとめます。
共通
- serverごとにファイル分けておく
conf.d
- こっちがベストプラクティス
- 外したい設定はファイルの拡張子変える
- こっちの方が速度で有利?(ファイル直接だから?)
sites-enabled
- sites-enabledはsites-availableへのシンボリックリンクを入れる
- この構成はdebian系の名残
- 外したい設定はシンボリックリンク外す
ということなので、conf.dにserver単位で設定ファイルを置いていくのが良さそうです。
phpの設定
これは次回やります。
nginxではapacheとはphpの動かし方が異なるらしい。
そもそもapacheでも設定したことないけど。