分享

十二、Docker部署nginx并挂载本地目录到镜像

 1qxm19 2021-01-18

拉取nginx

docker pull nginx:1.18

准备工作

问题:拉取nginx并运行为容器后,如果想要修改,那么就需要进入容器,这样很麻烦。

解决:因此,要将配置文件挂载出来。使用docker run -v 宿主机目录:容器目录进行挂载。

失败案例:docker run -d --name web01 -p 10000:80 -v /usr/local/docker/nginx:/etc/nginx nginx:1.18 /bin/bash此挂载是想将nginx容器的配置目录与宿主机同步,但是 这样去挂是没法成功的。

解决:先运行一个测试的nginx容器,并将里面的nginx配置文件内容复制出来,然后在进行挂载。

目录安排:我将所有Docker容器的东西放在/usr/local/docker目录下,虽然挂载时会自动创建目录,但是,必须手动将其创建出来,并先写好对应的配置文件的内容。

nginx.conf配置文件

该配置文件在/usr/local/docker/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;
}

default.conf

该默认配置文件在/usr/local/docker/nginx/conf.d目录下

server {  
   listen       80;  
   server_name  localhost;  
 
   #charset koi8-r;  
   #access_log  /var/log/nginx/log/host.access.log  main;  
 
   location / {  
       #root   /data/nginx/html;  
       root   /usr/share/nginx/html;  
       index  index.html index.htm;  
       #autoindex  on;  
       #try_files $uri /index/index/page.html;  
       #try_files $uri /index/map/page.html;  
   }  
 
   #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;  
   }  
 
   # proxy the PHP scripts to Apache listening on 127.0.0.1:80  
   #  
   #location ~ \.php$ {  
   #    proxy_pass   http://127.0.0.1;  
   #}  
 
   # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000  
   #  
   #location ~ \.php$ {  
   #    root           html;  
   #    fastcgi_pass   127.0.0.1:9000;  
   #    fastcgi_index  index.php;  
   #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;  
   #    include        fastcgi_params;  
   #}  
 
   # deny access to .htaccess files, if Apache's document root  
   # concurs with nginx's one  
   #  
   #location ~ /\.ht {  
   #    deny  all;  
   #}  
}

挂载日志文件

/usr/local/docker/nginx/logs:/var/log/nginx这样将nginx的日志文件挂载出来是可以的!

但是/usr/local/docker/nginx:/etc/nginx直接挂载配置目录是不行的,对此我没有明白,如果你明白,我想向你请教!

挂载项目目录

/www:/usr/share/nginx/html这样挂载项目目录同样是可行的,但是同样的问题,挂载配置目录,所有内容都会消失。但是先将内容写出来,然后再配置却可以 ,对此我不明白。

启动容器

使用下面的命令进行容器启动

docker run -d -p 10000:80 --name web01 -v /usr/local/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /usr/local/docker/nginx/conf.d://etc/nginx/conf.d  -v /www://usr/share/nginx/html -v /usr/local/docker/nginx/logs:/var/log/nginx nginx:1.18

通过实际测试可以,生效的配置文件是default.conf

注意:下面这个2个启动是我进行目录挂载测试的。

# 可以挂载成功,容器中的文件会同步到宿主机
docker run -d --name web02 -p 10000:80 -v /usr/local/docker/nginx/logs:/var/log/nginx nginx:1.18

docker run -d --name web03 -p 10000:80 -v /www:/usr/share/nginx/html nginx:1.18

我是小白,期待和优秀的你一起同行!

  小白

  2020年12月13日

转载:感谢您对自如初博客网站的认可,所有文章均属原创文章,技术类文章转载请注明出处,“自如初博客”;文学类文章请带文本链接地址,否则视为侵权!

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多