注意:
nginx配置不要包含在image里面
做nginx image的DOCKERFILE 最后要有
CMD ["nginx", "-g", "daemon off;"]
- 在常规的虚机上,nginx默认是以守护进程来运行的(daemon on),在后台默默提供服务,同时部署多个ngxin服务也不会相互干扰。
- 在容器环境,one container == one process,容器要能持续运行,必须有且仅有一个前台进程,所以对nginx进程容器化,需要将nginx转为前后进程( daemon off)。
- nginx 默认是后台守护进程的形式运行,以前台形式持续运行。
nginx -g "daemon off;"
FROM centos:centos7
LABEL maintainer="NGINX Docker Maintainers <me@me.com>"
RUN --mount=type=secret,id=nginx-crt,dst=nginx-repo.crt \
--mount=type=secret,id=nginx-key,dst=nginx-repo.key \
# 1
yum makecache \
&& yum install -y net-tools wget \
&& mkdir -p /etc/ssl/nginx \
&& cat nginx-repo.crt > /etc/ssl/nginx/nginx-repo.crt \
&& cat nginx-repo.key > /etc/ssl/nginx/nginx-repo.key \
# Install the latest release of NGINX Plus and/or NGINX Plus modules
&& mkdir -p /etc/ssl/nginx \
&& cat nginx-repo.crt > /etc/ssl/nginx/nginx-repo.crt \
&& cat nginx-repo.key > /etc/ssl/nginx/nginx-repo.key \
&& yum install ca-certificates -y \
&& wget -P /etc/yum.repos.d https://cs.nginx.com/static/files/nginx-plus-7.4.repo \
&& yum install nginx-plus -y \
&& rm -rf /etc/ssl/nginx \
&& rm -rf /etc/yum.repos.d/nginx-plus-7.4.repo \
# 3
&& rm -rf /etc/nginx/nginx.conf \
&& rm -rf /etc/nginx/conf.d/default.conf \
#删除默认配置文件
#传入修改的配置文件
EXPOSE 80
STOPSIGNAL SIGQUIT
CMD ["nginx", "-g", "daemon off;"]
创建
#sudo DOCKER_BUILDKIT=1 docker build -f ./Dockerfile-modify-conf --no-cache -t nginxplus:v2 --secret id=nginx-crt,src=nginx-repo.crt --secret id=nginx-key,src=nginx-repo.key . |
DOCKER_BUILDKIT=1 这个参数表明我们正在使用 Docker BuildKit 来构建镜像,当包含下面提到的 --secret 选项时,这个参数设置是必需的。 |
--no-cache 选项该选项指示 Docker 从头开始构建镜像,并确保安装最新版本的 NGINX Plus。如果 Dockerfile 之前用于构建过镜像,并且没有 --no-cache 选项,那么新镜像将使用来自 Docker 缓存的 NGINX Plus 版本。(我们特意不在 Dockerfile 中指定版本,这样你就不需要在每次推出新版 NGINX Plus 后更新该文件。)如果可以使用来自此前构建的镜像的 NGINX Plus 版本,则删除 --no-cache 选项。 |
--secret 选项将 NGINX Plus 许可证的证书和密钥传递给 Docker 来构建上下文环境,并且不会泄露数据或让数据永久存储在 Docker 构建层之间。id 的参数值只能再改变根 Dockerfile 的情况下更改,但是您需要将src 参数设置为您 NGINX Plus 证书和密钥文件的路径(如果您按照前面的说明操作,这个路径就是您构建 Docker 镜像的文件夹的路径)。 |