关于java:java开发之Dockerfile是什么

45次阅读

共计 2034 个字符,预计需要花费 6 分钟才能阅读完成。

Dockerfile 是一个构建 docker 镜像的根底文件,文件外部严格标准了几个指令:from、maintainer、expose、env、user、workdir、copy、add、run、cmd、entrypoint、volume、onbuild。所有指令都会再上一个指令创立进去的镜像根底上执行,其中 entrypoint 和 cmd 指令只有在真正运行容器 java 培训的时候才执行。上面咱们逐个介绍每个指令的具体含意和用法:
• FROM 根本格局:FROM imageURL:< tag >
获取根底镜像 根本格局:
• MAINTAINER 维护者信息
• EXPOSE 裸露容器中的端口
• ENV 根本格局:ENV JAVA_HOME /user/home/jdk1.8
设置环境变量,前面其余指令援用该环境变量都是失效的
• USER 根本格局:USER 用户名
指定容器运行时的用户
• WORKDIR 根本格局:WORKDIR 目录绝对路径
相当于 linux 中的 cd 命令
• ONBUILD 如果其它镜像是基于此镜像进行构建的,那么其它镜像在构建时会执行该指
• COPY 根本格局:COPY < src > < dest > 将宿主机目录(src)下的文件 复制到镜像目录(dest)。须要留神的是 src 门路必须是以后 dockerfile 目录下的相对路径。不能写../xxx/、/Users/dockeruser/xxx/xx,镜像目录必须是绝对路径
• ADD 根本格局:ADD < src > < dest > 和 COPY 指令的性能是一样的,只不过 ADD 指令还有额定的 2 项性能

  1. 复制的文件如果是压缩文件,可能主动解压
  2. src 不肯定是宿主机的目录,能够是网络文件(http://www.bjcoder.com/file)

• RUN 根本格局:RUN 或者 RUN [“executable”,”param1″,”param”]RUN 指令执行时会基于上一个镜像创立出一个容器,而后在该容器上执行此指令,指令执行结束后,将该容器又提交为一个新的镜像,供下一个指令应用。
RUN < command > 此类型的格局,就是在容器中调用 shell 命令,如果 shell 命令过长可通过 \ 进行 换行
RUN [“executable.sh”,”param1″,”param”] 在容器中执行 dockerfile 同目录下的 shell 脚本。
• CMD 根本格局 CMD < command > 或者 CMD [“executable”,”param1″,”param2″] 或者 CMD [“param1″,”param2”]CMD 指令只会在咱们每次运行容器的时候执行,Dockerfile 中容许指定多个 CMD 指令,然而只会有一个失效。CMD < command > 此类型的格局,就是在容器中调用 shell 命令。
CMD [“executable.sh”,”param1″,”param2″] 执行容器中的 shell 脚本。
CMD [“param1″,”param2”] 它是联合 ENTRYPOINT 命令应用的,次要是为它提供参数的。如果咱们在 docker run container /bin/bash xx 指定了命令参数那么将会笼罩 CMD 指令。
• ENTRYPOINT ENTRYPOINT < command > 或者 ENTRYPOINT [“executable”,”param1″,”param2″]ENTRYPOINT 指令也是在咱们每次运行容器的时候执行,Dockerfile 中容许指定多个 ENTRYPOINT 指令,然而只会有一个失效。因为 CMD 和 ENTRYPOINT 命令性能类似,那么它们两者联合又会是什么样的呢?咱们分状况进行探讨。ENTRYPOINT < command > 当应用此类型,所有 CMD 指令都有效,包含 docker run 传入的命令参数。
ENTRYPOINT [“executable”,”param1″,”param2″] 当应用此类的格局,CMD 指令会附加到 ENTRYPOINT 的指令参数中。
• VOLUME 根本格局 VOLUME [“path1″,”path2”] 将 docker 创立的数据卷挂载到指定的 path(容器目录)。此指令不能指定数据卷的门路,docker 容器在构建镜像的时候会默认主动创立一个数据卷挂载到 path 上。VOLUME 的指令之所以不让咱们指定挂载的目录,是为了保障 docker 镜像的可移植性,因为咱们并不能保障每台机器都会有咱们指定的目录,咱们能够通过命令 docker inspect 查看容器中的目录具体对应了哪个数据卷。如果咱们想要宿主机的指定目录作为数据卷挂载到容器的指定目录,如何操作呢?通过以下命令执行:docker run -v 宿主机目录门路: 容器内需挂载目录门路。为了更直观的意识数据卷、宿主机目录、容器目录之间的关系请看图 1 -1

docker 提供的数据卷有什么用呢?因为 docker 容器只有一删除,那么容器之前运行的数据将会被删除,引入了数据卷后咱们能够保障容器的数据不失落,因为数据卷的生命周期是独立于 docker 容器存在的。

正文完
 0