Docker&Nginx-安装与配置

创建Nginx容器

  1. 下载nginx镜像
docker pull nginx
  1. 创建nginx容器
docker run --name nginxweb -p 8080:80 -d nginx
  1. 这样一来nginx就创建好了,直接访问ip:8080就可以看到nginx安装好的页面

图片

4、改变配置实现更多功能,这种情况下得进入容器更改配置信息

docker exec -it nginxweb /bin/bash

配置文件在容器内/etc/nginx/路径下的nginx.conf和conf.d文件夹内的default.conf文件
图片

但是默认使用vi或vim去修改是没有用的,因为没得,得去安装,这种情况下就很麻烦,更常用的是做个数据卷,将容器内文件映射到容器外,这样改变主机文件就改变了容器内文件,方便些。

如果不嫌麻烦在容器内改完配置文件后,重启容器

docker restart nginxweb

这样不是很方便,先删除容器。

docker stop nginxweb
docker rm nginxweb

挂载配置文件

在主机上设置配置文件,以方便主机直接修改nginx容器内的配置信息。

建立映射文件夹

  1. 先建立几个文件夹用于存放数据卷的
mkdir -p /docker/nginx
mkdir -p /docker/nginx/conf
mkdir -p /docker/nginx/www
mkdir -p /docker/nginx/logs

这几个文件对应着nginx内的配置文件,如此下来,重新创建nginx容器并指定数据卷,这样当我们修改本地文件时候,也就是nginx容器内部文件修改了。
2. 创建一个临时容器用来复制配置信息

docker run --name nginxweb -p 8080:80 -d nginx
  1. 先将临时容器内已有的配置信息拷贝到主机文件中
docker cp nginxweb:/etc/nginx/nginx.conf /docker/nginx
docker cp nginxweb:/etc/nginx/conf.d /docker/nginx/conf
docker cp nginxweb:/usr/share/nginx/html /docker/nginx/www
docker cp nginxweb:/var/log/nginx /docker/nginx/logs

详细描述

  • 第一步,将容器内etc/nginx/nginx.conf文件拷贝到主机docker/nginx文件夹下
  • 第二步,将容器内etc/nginx/conf.d文件夹拷贝到主机docker/nginx/conf文件夹内,这样主机conf文件夹内有文件夹conf.d,这个文件夹内有default.d文件
  • 第三步,将容器内usr/share/nginx/html文件夹拷贝到主机docker/nginx/www文件夹内,这样主机www文件夹内有文件夹html,这个文件夹内有index.html和50x.html文件
  • 第四步,将容器内var/log/nginx文件夹拷贝到主机docker/nginx/logs文件夹内,这样主机logs文件夹内有文件夹nginx,这个文件夹内有access.log和error.log文件
  1. 删除临时容器
docker stop nginxweb
docker rm nginxweb

再次创建nginx容器

创建带数据卷映射的容器

docker run \
--name nginxweb \
-p 8080:80 \
-v /docker/nginx/nginx.conf:/etc/nginx/nginx.conf \
-v /docker/nginx/conf/conf.d:/etc/nginx/conf.d \
-v /docker/nginx/www:/usr/share/nginx \
-v /docker/nginx/logs:/var/log \
-d \
nginx

命令解释:

  • --name 容器名字
  • -p 映射端口,将宿主机的8080端口和容器的80端口进行绑定
  • -v 挂载文件
    • 第一个,将主机的nginx.conf映射到容器内的nginx.conf文件,也就是将这个nginx.conf文件拷贝到容器内nginx文件夹下的nginx.conf文件
    • 第二个,将主机的conf.d文件夹映射到容器内conf.d文件夹,也就是将conf.d文件夹内的defaut.d文件拷贝到容器内conf.d文件夹内
    • 第三个,将主机的www文件夹映射到容器内nginx文件夹下,也就是将www文件夹内的html文件夹拷贝到容器内nginx文件夹内
    • 第四个,将主机的logs文件夹映射到容器内log文件夹下,也就是将logs文件夹内的nginx文件夹拷贝到容器内log文件夹内
  • -d 后台进程
  • 最后一个是镜像名

这样一来,再次访问ip:8080又可以看到Nginx安装成功的页面了。

更改配置实现功能

反向代理

修改/docker/nginx/nginx.conf文件,增加反向代理设置,此处我下载了一个winscp工具以方便修改文件。从第31行开始,增加反向代理配置。

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;
  server {
    location / {
      proxy_pass http://119.3.138.127:80/;
      proxy_redirect default;
   }
  }
}

如此一来保存后重新启动容器

docker restart nginxweb

再次访问,发现并不能直接请求到期望的代理地址,而是仍然看到欢迎页。
图片

因为/docker nginx/conf/conf.d中的default.conf文件夹内有这个location /配置,在nginx.conf中通过include使用了这个文件,优先匹配。

  • 注释掉Include后,不走欢迎页面,直接会请求到代理地址

图片

  • 或是直接删除默认文件conf.d文件夹内的default.conf也行,这样就会直接使用nginx.conf中的配置。

这样一来,便方便的将请求转发了,还有很多参数的使用此处不详细说明。

2021-09-19,望技术有成后能回来看见自己的脚步

posted @ 2021-09-19 23:03  微笑刺客D  阅读(4110)  评论(0编辑  收藏  举报
返回顶部