DockerでNginx+Unicornのアプリケーションサーバ構成で動作させる際に、静的コンテンツはNginxで返したい時がある。
そういう場合、Unicornコンテナでは共有ボリューム指定、NginxコンテナではそのボリュームをマウントしNginxの設定ファイルでrootに指定するのが便利。
手順
まず、docker runコマンドの-vオプションでディレクトリを指定。/home/rails/Stargazer
以下をrailsのworkディレクトリとし、コンテナはstargazer-unicorn
とする。
$ docker run -v /home/rails/Stargazer --name container-unicorn image-unicorn
次にNginxコンテナで--volumes-from
オプションを使いマウントするコンテナ名を指定する。
$ docker run --name container-nginx --link container-unicorn:unicorn -p 443:443 -p 80:80 --volumes-from container-unicorn image-nginx
最後に、Nginxの設定ファイルでrootを指定
http {
server {
root /home/rails/Stargazer;
# 色々省略
}
}
補足
-vでオプション指定する他に、Dockerfileでvolume指定してもいい
VOLUME /home/rails/Stargazer
どちらに記述しても良いと判断できるとき、自分はDockerファイルで出来ることはDockerファイルでやるようにしてる。