Nginx 入门

Docker 部署 Nginx,以及 Nginx 反向代理的配置。

Docker 部署 Nginx

docker container run \
  -d \
  -p 8099:80 \
  --name mynginx \
  nginx

以上命令会部署一个 nginx 容器, 各参数含义:

  • -d
    后台运行
  • -p 8099:80
    容器的 80 端口映射宿主的 8099 的端口
  • --name mynginx
    指定容器的名字为 mynginx

部署成功后,访问 IP:8099 ,即可看到 nginx 的默然欢迎页。

挂载宿主目录

Nginx 容器的默认配置文件位于 /etc/nginx/conf.d/default.conf,其默认配置的地址为 /usr/share/nginx/html/index.html

为了更加直观地看到是否成功挂载目录,我们新建一个 html 文件代替 Nginx 的默然欢迎页。

首先在宿主中新建目录 mkdir /nginx-demo/html/,并在该目录下新建一个 html 文件 vim index.html,输入 <h1>Hello World</h1> 并保存。重新运行一下容器:

docker container run \
  -d \
  -p 8099:80 \
  -v /nginx-demo/html/:/usr/share/nginx/html \
  --rm \
  --name mynginx \
  nginx

现在访问 IP:8099 应该就可以看到 hello world 了。 -v 宿主目录:容器目录 命令即可实现目录挂载。

映射配置目录

把容器 mynginx 的 /etc/nginx 拷贝到宿主 /nginx-demo/conf 目录

docker cp mynginx:/etc/nginx /nginx-demo/conf 

可以把配置修改后再挂载到容器中,已解决 Nginx 容器中无法使用 vim 命令的问题。

代理其他容器

连接容器 --link tomcat001:t01

-–link 表示当前命令启动的容器要和另一个名叫 tomcat001 的容器建立连接,tomcat001:t01 中的 t01 表示 t01 是连接建立后 tomcat001 的别名,或者可以理解为容器启动后,在容器的 /etc/hosts 文件中加入了一条记录,ip 是 tomcat001 的 ip,name 是 t01。

我们输入 docke exec -it mynginx /bin/bash 登录 mynginx,再输入 cat /etc/hosts 即可看到 t01 指代的 ip 地址。

另外在容器内使用 env 可查看环境变量

T01_PORT_8080_TCP_PORT=8080 //可以看到容器t01端口为8080

反向代理,负载均衡

修改 /etc/nginx/con.f/default.conf 配置文件

upstream mytomcat{
    //如果代理多个容器可以配置 weight 权重实现负载均衡
    server t01:8080 weight=1; 
}

server {
    ...
    location / {  
        # 注释之前的 root、index
        # 添加
        proxy_pass http://mytomcat;  
    }       
}

重新运行一下容器

docker container run \
  -d \
  -p 8099:80 \
  -v /nginx-demo/html/:/usr/share/nginx/html \
  -v /nginx-demo/conf/:/etc/nginx \
  --rm \
  --name mynginx \
  --link tomcat001:t01 \
  nginx

这时访问 IP:8099 已不再指向原来的 hello world 页面,而是反向代理到了 tomcat 的主页。

其他

docker 已关闭,却依然可以访问 nginx 页面?

可能是浏览器缓存

代理宿主机

一番操作后突然想到,直接在部署 nginx 时映射主机的 80 端口不就可以了 (:з」∠)

参考

阮一峰 Nginx 容器教程 等等

posted @ 2018-08-18 17:11  扬州慢  阅读(228)  评论(0编辑  收藏  举报