说明:为什么要使用挂载配置
当我们在docker中创建nginx容器后,nginx容器中的目录和linux中的目录是独立的,而我们项目只能放在linux目录中,nginx实际上是不能访问到我们的目录的,所以进行挂载,使nginx访问容器中的目录时,实际上是去找linux中的目录,从而解决问题。

  1. docker下载nginx镜像:docker pull nginx
  2. 创建nginx容器并自启动:docker run --name mynginx -p 1111:80 -d --restart=always nginx:latest 注:这里我的虚拟机的端口80被占用了,所以我就用了1111来映射容器的端口
  3. 查看nginx启动情况:
  4. docker 安装nginx 并挂载配置 docker nginx挂载目录_html


  5. docker 安装nginx 并挂载配置 docker nginx挂载目录_nginx_02

  6. 启动成功。
  7. 需求:在我们安装nginx成功之后,如果需要用nginx做代理,发现直接使用是不行的。
    查看nginx配置:
    通过docker exec命令进入容器:docker exec -it d554669f2616 /bin/bash,其中d554669f2616是容器ID。
  8. docker 安装nginx 并挂载配置 docker nginx挂载目录_nginx_03

  9. 查看nginx.conf:nano nginx.conf 注:这里如果nano不能使用,则需要apt-get updateapt-get install nano来安装nano
  10. docker 安装nginx 并挂载配置 docker nginx挂载目录_docker_04

  11. 我们发现这里的具体配置在conf.d文件夹下,打开default.conf,可以发现默认访问的是/usr/share/nginx/html文件夹下的index.html
  12. docker 安装nginx 并挂载配置 docker nginx挂载目录_nginx_05


  13. docker 安装nginx 并挂载配置 docker nginx挂载目录_docker_06


  14. docker 安装nginx 并挂载配置 docker nginx挂载目录_html_07


  15. docker 安装nginx 并挂载配置 docker nginx挂载目录_html_08

  16. 这里我们发现,这个目录只存在于nginx容器内系统中是不存在这个目录的!!!
  17. 通过挂载解决代理设置问题。
    5.1 创建将要挂载的目录:mkdir -p /data/nginx/{conf,conf.d,html,logs}
  18. docker 安装nginx 并挂载配置 docker nginx挂载目录_html_09

  19. 目前新创建的目录里是没有任何数据和文件的:
  20. docker 安装nginx 并挂载配置 docker nginx挂载目录_html_10

5.2 删除已有的nginx容器,重新创建新的容器

docker stop d554669f2616
docker rm d554669f2616

docker 安装nginx 并挂载配置 docker nginx挂载目录_html_11


5.3 配置文件

创建/data/nginx/conf/nginx.conf

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;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}

创建/data/nginx/conf.d/default.conf:

server {  
    listen       80;  
    server_name  localhost;  
  
    #charset koi8-r;  
    #access_log  /var/log/nginx/log/host.access.log  main;  
  
    location / {  
        root   /usr/share/nginx/html;
        index  index.html index.htm;  
 
    }  
  
    #error_page  404              /404.html;  
  
    # redirect server error pages to the static page /50x.html  
    #  
    error_page   500 502 503 504  /50x.html;  
    location = /50x.html {  
        root   /usr/share/nginx/html;  
    }
}

创建/data/nginx/html/index.html文件

hello world

创建nginx容器:

docker run --name mynginx2 -p 2222:80 -v /data/nginx/html:/usr/share/nginx/html -v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf  -v /data/nginx/logs:/var/log/nginx -v /data/nginx/conf.d:/etc/nginx/conf.d -d --restart=always nginx:latest

其中-v 就表示挂载目录,也就是说当容器中的nginx配置的访问路径是/usr/share/nginx/html时,实际上访问的是linux中的/data/nginx/html

docker 安装nginx 并挂载配置 docker nginx挂载目录_nginx_12


测试:

docker 安装nginx 并挂载配置 docker nginx挂载目录_nginx_13

题外话:其实这里可以更简单一点,只挂载项目的目录,配置文件,日志等目录不用挂载,当然,这样子可以使配置更加方便。

docker run --name mynginx3 -p 3333:80 -v /data/nginx/html:/usr/share/nginx/html -d --restart=always nginx:latest

docker 安装nginx 并挂载配置 docker nginx挂载目录_nginx_14


进入容器命令:docker exec -it e959cb8689dd /bin/bash e959cb8689dd 为容器id

容器中安装vi vim命令:apt-get update

apt-get install vi
apt-get install vim
apt-get install nano