侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

Docker学习(二)Dockerfile指令

2023-11-03 星期五 / 0 评论 / 0 点赞 / 36 阅读 / 7774 字

前言: 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、用户。

     

广告 广告

评论区