详解Docker下nginx外挂配置和⽂件
外挂⽂件的⽬的:
⽂件不受docker镜像⽂件的约束,可以修改,重启容器,可以使⽤更新后的⽂件,不会被镜像还原
容器运⾏过程中记录的⽂件如⽇志等信息,可以被⾃动保存在外部存储上,不会由于容器重启⽽丢失
⽽运⾏容器有两种⽅式:
docker run命令
docker-compose命令
docker run命令⽅式,通过-v参数挂载外部主机⽬录到容器内的路径上,有多个挂载点,就通过多个-v参数指定,⽽且只能使⽤绝对路径;docker-compose命令则通过service的⽅式描述容易,准确的说⼀个服务下⾯可以包含多个容器,也是通过-v参数配置外部路径的挂载配置,好处是可以使⽤相对路径,当然是相对与l⽂件的路径。还有⼀个好处是,docker-compose启动容器的命令⽐较简单。
假设镜像打包路径结构如下:
├── build.sh
├── l
├── Dockerfile
├── f
├── nginx-vol
│├── conf.d
││└── f
│├── html
││└── index.html
│└── logs
│├── access.log
│└── error.log
└── run.sh
Dockerfile为构建镜像的配置⽂件,内容如下:
FROM nginx
LABELmaintainer="xxx"email="<***********>"app="nginxtest"version="v1.0"
ENV WEBDIR="/data/web/html"
RUN mkdir -p ${WEBDIR}
EXPOSE 5180
以nginx为基础,指定新的数据⽂件路径为/data/web/html,暴露端⼝为5180。
通过以下命令编译新的镜像:
docker build -t nginx:test-v1 .
编译出来的镜像tag为test-v1,可以查看本地镜像:
docker images
REPOSITORY  TAG      IMAGE ID      CREATED          SIZE
nginx        test-v1  d2a0eaea3fac  56 minutes ago  141MB
nginx        latest    605c77e624dd  9 days ago      141MB
可以看到TAG为test-v1的镜像是刚刚编译出来的新镜像。
创建nginx外挂卷nginx-vol以及相关的conf.d、logs、html⽂件夹,并把对应的内容放⼊各⾃对应的⽬录下。如html⽂件夹下的iindex.html内容如下:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title>系统时间</title>
<body>
<div id="datetime">
<script>
setInterval("ElementById('datetime').innerHTML=new Date().toLocaleString();",1000);
</script>
</div>
</body>
</head>
</html>
其实就是显⽰当前时间的⼀个页⾯⽽已。
logs下⾯为空,⽬的是让容器运⾏时的⽇志写到外部存储,即使容器停⽌或镜像销毁,运⾏过的⽇志仍然可以保留。
conf.d下⾯为nginx个性化配置,内容如下:
server {
listen      5180;
#listen  [::]:5180;
server_name  localhost;
#access_log  /var/log/nginx/host.access.log  main;
location / {
root  /data/web/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  127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#    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;
}
其实也就是在nginx默认的f基础上修改了端⼝和root路径,⽬的是说明nginx的配置⽂件也可以使⽤外部存储的,如果是⾃⼰的程序可以修改配置⽂件,那通过这样的⽅式,可以在容器运⾏过程中修改配置⽂件;修改的配置⽂件实际存储在外部存储上,因此不会随着容器的停⽌运⾏⽽消失,也
不会恢复为镜像内部的⽂件。
docker run模式
为了⽅便,可以把运⾏命令写到shell脚本中,如run.sh,内容如下:
docker run --name nginx-v1 -p 15180:5180 -v /home/project/nginx-test/nginx-vol/logs:/var/log/nginx -v /home/project/nginx-test/nginx-vol/conf.d:/etc/nginx/conf.d -v /home/project/nginx-test/nginx-vol/html:/data/web/html -d nginx:test-v1可以看到命令中有3个-v,分别对应不同的外部存储的挂载,映射到容器内的不同⽬录下。
-p(注意是⼩写)后⾯的端⼝分别为主机端⼝和容器端⼝,也就是主机的15180端⼝映射到容器的5180端⼝,这样容器所启动的nginx服务端⼝5180就可以通过访问主机的15180端⼝⽽被映射起来。
查看运⾏中的容器:
docker ps -a
CONTAINER ID  IMAGE          COMMAND                  CREATED        STATUS        PORTS                                                NAMES
cf2275da5130  nginx:test-v1  "/docker-entrypoint.…"  6 seconds ago  Up 5 seconds  80/tcp, 0.0.0.0:15180->5180/tcp, :::15180->5180/tcp  nginx-v1
详细映射查看:
docker inspect nginx-v1
会显⽰完整的信息,其中"Mounts"部分可以看到完整的存储挂载映射情况。
直接看主机的nginx-vol/logs下⾯,可以看到容器中的nginx运⾏⽇志⾃动写到了外部主机的存储上。
ls -l nginx-vol/logs/
total 12
-rw-r--r-- 1 root root 1397 1⽉  8 15:08 access.log
-rw-r--r-- 1 root root 4255 1⽉  8 15:59 error.log
停⽌容器:
docker stop nginx-v1
删除容器:
docker rm nginx-v1
docker-compose模式
安装docker-compose
nginx和apache区别apt-get install docker-compose
编写l⽂件
version: "3"
services:
nginx:
container_name: mynginx
image: nginx:test-v1
ports:
- 80:5180
volumes:
- ./nginx-vol/html:/data/web/html
- ./nginx-vol/logs:/var/log/nginx
- ./nginx-vol/conf.d:/etc/nginx/conf.d
restart: always
container_name:指定容器名称
image:要使⽤的镜像以及对应的标签
ports:主机端⼝与容器端⼝映射
volumes:外部存储挂载映射
启动容器
docker-compose up -d
Creating network "nginxtest_default" with the default driver
Creating mynginx ...
Creating mynginx ... done
查看容器
docker ps -a
CONTAINER ID  IMAGE          COMMAND                  CREATED          STATUS          PORTS                                          NAMES
635e2999c825  nginx:test-v1  "/docker-entrypoint.…"  24 seconds ago  Up 22 seconds  80/tcp, 0.0.0.0:80->5180/tcp, :::80->5180/tcp  mynginx
可以看到容器按照l配置运⾏,端⼝、名称、挂载都正常。访问主机的80端⼝即可
对应容器的5180服务。
停⽌容器
docker-compose down
Stopping mynginx ... done
Removing mynginx ... done
Removing network nginxtest_default
可以看到,使⽤docker-compose更简单。
到此这篇关于Docker下nginx外挂配置和⽂件的⽂章就介绍到这了,更多相关Docker nginx外挂配置内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。