十二、Docker部署nginx并挂载本地目录到镜像
拉取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日
转载:感谢您对自如初博客网站的认可,所有文章均属原创文章,技术类文章转载请注明出处,“自如初博客”;文学类文章请带文本链接地址,否则视为侵权!