首页 > 系统相关 >Dockerfile文件详解和nginx镜像制作示例

Dockerfile文件详解和nginx镜像制作示例

时间:2023-01-13 16:33:40浏览次数:40  
标签:容器 http 示例 -- CMD module nginx Dockerfile


Dockerfile文件中各个常用的基本命令,共18个指令
FROM
MAINTAINER
RUN
CMD
LABEL
EXPOSE
ENV
ADD
COPY
ENTRYPOINT
VOLUME
USER
SHELL
WORKDIR
ONBUILD
STOPSIGNAL
HEALTHCHECK

FROM系统基础,FROM是Dockerfile第一个命令,关系到生成镜像的版本
FROM # 系统
FROM : #系统版本
FROM [–platform=] [@] [AS ]
例: FROM centos:7.6.1860

  • 单个dockfile可以多次出现 FROM ,以使用之前的构建阶段作为另一个构建阶段的依赖项
  • AS name表示为构建阶段命名,在后续FROM和COPY --from=说明中可以使用这个名词,引用此阶段构建的映像
  • digest其实就是就是根据镜像内容产生的一个ID,只要镜像的内容不变digest也不会变
  • tag或digest值是可选的。如果您省略其中任何一个,构建器默认使用一个latest标签。如果找不到该tag值,构建器将返回错误。
  • –platform标志可用于在FROM引用多平台镜像的情况下指定平台。例如,linux/amd64、linux/arm64、 或windows/amd64

MAINTAINER 维护者信息
MAINTAINER ribou ​​[email protected]​​

RUN 基础镜像命令
RUN linux命令,在基础镜像中需要的一系列操作

FROM centos:7.6.1860
MAINTAINER ribou ​​[email protected]​​

RUN mkdir /user/local/nginx
&& mkdir /usr/local/nginx/config
&& yum -y install nginx

ADD/COPY 复制
从本地向制作镜像中复制文件,
ADD可以使用url,也可以复制tar文件,并会自动解压到目标路径中
COPY不能访问网络资源,也不会自动解压
ADD …
ADD [“”,…“”]用于支持包含空格的路径
COPY [–chown=:] <源路径1>…<目标路径>

CMD命令
CMD命令是根据镜你创建的容器启动时,需要执行的命令,这个命令在容器创建后,用于执行项目,可以写到一个sh文件中
CMD [“executable”,“param1”,“param2”] 执行可执行文件优先
CMD [“param1”,“param2”] 设置了ENTRYPOINT,则直接调用ENTRYPOINT添加参数
CMD command param1"param2] 执行shell内部命令

CMD和RUN的区别,一个是在容器启动之前,一个是在容器启动之后,如果有多个CMD命令只执行最后一个

LABEL
添加元数据

LABEL multi.label1=“value1”
multi.label2=“value2”
other=“value3”

ENTRYPOINT
ENTRYPOINT是容器启动后执行的命令,不会被 docker run提供的参数覆盖,只能有一个ENTRYPOINT,但是如果docker run时使用了entrypoint选项,此选项的参数可当作要运行的程序覆盖ENTRYPOINT

例如:
FROM nginx
ENTRYPOINT [“nginx”,“-c”] 定参
CMD [“/etc/nginx/nginx.conf”] 变参
如果不传参运行docker run nginx:test 容器会默认启动 nginx -C /etc/nginx /nginx.conf
传参运行
docker run nginx :test -c /etc/nginx/new.conf
会把CMD中定义的参数覆盖掉,实际在容器中执行的会是
nginx -C /etc/nginx/new.conf

ENTRYPOINT 搭配CMD使用时一般使用CMD给ENTEYPOINT传参

ENV环境变量
ENV是给创建好的容器设置环境变量,设置好环境变量可以被RUN使用
ENV
ENV = … 可以设置多个变量

ARG 环境变量
ARG和ENV都是设置环境变量,两者的区别是,ARG是对Dockerfile内有效,就是在docker build的过程中有效,ENV是针对构建好容器的变量
ARG <参数名>[=<默认值>]

VOLUME挂载路径
VOLUME是定义匿名数据卷,在启动容器时忘记挂载数据卷,会自动挂载到匿名卷中,作用是避免 数据丢失,或因容器重启时导致数据流失会容器慢慢变大
VOLUME [“<路径1>”,“<路径2>”…]
VOLUME <路径>
在容器启动时可以使用 -V参数修改挂载点

EXPOSE
EXPOSE申明的仅仅是端口,在镜像服务中使用随机端口做映射,也就是docker run -P时,会自动随时映射EXPOSE的端口,
EXPOSE <端口1>[<端口2>]

SHELL
覆盖用于命令的shell 形式的默认 shell。Linux 上的默认 shell 是[“/bin/sh”, “-c”],Windows 上是[“cmd”, “/S”, “/C”]

SHELL [“executable”, “parameters”]
该SHELL指令在 Windows 上特别有用,因为 Windows 有两种常用且截然不同的本机 shell:cmd和powershell,以及可用的备用 shell,包括sh。该SHELL指令可以出现多次。每条SHELL指令都会覆盖所有先前的SHELL指令,并影响所有后续指令。

WORKDIR 工作目录
用于WORKDIR指定的工作目录,会在构建镜像的每一层中都存在,WOKRDIR的工作目录必须是创建好的,dokcer build构建过程中,每一个RUN命令都是新建的一层,只有通过WORKDIR创建的目录才会
一直存在
WORKDIR <工作目录路径>

USER 用户和组
用于指定后续执行命令的用户和用户组,这里只是切换后续命令执行的用户,用户名和用户组必须提前创建好
USER <用户名>[:<用户组>]

STOPSIGNAL
设置将发送到容器退出的系统调用信号。该信号可以是与内核系统调用表中的位置匹配的有效无符号数,例如 9,或格式为 SIGNAME 的信号名称,例如 SIGKILL。

STOPSIGNAL signal
默认的 stop-signal 是 SIGTERM,在docker stop的时候会给容器内PID为1的进程发送这个signal,通过–stop-signal 可以设置自己需要的signal,主要目的是为了让容器内的应用程序在接收到signal之后可以先处理一些事物,实现容器的平滑退出,如果不做任何处理,容器将在一段时间之后强制退出,会造成业务的强制中断,默认时间是10s。

HEALTHCHECK 监控服务状态
HEALTHCHECK用来指定或指定来监控docker容器服务的运行状态

HEALTHCHECK [选项] CMD <命令>:设置检查容器健康状况的命令
HEALTHCHECK NONE:如果基础镜像有健康检查指令,使用这行可以屏蔽掉其健康检查指令
HEALTHCHECK [选项] CMD <命令>:这边 CMD后面跟随的命令使用,可以参考CMD的用法

ONBUILD延迟构建
ONBUILD用来延迟构建命令的执行

------测试
1、创建工作目录

mkdir nginx

2、进入nginx目录,创建nginx测试页

cd nginx/
vim index.html
<h1> docker nginx build successful from Ribou nedy.com</h1>

3、创建dockerfile文件,网络下载安装
vim Dockerfile

#基准镜像
FROM centos:7
#作者信息
MAINTAINER Ribou <[email protected]>
#工作目录
WORKDIR /usr/local/src/
#定义环境变量
ENV NG_VERSION nginx-1.21.0
#安装epel仓库
RUN yum -y install epel-release
#安装wget
RUN yum -y install wget
#下载nginx文件并解压
RUN wget http://nginx.org/download/$NG_VERSION.tar.gz && tar xzvf $NG_VERSION.tar.gz
#安装编译依赖包
RUN yum install -y gcc gcc-c++ glibc make autoconf openssl openssl-devel && yum install -y pcre-devel libxslt-devel gd-devel GeoIP GeoIP-devel GeoIP-data
#清理仓库
RUN yum clean all
#创建nginx用户
RUN useradd -M -s /sbin/nologin nginx
#切换工作目录
WORKDIR /usr/local/src/$NG_VERSION
#编译安装nginx
RUN ./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-file-aio --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_xslt_module --with-http_image_filter_module --with-http_geoip_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_auth_request_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_stub_status_module && make && make install
#复制测试页面到容器中
ADD index.html /usr/local/nginx/html
#设置容器中要挂在到宿主机的目录
VOLUME /usr/local/nginx/html
#设置sbin环境变量
ENV PATH /usr/local/nginx/sbin:$PATH
#暴露80端口
EXPOSE 80/tcp
ENTRYPOINT ["nginx"]
CMD ["-g","daemon off;"]
#当ENTRYPOINT和CMD连用时,CMD的命令是ENTRYPOINT命令的参数,两者连用相当于nginx -g "daemon off;"而当一起连用的时候命令格式最好一致(这里选择的都是json格式的是成功的,如果都是sh模式可以试一下)

执行镜像制作

docker build ./ -t centos7_nginx:nedy  #切记镜像名字不能用大写

查看镜像

[root@aliyuan-ops-01 nginx]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos7_nginx nedy f0015837b810 31 seconds ago 1.09GB

SIZE 这个有点儿大,这只是个示例, 实际生产中,选择小的基础系统镜像来制作,降低镜像占用空间大小


标签:容器,http,示例,--,CMD,module,nginx,Dockerfile
From: https://blog.51cto.com/u_15941303/6006300

相关文章

  • 基于Dockerfile构建企业级生产环境镜像
    1、dockerfile语法详解1.1dockerfile介绍Dockerfile是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。基于Dockerfile构建镜像可以使用docker......
  • 在 NGINX 中根据用户真实 IP 进行限制
    需求需要根据用户的真实IP进行限制,但是NGINX前边还有个F5,导致deny指令不生效.阻止用户的真实IP不是192.168.14.*和192.168.15.*的访问请求.实现最简单......
  • nginx错误日志级别
    日志级别高级别包括低级别日志,例如,如果您将日志级别设置为warn,则Nginx还将记录error,crit,alert和emerg消息。未指定log_level参数时,默认为errordebug-调试消息......
  • 在 NGINX 中根据用户真实 IP 进行限制
    需求需要根据用户的真实IP进行限制,但是NGINX前边还有个F5,导致deny指令不生效.阻止用户的真实IP不是192.168.14.*和192.168.15.*的访问请求.实现最简......
  • 多线程并发爬虫教程示例
    爬虫总体上分为四个主要步骤:1、明确目标,需要做的从哪个途径或者哪个范围内网站搜索。2、爬,将获取到的网站内容全部爬下来。3、取,对数据分析去掉没用的数据。4、处理数据......
  • 从 Nginx Ingress 窥探云原生网关选型
    现今有越来越多的企业开始采纳云原生理念进行应用架构转型。而K8s和微服务是云原生的两大支柱,随着云原生浪潮而被广泛应用。 对多数应用而言,提供对外服务的使命并不......
  • 从 Nginx Ingress 窥探云原生网关选型
    现今有越来越多的企业开始采纳云原生理念进行应用架构转型。而K8s和微服务是云原生的两大支柱,随着云原生浪潮而被广泛应用。 对多数应用而言,提供对外服务的使命并不......
  • 从 Nginx Ingress 窥探云原生网关选型
    现今有越来越多的企业开始采纳云原生理念进行应用架构转型。而K8s和微服务是云原生的两大支柱,随着云原生浪潮而被广泛应用。 对多数应用而言,提供对外服务的使命并不......
  • Dockerfile 构建命令 及 dockerfile 设置默认时区
    文章目录  前言  一、Ubuntu下更改为UTC+8  二、Alpine下更改为UTC+8  三、centos更改时区  引用前言官方镜像dockerfile的时区默认UTC。更......
  • nginx.conf配置文件
    userwwwwww;worker_processesauto;#cat/proc/cpuinfo|grep^processor|wc-l#查看cpu核数worker_cpu_affinityauto;error_log/www/wwwlogs/nginx_error......