问题
docker部署个nginx,实在是再简单不过了吧
#拉取镜像
docker pull nginx
#启动一个容器
docker run --name docker_nginx -d -p 80:80 docker.io/nginx
就运行起来了
但是存在的问题是:
1.日志哪儿去了?
2.修改了配置文件怎么办?
3.项目的文件放在哪儿
一般来说,解决的办法就是把文件放在宿主机,然后挂载到容器中,修改配置文件只需要docker exec -it containe_name bash进入到容器nginx -s reload重新加载一次配置文件即可。
我是直接拉取的docker hub的nginx镜像
在容器中相关位置分别是:
日志位置:/var/log/nginx/
配置文件位置:/etc/nginx/
项目位置:/usr/share/nginx/html
解决
日志的问题:
nginx的日志比较简单,主要就是access和error日志,只需要挂载宿主目录到容器中nginx日志所在路径即可。
配置文件的问题
配置文件相对来说有点麻烦,一般nginx只需要加载nginx.conf就可以了,在dokcer中,是首先加载nginx.conf,然后在nginx.conf有这么一行include /etc/nginx/conf.d/*.conf;,就是加载conf.d目录下的配置文件。所以对于配置只需要挂载到conf.d,覆盖掉即可。
项目文件的问题
类似日志的操作,挂载宿主机目录到容器即可。
运行容器
1.在宿主机器创建目录
mkdir -p /zzz/mynginx/nginx/log
mkdir -p /zzz/mynginx/nginx/conf
mkdir -p /zzz/mynginx/nginx/html
2.运行容器
docker run --name docker_nginx -d -p 80:80\
-v /zzz/mynginx/nginx/log:/var/log/nginx\
-v /zzz/mynginx/nginx/conf:/etc/nginx/conf.d\
-v /zzz/mynginx/nginx/nginx.conf:/etc/nginx/nginx/conf\
-v /zzz/mynginx/nginx/html:/lx/html\
nginx
#########
第一个-v:挂载日志目录
第二个-v:挂载配置目录
第三个-v:干脆把配置文件直接挂出来,不推荐
第四个-v:挂载项目目录
其他
1.修改配置文件后:
dokcer exec -it docker_nginx nginx -s reload即可,或者dokcer exec -it docker_nginx bash进入docker容器,nginx -s reload即可。
涉及到命令
在docker容器中执行命令:
dokcer exec -it docker_nginx 命令
或者dokcer exec -it docker_nginx bash 进入容器内执行。
验证nginx的配置文件和查看实际使用的配置文件的位置
nginx -t
查看容器信息
docker inspect 容器名
查看容器挂载情况
docker inspect 容器名 | grep Mounts -A 20
配置文件
/zzz/mynginx/nginx/conf/app.conf
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
root /lx/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;
#}
}