前言: Dockerfiles是由一系列命令和参数构成的脚本文件,这些命令最终会创建一个新的镜像。 Dockerfile的指令不区分大小写,但是貌似推荐都是大写,注释用#号开头,一行只支持一条指令。
前言:
Dockerfiles是由一系列命令和参数构成的脚本文件,这些命令最终会创建一个新的镜像。
Dockerfile的指令不区分大小写,但是貌似推荐都是大写,注释用#号开头,一行只支持一条指令。
Docker程序将这些Dockerfile的指令翻译成Linux命令来执行。
基本命令:
FROM deta/ubuntu_java:16.04_8_111
FROM ubuntu
FROM(用来指定基础镜像image),如果本地仓库没有镜像,会到官方仓库中寻找。
FROM命令必须是Dockerfile的首个命令。
如果不写tag,默认指定最后修改的版本。
MAINTAINER MinghanSui
用于描述制作者相关信息,写入到镜像中,可以用docker inspect查看相关信息。
这个命令用于声明作者,并应该放在FROM的后面。
RUN
shell格式:RUN chmod 775 /usr/local/apache-tomcat-8.0.36/bin/catalina.sh
shell格式:RUN apt-get install vim -y
exec格式:RUN ["apt-get","install","vim","-y"]
exec格式:RUN ["/bin/bash","-c","apt-get install vim -y"]
RUN接收命令作为参数并用于创建镜像。不用于CMD命令,RUN命令用于创建镜像。
exec格式的命令不会触发shell,所以导致 $HOME 这样的环境变量无法生效。
但exec格式命令可以在没有bash的镜像环境中执行。
ADD apache-tomcat-8.0.36.tar.gz /usr/local/
ADD命令有两个参数,源(必须是Dockerfile相对路径)和目标(必须是容器绝对路径)。
它的作用是从源系统中复制文件到目标容器中。
如果目标路径不存在的话会自动联级创建。如果源是一个URL,URL的内容将被下载并复制到容器中。
并且压缩包会自动解压。建议只有在复制tar文件的时候使用ADD。
COPY conf/catalina.sh /usr/local/apache-tomcat-8.0.36/bin/
COPY 和 ADD 功能相似,但少了远程URL、自动解压这两个功能。
但是建议尽量使用COPY,并使用RUN和COPY的组合来替代ADD指令,因为它处理比 ADD 透明。
CMD
shell格式: CMD echo "Hello Docker"
exec格式: CMD ["echo Hello Docker]
exec格式: CMD ["xxxxxxx.sh"]
CMD在镜像构建了容器之后,容器启动时执行的命令。但一个Dockerfile只执行最后一条CMD命令。
但是当 docker run command 与 CMD command 同时存在时,CMD command不生效。
它与 ENTRYPOINT 的功能非常相似,区别就是如果 docker run 后面出现了与 CMD 相同命令,
CMD会被覆盖,而 ENTRYPOINT 不会覆盖,而是追加。
当出现exec格式的 ENTRYPOINT 指令时, CMD 指令只能被当做 ENTRYPOINT 指令的参数使用,
其他情况则会被覆盖。
ENTRYPOINT
ENTRYPOINT echo "Hello Docker"
ENTRYPOINT ["echo", "Hello Docker"]
ENTRYPOINT echo
CMD "Hello Docker"
ENTRYPOINT是在镜像构建了容器之后,容器启动时执行的命令。
但一个Dockerfile只执行最后一条ENTRYPOINT命令。
exec格式:docker run的参数,会追加到 ENTRYPOINT 后面,并覆盖CMD的参数。
但是可以在docker run时使用 -entrypoint 来无效 ENTRYPOINT 指令。
shell格式 :ENTRYPOINT会触发shell,忽略docker run和CMD的参数。
我们一般使用 ENTRYPOINT 来设置不会经常变化的命令,然后用CMD来设置可能改变的命令。
如果 ENTRYPOINT 和 CMD 结合使用,可以从 CMD 命令中移除“applicatione”只保留参数,
参数将自动传递给 ENTRYPOINT 命令执行。
当出现exec格式的 ENTRYPOINT 指令时 CMD 指令只可能被当做 ENTRYPOINT 指令的参数使用,
其他情况则会被覆盖。
ENV LANG en_US.UTF-8
此命令用于以 key value 的形式设置环境变量,并且在容器中可以被脚本和程序调用。
此机制为在容器中运行的应用带来了很大的便利。
VOLUME ["/my_folder"]
此命令可以让你的容器访问宿主机上的目录,也就是将本地文件夹挂载到容器中,
可用来让其它容器共享数据、备份、迁移等功能。
WORKDIR /usr/local/apache-tomcat-8.0.36/webapps/intelligent_decision
此命令用于切换运行目录,类似cd,对RUN、CMD、ENTRYPOINT命令生效。
EXPOSE 8080 9090
用来指定开放端口,使容器内的应用可以通过此开放的端口和外界交互。
(端口是用于多个容器直接通信用的)。
如果想在宿主机访问要在启动容器的时候做端口映射步骤(-p)。
USER root
此命令用于指定UID、用户。