Docker使用Nginx

122 阅读3分钟
1.Docker拉取镜像
 docker pull nginx
2.启动容器
 docker run -d -p 80:80 --name nginx nginx
这里的语法格式为
 //docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
 //[OPTIONS]
 // -d 守护进程,进程进入后台
 // -p 端口映射 宿主机端口:镜像端口
 // -v 目录映射,容器目录挂载到宿主机目录,格式: <host目录>:<容器目录>
 // --name 容器名称
 // --privileged 容器内部是否拥有root权限
 //eg:
 docker run -d --name nginx -p 12121:80 -v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /data/nginx/conf/conf.d:/etc/nginx/conf.d -v /data/nginx/log:/var/log/nginx -v /data/nginx/html:/usr/share/nginx/html --privileged=true nginx
3.创建挂载目录
 mkdir -p /data/nginx/{conf,log,html}
 //{}这里是批量创建
4.把Nginx容器中的文件进行复制 =》 ngixn => 宿主机
 //nginx.conf复制到主机
 docker cp nginx:/etc/nginx/nginx.conf /data/nginx/conf/nginx.conf
 //将conf.d文件夹复制到主机
 docker cp nginx:/etc/nginx/conf.d /data/nginx/conf/conf.d
 //把html目录复制到主机
 docker cp nginx:/usr/share/nginx/html /data/nginx/
5.停止刚刚创建的nginx容器
 docker stop nginx
6.删除刚刚创建的容器
 docker rm nginx
7.重新创建容器,并且挂载文件
 docker run -d --name nginx -p 8880:80 -v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /data/nginx/conf/conf.d:/etc/nginx/conf.d -v /data/nginx/log:/var/log/nginx -v /data/nginx/html:/usr/share/nginx/html --privileged=true nginx
此时创建nginx成功,也实现了文件的挂载
修改文件的目录为/data/nginx/html,修改配置文件的目录为/data/nginx/conf
如果要想直接部署自己的前端项目的话,直接放入dist包,然后解压命名为html即可使用
但是如果想配置uri这种多路径的方法的话,需要修改nginx的配置,进入/data/nginx/config,
 vim nginx.config
这里就是nginx的基本配置文件
 user  nginx;
 worker_processes  auto;
 ​
 error_log  /var/log/nginx/error.log notice;
 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;
 }
这里能看出,引出的配置为/conf.d文件夹内部导入的全部*.conf文件,我们在这里修改自己的文件
 cd conf.d
 vi default.conf
 server {
     listen       80;
     listen  [::]:80;
     server_name  localhost;
 ​
     #access_log  /var/log/nginx/host.access.log  main;
 ​
     location /warehouse-management {
         root /usr/share/nginx/html/;
         index  index.html index.htm;
         try_files $uri $uri/ /warehouse-management/index.html =404;
         add_header Cache-Control "no-cache";
     }
 ​
 ​
     #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;
     #}
 }
如果要配置uri这里需要配置文件
 //在location下面进行配置
 //root 为文件根目录
 ​
 ​
 ​
 //这里的/warehouse-management 为uri路径,nginx会在root的目录下去找/warehouse-management文件下的内容
 //如果使用了spa这种单页面的前端项目,刷新会报错404,这里要添加
 // try_files $uri $uri/ /warehouse-management/index.html =404;
 // 这个配置的意思为如果找不到文件,让nginx去尝试找/warehouse-management/index.html
 // 下的内容,这样可以避免出错
 ​
    location /warehouse-management {
         root /usr/share/nginx/html/;
         index  index.html index.htm;
         try_files $uri $uri/ /warehouse-management/index.html =404;
         add_header Cache-Control "no-cache";
     }
 ​
nginx root和alias的区别
 //niginx配置文件目录有两种写法 alias & root
 ​
 location /i/{
   alias /usr/local/nginx/html/admin/;
 }
 //若按照上述配置的话,则访问/i/目录里面的文件时,ningx会自动去/usr/local/nginx/html/admin目录找文件。
 ​
 location /i/ {
   root /usr/local/nginx/html/admin;
 }
 //若按照这种配置的话,则访问/i/目录下的文件时,nginx会去/usr/local/nginx/html/admin/i下找文件。
 //root不会将location配置的路径去掉 也就是请求http://localhost/res/xxx,不会忽略localhost的配置,反而会加在root配置的路径后面,变成f:/res/res/xxx
 //alias会将location配置的路径去掉
 //也就是请求http://localhost/res/xxx,会忽略localhost的配置,不会加在alias配置的路径后面,变成f:/res/xxx,location的/res/被忽略了
 //切记使用alias的时候要以/结束

如果需要配置代理的话

 //nginx 对服务进行转发
 //注意url后方没有斜线
 location /front {
   proxy_pass xxxx
 }