# 第一行先定义根底镜像,示意以后镜像文件是基于哪个进行编辑的.
FROM debian:buster-slim
# 指定镜像维护者的信息.
MAINTAINER @Owen 975706304@qq.com
# 先备份原源配置文件
RUN cp /etc/apt/sources.list /etc/apt/sources.list.bak
# 而后将 debian 的 apt 源改成中科大源
RUN sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
RUN sed -i 's|security.debian.org/debian-security|mirrors.ustc.edu.cn/debian-security|g' /etc/apt/sources.list
RUN apt clean && apt update -y
# 初始版的 nginx 须要的依赖:gcc zlib1g zlib1g-dev openssl libssl-dev libpcre3 libpcre3-dev
# libgd-dev 和 libexif-dev 为 ngx_http_image_filter_module 须要的依赖
RUN apt -y install gcc
RUN apt -y install zlib1g zlib1g-dev
RUN apt -y install openssl libssl-dev
RUN apt -y install libpcre3 libpcre3-dev
RUN apt -y install libgd-dev
RUN apt -y install libexif-dev
RUN apt -y install make
# 将 dockerfile 上下文目录中的 ngx_http_image_filter_module.tar.gz 文件拷贝进容器根目录并解压
COPY ngx_http_image_filter_module.tar.gz /ngx_http_image_filter_module.tar.gz
RUN tar zxf ngx_http_image_filter_module.tar.gz
# 将 dockerfile 上下文目录中的 nginx-1.16.1.tar.gz 文件拷贝进容器根目录并解压
COPY nginx-1.16.1.tar.gz /nginx-1.16.1.tar.gz
RUN tar zxf nginx-1.16.1.tar.gz
# 创立 nginx 用户,yum 形式装置无需做此步骤,因为默认 yum 装置会主动创立 nginx 用户
# 咱们上面命令以 nginx 用户运行,因而咱们须要在容器中创立 nginx 用户
# -M(不创立主目录) -s(不容许登录)
RUN useradd -M -s /sbin/nologin nginx
# 切换至 nginx 目录
WORKDIR /nginx-1.16.1
# 编译装置 nginx
# --with-http_stub_status_module -> Nginx 性能统计模块
# --with-http_ssl_module -> ssl 加密模块
# --add-module=/ngx_http_image_filter_module -> 图片裁剪模块
RUN ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--sbin-path=/usr/local/nginx/sbin/nginx \
--modules-path=/usr/local/nginx/modules \
--conf-path=/usr/local/nginx/conf/nginx.conf \
--error-log-path=/usr/local/nginx/logs/error.log \
--http-log-path=/usr/local/nginx/logs/access.log \
--pid-path=/usr/local/nginx/logs/nginx.pid \
--lock-path=/usr/local/nginx/logs/nginx.lock \
--with-http_stub_status_module \
--with-http_ssl_module \
--add-module=/ngx_http_image_filter_module
RUN make && make install
# 将 access.log 日志重定向到 docker 的规范输入
# 将 error.log 日志重定向到 docker 的规范谬误,这样 docker logs 的时候就能够看到日志了
# ln -sf a b 示意 b 链接向 a
RUN ln -sf /dev/stdout /usr/local/nginx/logs/access.log && ln -sf /dev/stderr /usr/local/nginx/logs/error.log
RUN mkdir -p /usr/local/nginx/conf.d
WORKDIR /
# 删除装置应用的文件和文件夹
RUN rm -rf ngx_http_image_filter_module.tar.gz
RUN rm -rf nginx-1.16.1.tar.gz
RUN rm -rf ngx_http_image_filter_module
RUN rm -rf nginx-1.16.1
# 定义向外裸露的端口号,多个端口用空格做距离,启动容器时便于应用 - p 将此端口向宿主机端口映射
EXPOSE 80/tcp 443/tcp
# 解释 -> '-g' 'daemon off'
# nginx 默认是当前台模式启动的,Docker 未执行自定义的 CMD 之前,nginx 的 pid 是 1,# 执行到 CMD 之后,nginx 就在后盾运行,bash 或 sh 脚本的 pid 变成了 1,# 所以一旦执行完自定义 CMD,nginx 容器也就退出了,为了放弃 nginx 的容器不退出,应该敞开 nginx 后盾运行
CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]