一、为什么要构建Nginx私有镜像?
1.官方镜像的系统时间是UTC(协调世界时),而我们常用的是CST(北京时间)。
2.官方镜像挂载配置文件到宿主机时,需要手动拷贝配置文件,否则无法正常启动。
二、镜像修改过程:
1、增加自定义shell文件wrapper.sh,实现配置文件拷贝。
脚本如下:
#!/bin/sh
# Generate copy host mount files for the first time
if [[ ! -e /custom/conf/nginx.conf ]]; then
echo "Copy config file (nginx.conf)..."
cp -f /etc/nginx/nginx.conf /custom/conf/nginx.conf
chmod 0600 /custom/conf/nginx.conf
else
cp -f /custom/conf/nginx.conf /etc/nginx/nginx.conf
fi
if [[ ! -e /custom/conf/default.conf ]]; then
echo "Copy config file (default.conf)..."
cp -f /etc/nginx/conf.d/default.conf /custom/conf/default.conf
chmod 0600 /custom/conf/default.conf
else
cp -f /custom/conf/default.conf /etc/nginx/conf.d/default.conf
fi
2、增加Nginx服务自定义启动脚本start-nginx.sh,实现Nginx服务启动。
脚本如下:
#!/bin/sh
#执行初始化配置
echo "daemon off;" >> /etc/nginx/nginx.conf
source /usr/local/bin/wrapper.sh
#启动Nginx服务
nginx
3、增加dockerfile文件,实现Nginx官方镜像自定义。
脚本如下:
#使用docker nginx:1.16-alpine镜像
FROM nginx:1.16-alpine
#作者信息
MAINTAINER cuishanwei <kavin>
LABEL Description="This image is used to serve TPRI-AQSC project" Version="1.0"
#定义环境变量
ENV TIME_ZONE Asia/Shanghai
#Alpine目录并无timezone及locatime配置,所以需要先安装
#dockerfile增加命令
RUN \
#安装tzdata安装包
apk add --no-cache tzdata \
#设置时区
&& echo "${TIME_ZONE}" > /etc/timezone \
&& ln -sf /usr/share/zoneinfo/${TIME_ZONE} /etc/localtime
#copy files
COPY wrapper.sh /usr/local/bin/
COPY start-nginx.sh /usr/local/bin/
RUN chmod 777 /usr/local/bin/*
# Define data volumes
VOLUME ["/custom/conf"]
#工作区域
WORKDIR /var/log/nginx
#暴露端口
EXPOSE 80
#启动时运行tomcat
CMD ["start-nginx.sh", "run"]
4、生成自定义docker镜像nginx-alpine:1.16。
命令行执行:
docker build -t nginx-alpine:1.16 . -f dockerfile
网友评论