目标:
- 通docker运行Nginx
- 通过Nginx容器访问主机的静态资源
- 通过主机配置文件配置Nginx容器
- docker控制容器中的Nginx(启动、运行、停止、重新载入配置文件)
1. docker安装Nginx
# 拉取Nginx官方镜像
docker pull nginx
# 以后台方式运行Nginx容器,主机的8888映射到容器的80端口
docker run -d --name mynginx1 -p 8888:80 nginx
运行后,访问主机http://localhost:8888,显示Nginx的欢迎页面标识Nginx运行成功。
2. 通过Nginx容器访问主机的静态资源
我们通过容器卷的挂载即可实现这个功能,这个需求通常用于部署前端的项目,如Vue项目。
1. 静态资源目录结构
宿主机静态资源目录结构
[root@izuf62q1gvb6ciiunrm2b1z ~]# tree docker/
docker/
└── nginx
└── html
└── index.html
index.html
是Nginx默认配置文件的文件名称,此处实验中文件名称必须是index.html
我们的index.html内容如下
[root@izuf62q1gvb6ciiunrm2b1z ~]# cat docker/nginx/html/index.html
Hello Nginx Continer!!!!!
2. 挂载数据卷启动容器
我们需要通过Nginx访问到上面的index.html
,这样配置挂载卷即可:
# /usr/share/nginx/html 是官方Nginx镜像默认的静态资源访问目录
docker run -d -p 8888:80 --name mynginx -v /root/docker/nginx/html:/usr/share/nginx/html:ro nginx
如上启动Nginx,访问http:localhost:8888,能够显示上面的index.html
内容即可。
3. 通过主机配置文件配置Nginx容器
1.Nginx默认配置文件如下
容器中的配置文件只能使用server关键字
编译安装的Nginx默认配置文件:
https://github.com/nginx/nginx/blob/master/conf/nginx.conf
容器中Nginx默认配置文件:
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
拷贝配置文件内容到 default.conf
注意: 文件名称一定要是 default.conf,这是因为容器中的默认配置文件名称是default.conf,要与容器保持一致。
主机配置文件目录如下:
[root@izuf62q1gvb6ciiunrm2b1z ~]# tree docker/
docker/
└── nginx
├── conf.d
│ └── default.conf
└── html
└── index.html
2.使用主机配置文件运行Nginx
也是通过挂载数据卷的方式运行,为了测试使用的是主机的配置文件,我们将default.conf
中80端口改为808端口
修改后如下
server {
listen 808; # 从80修改为808
server_name localhost;
同时我们也需要修改容器的端口映射,运行如下命令
docker run -d -p 8888:808 --name mynginx -v /root/docker/nginx/html:/usr/share/nginx/html:ro -v /root/docker/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf nginx
访问http://localhost:8888,显示正常即可,注意容器中的配置文件不能使用http
,worker_processes
,user
等关键字,这是与平常编译安装的Nginx一个区别。
4. docker控制容器中的Nginx(启动、运行、停止、重新载入配置文件)
注意: 以下命令是Nginx常用命令,只不过我们可以在主机中执行,当然也可以直接在容器中运行
进入容器,使用你的容器名或容器id替换[容器名称/容器id]
docker exec -it [容器名称/容器id] bash
说明: mynginx是我的Nginx容器名称
1. 停止容器中的Nginx
docker exec -it mynginx service nginx stop
2. 启动容器中的Nginx,在1命令后执行
docker exec -it mynginx service nginx start
3. 退出Nginx,与stop不同的是,quit会关闭Nginx的连接,更加有优雅
docker exec -it mynginx service nginx quit
4. 重启Nginx
docker exec -it mynginx service nginx restart
5. 查看容器中Nginx版本
docker exec -it mynginx nginx -v
6. 检测Nginx配置文件语法正确性,-c可以制定配置文件,配置数据卷可以检主机Nginx配置文件
docker exec -it mynginx nginx -t
7. 查看Nginx是否在运行
docker exec -it mynginx service nginx status
8. 重新载入Nginx配置文件
docker exec -it mynginx service nginx reload