dockerfile

11 篇文章 0 订阅

https://www.kancloud.cn/letao99/docker-install/1509214

FROM

格式: FROM <image> 或者 FROM <image>:<tag>

基础镜像,当前新镜像是基于哪个镜像进行创建。即当前镜像继承自哪个镜像。Dockerfile 文件必须指定且需要在其他指令的前面指定。后续的指令都依赖于该指令指定的镜像。FROM指令指定的基础镜像可以是官方远程仓库中的,也可以位于本地仓库。
在一个Dockerfile中FROM指令可以出现多次,这样会构建多个镜像。tag的默认值是latest,如果参数image或者tag指定的镜像不存在,则返回错误。

ENV

格式: ENV <key> <value> 或者 ENV <key>=<value> ...

ENV指令可以为镜像创建出来的容器声明环境变量。并且在Dockerfile中,ENV指令声明的环境变量会被后面的特定指令(即ENV、ADD、COPY、WORKDIR、EXPOSE、VOLUME、USER)解释使用。

其他指令使用环境变量时,使用格式为$variable_name或者${variable_name}。如果在变量面前添加斜杠\可以转义。如\$foo或者\${foo}将会被转换为$foo${foo},而不是环境变量所保存的值。

COPY

格式: COPY <src> <dest>

COPY指令复制所指向的文件或目录,将它添加到新镜像中,复制的文件或目录在镜像中的路径是<dest><src>所指定的源可以有多个,但必须是上下文根目录中的相对路径。
不能只用形如 COPY ../something /something这样的指令。此外,<src>可以使用通配符指向所有匹配通配符的文件或目录,例如,COPY home* /mydir/ 表示添加所有以"hom"开头的文件到目录/mydir/中。

<dest>可以是文件或目录,但必须是目标镜像中的绝对路径或者相对于WORKDIR的相对路径(WORKDIR即Dockerfile中WORKDIR指令指定的路径,用来为其他指令设置工作目录)。
<dest>以反斜杠/结尾则其指向的是目录;否则指向文件。<src>同理。若<dest>是一个文件,则<src>的内容会被写到<dest>中;否则<src>指向的文件或目录中的内容会被复制添加到<dest>目录中。
<src>指定多个源时,<dest>必须是目录。如果<dest>不存在,则路径中不存在的目录会被创建。

EXPOSE

格式: EXPOSE <port> [<port>/<protocol>...]

EXPOSE指令通知Docker该容器在运行时侦听指定的网络端口。可以指定端口是侦听TCP还是UDP,如果未指定协议,则默认值为TCP。
这个指令仅仅是声明容器打算使用什么端口而已,并不会自动在宿主机进行端口映射,可以在运行的时候通过docker -p指定。

ENTRYPOINT

ENTRYPOINT指令有两种格式。

格式1:ENTRYPOINT <command> (shell格式)
格式2:ENTRYPOINT ["executable", "param1", "param2"] (exec格式,推荐格式)

ENTRYPOINT指令和CMD指令类似,都可以让容器在每次启动时执行相同的命令,但它们之间又有不同。一个Dockerfile中可以有多条ENTRYPOINT指令,但只有最后一条ENTRYPOINT指令有效。

当使用Shell格式时,ENTRYPOINT指令会忽略任何CMD指令和docker run命令的参数,并且会运行在bin/sh -c中。这意味着ENTRYPOINT指令进程为bin/sh -c的子进程,进程在容器中的PID将不是1,且不能接受Unix信号。即当使用docker stop <container>命令时,命令进程接收不到SIGTERM信号。

推荐使用exec格式,使用此格式时,docker run传入的命令参数会覆盖CMD指令的内容并且附加到ENTRYPOINT指令的参数中。从ENTRYPOINT的使用中可以看出,CMD可以是参数,也可以是指令,而ENTRYPOINT只能是命令;另外,docker run命令提供的运行命令参数可以覆盖CMD,但不能覆盖ENTRYPOINT。

#制定基础镜像,必须为第一个命令
FROM anapsix/alpine-java:8_server-jre_unlimited

#维护者信息
MAINTAINER deployment deployment@beree.cn

#构建镜像时执行的命令,这里我们创建一个目录
RUN mkdir -p /beree/beree-urip-core

#转到工作目录。类似 cd  ***
WORKDIR /beree/beree-urip-core

#指定于外界交互的端口,比如我们再容器中启动的端口为8801,那么我们再宿主机使用localhost:801 即可以访问到容器中801端口对用的应用
EXPOSE 801

#将本地文件添加到容器中,tar类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似wget
ADD ./target/beree-urip-core.jar ./app.jar

#配置容器,使其可执行化,相当于执行命令    java -Djava.security.egd=file:/dev/./urandom -jar app.jar  要追加任何命令可以直接在 [ ] 数组中追加任何参数,但是要保证排序正确
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "app.jar"]

#构建容器后调用,也就是在容器启动时才进行调用  相当于我们给容器启动过程增加参数,--spring.profiles.active=test  参数我们一般不再这里定义,我们可以放到 docer-compose 的变量定义里
CMD ["--spring.profiles.active=test"]

转自:https://www.lagou.com/lgeduarticle/106587.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值