1.Docker安装nginx
- 安装的命令
sudo docker search nginx
docker pull nginx
- 查看是否安装
docker images
- 运行测试nginx
docker run --name nginx-test -p 9091:80 -d nginx
--name #给你启动的容器起个名字,以后可以使用这个名字启动或者停止容器
-p #映射端口,将docker宿主机的9091端口和容器的80端口进行绑定
-v #挂载文件用的
-d #表示启动的是哪个镜像。
2.Nginx服务的配置和部署
- 为什么需要做文件的映射?
我们在使用容器的过程中需,有时候需要对容器中的文件进行修改管理,如果不做文件映射的化,我们使用docker exec -it 容器ID/容器名 /bin/bash 才能进入nginx中的文件里面如图
如果把关键文件映射到主机上,那么就可以在主机中进行修改而不必进入文件当中才进行修改了。
- 需要在主机上建立相应的关键文件目录
- 在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
/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
- 在www目录下建立一个html文件
- 访问nginx
3.Nginx的普通配置
通过nginx为多为个域名配置服务,使得通过浏览器可以访问到相应的域名。
3.1 创建html文件
- 在映射到主机下的/home/docker/nginx/www下创建html文件或者域名的文件夹
其中blog.hklblog.net和www.hklblog.com是存放不同域名访问的文件路劲。里面都有对应的index.html
3.2 修改host文件
sudo gedit /etc/hosts
3.3 修改nginx.conf文件
提醒 「路径问题」
- 这里需要提醒一下,在前面我们已经把nginx中的配置文件映射到主机目录下,我们在主机目录下修改了/home/docker/nginx/www的文件,同时nginx容器中的/usr/share/nginx/html下的文件有会有相同的变化。但是在配置文件中使用的路径得是nginx的,而不应该是主机的路径。
- 打开主机映射的nginx配置文件
sudo gedit /home/docker/nginx/conf/nginx.conf
server中的配置解释参考如下:
- 重启docker
docker ps#获取容器的ID
docker restart 容器ID
- 在浏览器通过www.hklblog.com
- 以同样的方式为blog,hklblog.net配置服务
「修改nginx.conf」–「添加一个server」–「重启docker」–「浏览器域名访问」 - 浏览器通过域名访问
错误心得
4.代理模式当有时启动容器,通过docker ps 发现容器并没有启动,那么通过docker ps -a可查看容器的状态:
created(已创建)
restarting(重启中)
running(运行中)
removing(迁移中)
paused(暂停)
exited(停止)
dead(死亡)
然后通过查看日志:docker logs 容器ID
可以从中发现未能启动的原因。
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;#配置反向代理
}
}
- 通过浏览器访问