Dockerfile
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
指令
- COPY:复制指令,从上下文目录中复制文件或者目录到容器里指定路径
COPY [--chown=<user>:<group>] <源路径1>... <目标路径>
COPY [--chown=<user>:<group>] ["<源路径1>",... "<目标路径>"]
- ADD:ADD 指令和 COPY 的使用格式一致(同样需求下,官方推荐使用 COPY)。功能也类似,不同之处如下:
ADD的优点:在于在执行 <源文件> 为 tar 压缩文件的话,压缩格式为 gzip, bzip2 以及 xz 的情况下,会自动复制并解压到 <目标路径>
ADD的缺点:在不解压的前提下,无法复制 tar 压缩文件。会令镜像构建缓存失效,从而可能会令镜像构建变得比较缓慢。 - CMD:类似于 RUN 指令,用于运行程序,但二者运行的时间点不同:
CMD 在docker run 时运行。
RUN 是在 docker build。 - ENTRYPOINT:类似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖,而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序。
语法:ENTRYPOINT ["<executeable>","<param1>","<param2>",...]
- ENV:设置环境变量,定义了环境变量,那么在后续的指令中,就可以使用这个环境变量。
语法:ENV <key> <value> ENV <key1>=<value1> <key2>=<value2>...
- ARG:构建参数,与 ENV 作用一至。不过作用域不一样。ARG 设置的环境变量仅对 Dockerfile 内有效,也就是说只有 docker build 的过程中有效,构建好的镜像内不存在此环境变量。
构建命令 docker build 中可以用 --build-arg <参数名>=<值> 来覆盖。
语法:ARG <参数名>[=<默认值>]
- VOLUME:定义匿名数据卷。在启动容器时忘记挂载数据卷,会自动挂载到匿名卷。
作用:避免重要的数据,因容器重启而丢失,这是非常致命的。避免容器不断变大。
语法:VOLUME ["<路径1>", "<路径2>"...] VOLUME <路径>
- EXPOSE:仅仅只是声明端口
语法:EXPOSE <端口1> [<端口2>...]
- WORKDIR:指定工作目录。用 WORKDIR 指定的工作目录,会在构建镜像的每一层中都存在。
语法:WORKDIR <工作目录路径>
- USER:用于指定执行后续命令的用户和用户组,这边只是切换后续命令执行的用户(用户和用户组必须提前已经存在)。
语法:USER <用户名>[:<用户组>]
- HEALTHCHECK:用于指定某个程序或者指令来监控 docker 容器服务的运行状态。
语法:HEALTHCHECK [选项] CMD <命令>:设置检查容器健康状况的命令 HEALTHCHECK NONE:如果基础镜像有健康检查指令,使用这行可以屏蔽掉其健康检查指令 HEALTHCHECK [选项] CMD <命令> : 这边 CMD 后面跟随的命令使用,可以参考 CMD 的用法。
- ONBUILD:用于延迟构建命令的执行。
语法:ONBUILD <其它指令>
tomcat下运行
from 192.168.1.5:18080/yw-image-base/tomcat-cn:8.5.31-jre8-1
WORKDIR /usr/local/tomcat
RUN rm -rf /usr/local/tomcat/webapps/*
COPY target/ywCollector /usr/local/tomcat/webapps/ywCollector
EXPOSE 8080
CMD ["catalina.sh", "run"]
jar包
FROM 192.168.1.5:18080/yw-image-base/openjdk-cn:8-jdk-alpine
ADD target/batch_process_server.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-Dspring.profiles.active=docker","-jar","/app.jar"]