前置条件

  • 安装docker
  • 安装docker-compose

    基于容器运行服务

    编辑启动文件

    创建启动文件存放路径
    1. mkdir -p /usr/local/docker/docker-nginx
    切换到路径 docker-nginx
    1. cd /usr/local/docker/docker-nginx
    将内容写入 docker-compose.yml
    1. vi /usr/local/docker/docker-nginx/docker-compose.yml
    1. version: '3.7'
    2. services:
    3. nginx:
    4. image: nginx
    5. container_name: nginx
    6. restart: always
    7. environment:
    8. - TZ=Asia/Shanghai
    9. ports:
    10. - '80:80'
    11. - '443:443'

    也可以使用将内容直接写入文件: cat > /usr/local/docker/nginx/docker-compose.yml<<’EOF’ 内容 EOF

运行容器并访问

运行容器

  1. docker-compose -f /usr/local/docker/docker-nginx/docker-compose.yml up -d

image.png
浏览器访问自己的域名,看到如下页面说明启动成功
image.png

配置文件

宿主机创建挂载路径

创建nginx存放配置、静态资源文件及目录

  1. mkdir -p /usr/local/docker-nginx/nginx/
  2. mkdir -p /usr/local/docker-nginx/nginx/conf.d/
  3. mkdir -p /usr/local/docker-nginx/nginx/html/
  4. mkdir -p /var/local/docker-nginx/nginx/logs/
  5. touch /usr/local/docker/docker-nginx/nginx/nginx.conf
  6. touch /usr/local/docker/docker-nginx/nginx/conf.d/default.conf

说明见附录:数据卷挂载说明

复制内部配置及静态页

将容器内部配置文件复制出来,稍后配置在宿主机中

进入容器

宿主机执行命令通过容器名称进入容器内部

  1. docker exec -it nginx bash

切换到nginx默认配置路径

  1. cd /etc/nginx

image.png

nginx.conf

查看配置文件并复制

  1. more /etc/nginx/nginx.conf

image.png

default.conf

查看配置文件并复制

  1. more /etc/nginx/conf.d/default.conf

image.png

粘贴对应的配置文件

nginx.conf

  • 将刚才复制的配置文件,按照上边宿主机创建的文件进行粘贴
    1. vi /usr/local/docker/docker-nginx/nginx/nginx.conf
    image.png ``` user nginx; worker_processes 1;

error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;

events { worker_connections 1024; }

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

  1. log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  2. '$status $body_bytes_sent "$http_referer" '
  3. '"$http_user_agent" "$http_x_forwarded_for"';
  4. access_log /var/log/nginx/access.log main;
  5. sendfile on;
  6. #tcp_nopush on;
  7. keepalive_timeout 65;
  8. #gzip on;
  9. include /etc/nginx/conf.d/*.conf;

}

  1. > 配置说明见附录:nginx.conf 配置说明
  2. <a name="G7GPk"></a>
  3. #### default.conf
  4. - 将刚才复制的配置文件,按照上边宿主机创建的文件进行粘贴
  5. ```shell
  6. vi /usr/local/docker/docker-nginx/nginx/conf.d/default.conf

image.png

  1. server {
  2. listen 80; # Nginx监听的端口号,配置中默认是占用80端口
  3. listen [::]:80;
  4. server_name localhost; # Nginx接受请求的IP或域名
  5. location / {
  6. root /usr/share/nginx/html; # 将接受到的请求根据/usr/share/nginx/html去查找静态资源
  7. index index.html index.htm; # 默认去上述的路径中找到index.html或index.htm
  8. }
  9. error_page 500 502 503 504 /50x.html;
  10. location = /50x.html {
  11. root /usr/share/nginx/html;
  12. }
  13. }

配置说明见附录:default.conf 配置说明

欢迎页和异常页

数据卷静态文件挂载

  1. cd /usr/local/docker/docker-nginx/nginx/html
  • 新建index.html ```html <!DOCTYPE html>

    Welcome to nginx!

    If you see this page, the nginx web server is successfully installed and working. Further configuration is required.

    For online documentation and support please refer to nginx.org.
    Commercial support is available at nginx.com.

    Thank you for using nginx.

  1. - 新建50x.html
  2. ```html
  3. <!DOCTYPE html>
  4. <html>
  5. <head>
  6. <title>Error</title>
  7. <style>
  8. body {
  9. width: 35em;
  10. margin: 0 auto;
  11. font-family: Tahoma, Verdana, Arial, sans-serif;
  12. }
  13. </style>
  14. </head>
  15. <body>
  16. <h1>An error occurred.</h1>
  17. <p>Sorry, the page you are looking for is currently unavailable.<br/>
  18. Please try again later.</p>
  19. <p>If you are the system administrator of this resource then you should check
  20. the error log for details.</p>
  21. <p><em>Faithfully yours, nginx.</em></p>
  22. </body>
  23. </html>

重新构建容器服务

修改启动文件

启动文件中加上数据卷挂载 volumes 部分

  1. vi /usr/local/docker/docker-nginx/docker-compose.yml
  1. version: '3.7'
  2. services:
  3. nginx:
  4. image: nginx
  5. container_name: nginx
  6. restart: always
  7. environment:
  8. - TZ=Asia/Shanghai
  9. ports:
  10. - '80:80'
  11. - '443:443'
  12. volumes:
  13. - ./nginx/nginx.conf:/etc/nginx/nginx.conf
  14. - ./nginx/conf.d/:/etc/nginx/conf.d
  15. - ./nginx/html/:/usr/share/nginx/html
  16. - /var/local/nginx/logs/:/var/log/nginx

停止容器

  1. docker-compose -f /usr/local/docker/docker-nginx/docker-compose.yml down

重新构建

  1. docker-compose -f /usr/local/docker/docker-nginx/docker-compose.yml build

运行容器并访问

控制台运行容器

  1. docker-compose -f /usr/local/docker/docker-nginx/docker-compose.yml up -d

浏览器访问自己的域名,看到如下页面说明启动成功
image.png

配置文件重新加载

如果在运行的过程中需要调整配置,可以使用如下两个命令重新加载配置文件

  • 检查配置文件

    1. docker exec -it nginx service nginx check-reload
  • 重新加载配置文件

    1. docker exec -it nginx service nginx reload

    附录

    问题记录

    外部访问无响应

解决方案:

  1. 关闭防火墙 (如果仅开发使用关闭即可,无需要考虑服务器是否安全)
  2. 防火墙开放端口 (生产环境需要配置一些规则开放对应的端口)

数据卷挂载说明

  1. mkdir -p /usr/local/docker-nginx/nginx/ # Nginx 配置主路径
  2. mkdir -p /usr/local/docker-nginx/nginx/conf.d/ # Nginx 所有引用配置存放路径,以后多数配置在此路径中
  3. mkdir -p /usr/local/docker-nginx/nginx/html/ # 静态资源路径
  4. mkdir -p /var/local/docker-nginx/nginx/logs/ # 日志存放路径
  5. touch /usr/local/docker/docker-nginx/nginx/nginx.conf # 全局配置文件 主配置文件会扫描 conf.d路径下所有以.conf结尾的配置文件
  6. touch /usr/local/docker/docker-nginx/nginx/conf.d/default.conf # 引用配置文件

docker-compose 简单说明

  1. version: '3.7' # docker-compose 对应命令版本
  2. services: # 服务组
  3. nginx: # 容器
  4. image: nginx # 镜像名称
  5. container_name: nginx # 容器名称
  6. restart: always # 重启服务器自动启动
  7. environment:
  8. - TZ=Asia/Shanghai # 指定时区
  9. ports:
  10. - '80:80' # http 宿主机端口:容器内端口
  11. - '443:443' # https 宿主机端口:容器内端口
  12. volumes:
  13. - ./nginx/nginx.conf:/etc/nginx/nginx.conf # 全局配置文件
  14. - ./nginx/conf.d/:/etc/nginx/conf.d # server 详细配置引用
  15. - ./nginx/html/:/usr/share/nginx/html # 静态文件存放路径
  16. - /var/local/nginx/logs/:/var/log/nginx # 运行日志路径

nginx.conf 配置说明

  1. user nginx; # 当前需要运行nginx的linux用户
  2. worker_processes 1; # 数值越大,Nginx 并发能力越强(不是随便写的,需要根据实际服务器配置编写)
  3. error_log /var/log/nginx/error.log warn; # 错误日志存放位置
  4. pid /var/run/nginx.pid; # 进程id
  5. events {
  6. worker_connections 1024; # 数值越大,Nginx 并发能力越强(不是随便写的,需要根据实际服务器配置编写)
  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; # 引入了conf.d路径下所有以.conf结尾的配置文件
  20. }

default.conf 配置说明

  1. server {
  2. listen 80; # Nginx监听的端口号,配置中默认是占用80端口
  3. listen [::]:80;
  4. server_name localhost; # Nginx接受请求的IP或域名
  5. #charset koi8-r;
  6. #access_log /var/log/nginx/host.access.log main;
  7. location / {
  8. root /usr/share/nginx/html; # 将接受到的请求根据/usr/share/nginx/html去查找静态资源
  9. index index.html index.htm; # 默认去上述的路径中找到index.html或index.htm
  10. }
  11. #error_page 404 /404.html;
  12. # redirect server error pages to the static page /50x.html
  13. #
  14. error_page 500 502 503 504 /50x.html;
  15. location = /50x.html {
  16. root /usr/share/nginx/html;
  17. }
  18. # proxy the PHP scripts to Apache listening on 127.0.0.1:80
  19. #
  20. #location ~ \.php$ {
  21. # proxy_pass http://127.0.0.1;
  22. #}
  23. # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
  24. #
  25. #location ~ \.php$ {
  26. # root html;
  27. # fastcgi_pass 127.0.0.1:9000;
  28. # fastcgi_index index.php;
  29. # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
  30. # include fastcgi_params;
  31. #}
  32. # deny access to .htaccess files, if Apache's document root
  33. # concurs with nginx's one
  34. #
  35. #location ~ /\.ht {
  36. # deny all;
  37. #}
  38. }