自制nginx实现卷共享
前段时间写过一篇博客,其中用yum安装nginx之后,容器内部的nginx服务的index.html会自动与宿主机中的index.html文件形成映射关系,而由于宿主机中没有该目录下的文件,所以会导致403错误。现在在容器内部对nginx服务进行配置
配置阿里云的镜像
#拉取阿里云镜像的repo文件
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-8.repo
#生成缓存
yum makecache
没有卷共享功能的镜像
Dockerfile文件
FROM centos:latest
RUN rm -rf /etc/yum.repos.d/*
ADD yum.repos.d /etc/yum.repos.d/
RUN yum clean all
RUN [ "yum", "update", "-y"] && [ "yum", "install", "-y", "nginx"]
ADD nginx/global.conf /etc/nginx/conf.d/
ADD nginx/nginx.conf /etc/nginx/nginx.conf
EXPOSE 80
nginx配置文件内容
global.conf和nginx.conf文件
global.conf内容如下:
server {
listen 0.0.0.0:80;
server_name _;
root /usr/share/nginx/html/;
index index.html index.xml;
access_log /var/log/nginx/default_access.log;
error_log /var/log/nginx/default_error.log;
}
nginx.conf文件内容如下:
worker_processes 4;
pid /run/nginx.pid;
daemon off;
events { }
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
gzip on;
gzip_disable "msie6";
include /etc/nginx/conf.d/*.conf;
}
制作nignx镜像
在以上准备工作都做好之后,就可以开始nginx镜像的制作了
docker build -t nginx1 .
基于该镜像启动容器:
docker run -d -p 8082:80 nginx1
在浏览器中输入本机地址192.168.225.145:8082,可以看到页面如下,192.168.225.145是宿主机的ip地址:
有卷共享功能的镜像
Dockerfile文件
FROM centos:latest
RUN rm -rf /etc/yum.repos.d/*
ADD yum.repos.d /etc/yum.repos.d/
RUN yum clean all
RUN [ "yum", "update", "-y"]
RUN [ "yum", "install", "nginx", "-y"]
VOLUME "/usr/share/nginx/html"
ADD nginx/global.conf /etc/nginx/conf.d/
ADD nginx/nginx.conf /etc/nginx/nginx.conf
EXPOSE 80
CMD ["nginx"]
配置文件
1.global.conf文件内容如下:
server {
listen 0.0.0.0:80;
server_name _;
root /usr/share/nginx/html;
index index.html index.xml;
access_log /var/log/nginx/default_access.log;
error_log /var/log/nginx/default_error.log;
}
2.nginx.conf文件内容如下:
user root;
worker_processes 4;
pid /run/nginx.pid;
daemon off;
events { }
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
gzip on;
gzip_disable "msie6";
include /etc/nginx/conf.d/*.conf;
}
制作镜像
docker build -t voulumenginx1 .
检查
docker run -v /etc/html1/:/usr/share/nginx/html -p :8088:80 -d --name "hv" voulumenginx1
这里指定将宿主机的/etc/html1/目录挂载到/usr/share/nginx/html上面,因此能实现卷共享的功能
先看/etc/html1/目录下是否有内容
发现,此时该目录下没有首页内容,并且登录网址,发现如下界面,显示为403错误,即没有首页或者首页没有访问权限。
新建index.html文件
vim index.html
内容如下:
再去访问网页:
此时进入容器内部:
[root@docker-learning-centos7 ~]# docker exec -it hv /bin/bash
[root@af2daf5dd8cc /]# cd /usr/share/nginx/html/
卷共享
新启动容器,使用–volumes-from选项,将指定容器里面的所有卷都加入到新创建的容器里。
[root@docker-learning-centos7 html1]# docker run -d -p 8089:80 --volumes-from hv voulumenginx1
访问该网址
至此,卷共享已经实现了