Docker学习(二)Dockerfile指令

本文介绍了Dockerfile的基本命令及其使用方法,包括从基础镜像构建、设置维护者信息、执行命令、添加或复制文件、设置环境变量等。通过这些命令,用户可以创建定制化的Docker镜像。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:

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

     

转载于:https://my.oschina.net/MinghanSui/blog/1057752

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值