docker-compose 部署 nginx

Docker 镜像,有关 nginx 配置文件的语法的信息,请参阅 官方文档(特别是 初学者指南)。

获取配置文件

nginx 有默认的配置文件,可以从 docker 镜像中获取到

  1. # 运行一个 nginx docker 容器
  2. $ docker run --name tmp-nginx-container -d nginx
  3. # 从容器中复制出 nginx 的默认配置文件到本地
  4. $ docker cp tmp-nginx-container:/etc/nginx/nginx.conf ./nginx.conf
  5. # 删除刚刚运行的 nginx docker 容器
  6. $ docker rm -f tmp-nginx-container

下面是默认的配置文件

  1. user nginx;
  2. worker_processes auto;
  3. error_log /var/log/nginx/error.log notice;
  4. pid /var/run/nginx.pid;
  5. events {
  6. worker_connections 1024;
  7. }
  8. http {
  9. include /etc/nginx/mime.types;
  10. default_type application/octet-stream;
  11. log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  12. '$status $body_bytes_sent "$http_referer" '
  13. '"$http_user_agent" "$http_x_forwarded_for"';
  14. access_log /var/log/nginx/access.log main;
  15. sendfile on;
  16. #tcp_nopush on;
  17. keepalive_timeout 65;
  18. #gzip on;
  19. include /etc/nginx/conf.d/*.conf;
  20. }

其中有一句代码 include /etc/nginx/conf.d/*.conf; 也就是说,我们只要映射到 /etc/nginx/conf.d/*.conf 中就可以自动读取到我们的配置文件,所以直接映射到这个目录下,而不是覆盖原来的默认配置文件,并且可以直接写 server,如下面这个

  1. server {
  2. listen 80;
  3. listen [::]:80;
  4. server_name localhost;
  5. # 默认的静态文件路径在 /usr/share/nginx/html 下
  6. # 而在 docker 中默认的静态文件路径在 /etc/nginx/html/, 如果写相对路径就会访问这个目录下的
  7. location / {
  8. root /usr/share/nginx/html;
  9. index index.html index.htm;
  10. }
  11. }

docker-compose.yml

  1. services:
  2. nginx:
  3. image: nginx
  4. container_name: nginx
  5. hostname: nginx
  6. volumes:
  7. - ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf
  8. ports:
  9. - 80:80
  10. - 443:443

配置文件,可以使用上面指向 nginx 默认的 html 页面

在 win 上当成 win 本机的 nginx 使用技巧

访问静态文件

由于容器中与宿主机的目录不能互通,只能通过 volumes 映射的方式,所以需要访问宿主机目录时,可以通过卷映射来完成访问;

转发到宿主机服务

  1. location ^~ /api/ {
  2. rewrite /api/(.*) /$1 break;
  3. proxy_pass http://192.168.1.115:11120;
  4. client_max_body_size 500M;
  5. }

直接写宿主机的内网 IP 即可完成平时开发时的代理转发功能