dockerfile 命令详解(三)

CMD 和 ENTRYPOINT 区别

CMD            #指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT    #指定这个容器启动的时候要运行的命令,可以追加命令

FROM		#基础镜像,一切从这里开始构建
MAINTAINER	#镜像是谁写的,姓名+邮箱
RUN			#镜像构建的时候需要运行的命令
ADD			#步骤,tomcat镜像,这个tomcat的压缩包!添加内容
WORKDIR		#镜像的工作目录	
VOLUME		#挂载的目录
EXPOSE		#暴露端口配置
CMD			#指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT	#指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD		#当构建一个被继承 Dockerfile 这个时候就会运行ONBUILD 的指令
COPY 		#类似ADD,将我们文件拷贝到镜像中
ENV			#构建的时候设置环境遍量
[root@root tomcat]# cat Dockerfile 
FROM centos
MAINTAINER root<[email protected]>
 
COPY readme.txt /usr/local/readme.txt
 
ADD jdk-8u11-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.22.tar.gz /usr/local/
 
RUN yum -y install vim
RUN chmod 777 /usr/local/apache-tomcat-9.0.22/bin/startup.sh
RUN chmod 777 /usr/local/apache-tomcat-9.0.22/bin/catalina.sh
 
ENV MYPATH /usr/local
WORKDIR $MYPATH
 
ENV JAVA_HOME /usr/local/jdk1.8.0_11
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.22
ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.22
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
 
EXPOSE 8080
 
CMD /usr/local/apache-tomcat-9.0.22/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.22/bin/logs/catalina.out

构建镜像

[root@root tomcat]# docker build -t lh_tomcat .
Sending build context to Docker daemon  169.9MB
Step 1/17 : FROM centos
 ---> 300e315adb2f
Step 2/17 : MAINTAINER root<[email protected]>
 ---> Using cache
 ---> f23b466173fb
Step 3/17 : COPY readme.txt /usr/local/readme.txt
 ---> Using cache
 ---> 5dfad04cae31
Step 4/17 : ADD jdk-8u11-linux-x64.tar.gz /usr/local/
 ---> Using cache
 ---> e15afd0717d9
Step 5/17 : ADD apache-tomcat-9.0.22.tar.gz /usr/local/
 ---> Using cache
 ---> 8b3b0b260f0c
Step 6/17 : RUN yum -y install vim
 ---> Using cache
 ---> 731ad02de5b7
Step 7/17 : RUN chmod 777 /usr/local/apache-tomcat-9.0.22/bin/startup.sh
 ---> Using cache
 ---> e60e5bb8d68d
Step 8/17 : RUN chmod 777 /usr/local/apache-tomcat-9.0.22/bin/catalina.sh
 ---> Using cache
 ---> 1bdadcf5f05c
Step 9/17 : ENV MYPATH /usr/local
 ---> Running in dc5f851a95aa
Removing intermediate container dc5f851a95aa
 ---> 567826b1db9b
Step 10/17 : WORKDIR $MYPATH
 ---> Running in a1b9fa1f25c8
Removing intermediate container a1b9fa1f25c8
 ---> f2da44f2566d
Step 11/17 : ENV JAVA_HOME /usr/local/jdk1.8.0_11
 ---> Running in 1525576adae9
Removing intermediate container 1525576adae9
 ---> 422a260a9854
Step 12/17 : ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
 ---> Running in ff3679d3d0d7
Removing intermediate container ff3679d3d0d7
 ---> 1f2fb5b405ce
Step 13/17 : ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.22
 ---> Running in c627139c2a0e
Removing intermediate container c627139c2a0e
 ---> 941804071257
Step 14/17 : ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.22
 ---> Running in 201a8d7d454b
Removing intermediate container 201a8d7d454b
 ---> 6a3edac3ea02
Step 15/17 : ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
 ---> Running in 5403ebe0c029
Removing intermediate container 5403ebe0c029
 ---> 3de5361ec881
Step 16/17 : EXPOSE 8080
 ---> Running in a1e4f56c1cb5
Removing intermediate container a1e4f56c1cb5
 ---> 98fd728337df
Step 17/17 : CMD /usr/local/apache-tomcat-9.0.22/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.22/bin/logs/catalina.out
 ---> Running in 3b183e06aecd
Removing intermediate container 3b183e06aecd
 ---> 9fcc0d5c6a4e
Successfully built 9fcc0d5c6a4e
Successfully tagged lh_tomcat:latest

ADD

ADD指令具有以下三种功能:

1、将本地文件复制到容器映像中

举例来说,如果要将主机系统上的本地文件从Docker镜像复制/home/user/application/opt/app,则可以在Dockerfile中包含以下指令:

ADD /home/user/application /opt/app

在此,仅将目录的内容/home/user/application复制到/opt/app包括其元数据在内的目录中。它不会复制application目录本身

2、提取本地存储的tar文件

您还可以使用ADD指令提取格式为identity,gzip,bzip2或xz的压缩档案。这些内容在您所构建的Docker映像的目标位置中被解压缩为目录

ADD /home/user/test.tar.gz /opt

该行为类似于当您使用tar命令将tarball解压到主机系统上的特定目录时发生的情况

3、从URL下载文件

它类似于wget -PDockerfiles的工作方式。在构建Docker映像时,您可以按照以下说明下载文件并将其存储在容器映像上的所需位置

ADD https://filesamples.com/samples/document/pdf/sample2.pdf /home/user

生成图像后,可以在启动基于它的容器之前使用此PDF文档。这是许多独特的用例之一

COPY

COPY指令是ADD指令的改进,旨在减轻Docker用户之间的混淆。它的功能只是一个-将文件或目录从主机上的源位置复制到Docker映像上的目标位置

因此,基本上是上面讨论的ADD指令部分中的第一点。相应的指令为

COPY /home/user/application /opt/app

你可能感兴趣的:(docker,容器)