Docker安装、配置Nginx(学习笔记2020.09.06)
1.0 获取Nginx
# 搜索nginx镜像
[root@zhihao /]# docker search nginx
# 下载最新nginx镜像
[root@zhihao /]# docker pull nginx
# 查看本地镜像是否下载成功
[root@zhihao /]# docker images nginx
1.1 创建(启动)Nginx
容器
[root@zhihao /]# docker run -id --name=nginx -p80:80 4bb46517cac3(镜像ID)
这个时候就可以访问,看看是否正常启动。
1.2 登录进去Nginx
容器
[root@zhihao /]# docker exec -it f5be6c7819a9(容器ID) /bin/bash
退出使用
exit
查看文件使用命令ls
可以
cd /etc/nginx
,可以看到相关的nginx配置文件都在/etc/nginx
目录下, 而nginx
容器内的默认首页html文件目录为/usr/share/nginx/html
,日志文件位于/var/log/nginx
这样对于需要频繁修改
nginx
配置文件来说很不友好。下面使用目录挂载的方式来启动容器。
2.0 使用目录挂载方式启动Nginx
容器
将nginx容器内部配置文件挂载到主机,之后就可以在主机对应目录修改即可。适合频繁修改,复杂使用的情况。
2.1 创建3个对应文件夹
在容器外部创建3个对应文件夹。 我这里创建在
/usr/local/
[root@zhihao local]# mkdir -p ./nginx/{html,logs}
2.2 将容器内部配置文件对应拷贝到创建的文件夹下面
执行下面命令进行拷贝,
docker cp 容器ID:需要拷贝的文件 拷贝到那里(./代表当前目录下)
[root@zhihao local]# docker cp f5be6c7819a9:/etc/nginx ./
2.3 停止之前的Nginx
容器,并进行删除
[root@zhihao local]# docker stop f5be6c7819a9
[root@zhihao local]# docker rm f5be6c7819a9
2.4 启动目录挂载的Nginx
容器
运行以下命令进行目录挂载
-v
(一段一段的复制过去!) (前面是虚拟机文件路径: 容器路径)
[root@zhihao local]# docker run -id --name=nginx -p80:80 -v /usr/local/nginx:/etc/nginx
-v /usr/local/nginx/logs:/var/log/nginx -v /usr/local/nginx/html:/usr/share/nginx/html
--privileged=true 4bb46517cac3
2.5 进行访问
第一次访问,发现页面出现了403, 这是因为我们挂载的
html
文件夹还是空白的,我们上传之前
linux
下学习的nginx
配置页面上去在访问,是否看到欢迎页面! 看到说明正常启动!
2.6 进行反向代理
2.6.1 查看docker容器内部IP
地址
并找到
docker0
容器内部IP
地址
[root@zhihao local]# ifconfig
本宿主机挂载的
nginx.config
配置文件增加service
节点
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 {
listen 80;
#域名可以有多个,用空格隔开
server_name zhihao.free.idcfengye.com;
location / {
# 请注意此处是容器内部IP, 我们访问的项目是容器内部项目, 外部就写外部ip
proxy_pass http://172.17.0.1:8080/;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
#后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
}
配置好后, 重启
nginx
容器docker restart 容器ID
这里有个坑自己被坑蛮久的。 之前一直proxy_pass http: 写的是
127.0.0.1
IP地址,一直访问不上。或者直接写外部公网可以访问项目的
ip地址加端口(http://47.115.80.6:8080/)
3.0 其他Nginx配置看之前的一样配就可以了!
1