1.Docker安装nginx

  • 安装的命令
sudo docker search nginx
docker pull nginx
  • 查看是否安装
docker images

docker nginx 离线部署 docker部署nginx应用_docker nginx 离线部署

  • 运行测试nginx
docker run --name nginx-test -p 9091:80 -d nginx
--name  #给你启动的容器起个名字,以后可以使用这个名字启动或者停止容器
-p #映射端口,将docker宿主机的9091端口和容器的80端口进行绑定
-v #挂载文件用的
-d #表示启动的是哪个镜像。

docker nginx 离线部署 docker部署nginx应用_运维_02


docker nginx 离线部署 docker部署nginx应用_docker_03

2.Nginx服务的配置和部署

  • 为什么需要做文件的映射?

我们在使用容器的过程中需,有时候需要对容器中的文件进行修改管理,如果不做文件映射的化,我们使用docker exec -it 容器ID/容器名 /bin/bash 才能进入nginx中的文件里面如图

docker nginx 离线部署 docker部署nginx应用_nginx_04


如果把关键文件映射到主机上,那么就可以在主机中进行修改而不必进入文件当中才进行修改了。

  • 需要在主机上建立相应的关键文件目录
  • 在home下创建一个docker文件夹,用来专门存docker容器的映射文件。
  • 在docker下创建一个nginx的文件夹,用于存nginx的映射文件。
  • 在nginx下创建三个关键的映射文件。
    www文件映射www目录,也就是网页目录。
    logs文件映射日志目录。
    conf文件映射配置目录
  • 先在容器中拷贝配置文件
docker cp 容器ID:/etc/nginx/nginx.conf /home/docker/nginx/conf
#注意此时的容器必须是运行的

docker nginx 离线部署 docker部署nginx应用_docker_05

  • docker中nginx与主机文件映射规则如下
主机                                              docker
/home/docker/nginx/www                           /usr/share/nginx/html #网页文件
/home/docker/nginx/conf/nginx.conf               /etc/nginx/nginx.conf#配置文件
/home/docker/nginx/logs                          /var/log/nginx#日志文件
  • 关闭之前运行的容器
docker stop 容器ID
docker rm 容器ID
  • 运行nginx,同时进行文件挂载
docker run -d -p 9091:80  --name nginx-test -v /home/docker/nginx/www:/usr/share/nginx/html -v /home/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /home/docker/nginx/logs:/var/log/nginx nginx

docker nginx 离线部署 docker部署nginx应用_docker_06

  • 在www目录下建立一个html文件
  • 访问nginx

3.Nginx的普通配置

通过nginx为多为个域名配置服务,使得通过浏览器可以访问到相应的域名。

3.1 创建html文件

  • 在映射到主机下的/home/docker/nginx/www下创建html文件或者域名的文件夹

docker nginx 离线部署 docker部署nginx应用_docker_07

其中blog.hklblog.net和www.hklblog.com是存放不同域名访问的文件路劲。里面都有对应的index.html

3.2 修改host文件

sudo gedit /etc/hosts

docker nginx 离线部署 docker部署nginx应用_docker nginx 离线部署_08

3.3 修改nginx.conf文件

提醒 「路径问题」

  • 这里需要提醒一下,在前面我们已经把nginx中的配置文件映射到主机目录下,我们在主机目录下修改了/home/docker/nginx/www的文件,同时nginx容器中的/usr/share/nginx/html下的文件有会有相同的变化。但是在配置文件中使用的路径得是nginx的,而不应该是主机的路径。
  • 打开主机映射的nginx配置文件
sudo gedit /home/docker/nginx/conf/nginx.conf

docker nginx 离线部署 docker部署nginx应用_nginx_09

server中的配置解释参考如下:

docker nginx 离线部署 docker部署nginx应用_docker_10

  • 重启docker
docker ps#获取容器的ID
docker restart 容器ID

docker nginx 离线部署 docker部署nginx应用_docker nginx 离线部署_11

  • 在浏览器通过www.hklblog.com
  • docker nginx 离线部署 docker部署nginx应用_ubuntu_12

  • 以同样的方式为blog,hklblog.net配置服务
    「修改nginx.conf」–「添加一个server」–「重启docker」–「浏览器域名访问」
  • docker nginx 离线部署 docker部署nginx应用_nginx_13

  • 浏览器通过域名访问
  • docker nginx 离线部署 docker部署nginx应用_docker nginx 离线部署_14

  • 错误心得

当有时启动容器,通过docker ps 发现容器并没有启动,那么通过docker ps -a可查看容器的状态:
created(已创建)
restarting(重启中)
running(运行中)
removing(迁移中)
paused(暂停)
exited(停止)
dead(死亡)
然后通过查看日志:docker logs 容器ID
可以从中发现未能启动的原因。

docker nginx 离线部署 docker部署nginx应用_nginx_15

4.代理模式

4.1 正向代理

  • 描述「正向代理」

客户端<---->代理服务器<---->服务器
架设在客户机与目标主机之间,只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器,并将原本要直接发送到web服务器上的http请求发送到代理服务器中。

  • 迁移 租房 「正向代理」

A(租客=客户端),B(中介=代理服务器),C(房东=服务器)
A想要组C的房子,但是A并不认识C所以租不到,但是B认识C,A找B帮忙租到了C的房子。
此过程C是不知到是A租了房子,只知道房子租给了B,但是A知道是租C的房子。所以对客户端是透明的。

4.2 反向代理

  • 描述 「反向代理」

客户端—>代理服务器<—>服务器
反向代理服务器架设在服务端,通过缓冲经常被请求的页面来缓解服务器的工作量,将客户机请求转发给内部网络上的目标服务器;并将从服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器与目标主机一起对外表现为一个服务器。正式反向代理对真正的服务器起到了保护作用,所以反向代理比较流行。

  • 迁移 租房 「反向代理」

A (租客=客户端),B(中介=代理服务器),C(服务器=房东)
A想租房子,B直接把房子租给了它。但实际上C才是房东,B租房给A的这个过程中,A并不知道谁是真正的房东。

4.3 配置反向代理

  • 案例 「代理访问」

通过访问blog.hklblog.net,来访问www.baidu.com

  • 操作

只需要在nginx的配置当中的server下的location中添加proxy_pass:https:www.baidu.com

#配置服务blog.hklblog.net
    server{#配置虚拟主机的相关参数,一个http块有多个server
	listen		80;#监听端口
	server_name	blog.hklblog.net;#配置域名
	root		/usr/share/nginx/html/blog.hklblog.net;#配置根目录
	location / {
		#配置请求的路由,以及各种页面的处理情况
		root		/usr/share/nginx/html/blog.hklblog.net;#根目录
		index 		index.html index.htm;#默认首页
		proxy_pass 	https://www.baidu.com;#配置反向代理
	}
 }
  • 通过浏览器访问