1)FROM :基础镜像,从Docker Hub 或者其它渠道拉去 基础镜像(比如 Ubuntu),在此基础上进行封装新功能
2)WORKDIR:在镜像中进行位置切换的操作,类似于Linux 命令cd
3)RUN:在镜像中命令的 执行 例如:FROM 拉取了Ubuntu,可以在Ubuntu中安装Python 或者 Nginx,可以使用RUN命令,多个命令之间使用 ‘&&’ 进行连接
4)COPY 和 ADD:这两个命令非常的类似。相似处:都是从宿主机 复制一份文件 到 镜像中。区别:如果 从宿主机 复制一份 压缩包 到 镜像中,COPY 只是简单的复制过去了,而ADD 还会将压缩包 在镜像中解压。
COPY 123.txt /tmp 和 COPY 123.txt /tmp/ 的区别。第一个是 将123.txt 赋值给了镜像中 tmp的文件,第二个是 将123.txt 复制到了镜像的tmp目录中。为了防止整混,基本上都是使用 COPY 123.txt /tmp/123.txt ,解决以上问题。ADD同理。
5)ENV 和 ARG:这两个命令也是非常的相似。
两个命令都可以 在构建Dockerfile时,给变量赋值,例如
FROM ubuntu:latest
ENV number=1.0.0
RUN echo ${number} > 123.txt
FROM ubuntu:latest
ARG number=1.0.0
RUN echo ${number} > 123.txt
两者效果是一样的。
1.ENV 不仅仅在构建Dockerfile时会起到赋值变量的作用,这个变量还会添加到 镜像的环境变量中,生成容器后,可以继续使用这个环境变量。ARG只能是构建时使用,镜像构建成功后,则生命周期结束。
2.构建镜像使用ARG,变量的内容在构建时可以被更改 例如
FROM ubuntu:latest
ARG number=1.0.0
RUN echo ${number} > 123.txt
构建镜像时使用:docker build --build-arg number=2.0.0 -t dockerfile-demo .
构建出来的镜像 123.txt中内容为 2.0.0
通常两者一起使用 比如:
FROM ubuntu:latest
ARG version
ENV NewVersion=${version}
RUN echo ${NewVersion} > 123.txt
构建镜像使用 docker build --build-arg version='参数' -t .
构建代码会将 version内容传递给NewVersion中
6)CMD 和 ENTRYPOINT 两个命令也有些相似。
相似之处:
CMD 和 ENTRYPONIT 两个命令是 运行镜像 生成容器时 自动执行的命令。
FROM ubuntu:latest
CMD ["echo","hello world"]
FROM ubuntu:latest
ENTRYPONIT ["echo", "hello world"]
构建镜像后,再运行镜像生成的执行容器自动 会打印 hello world
不同之处:
如果Dockerfile内容中包含多个 CMD命令,启动的镜像运行时,只会执行最后一条CMD命令,ENTRYPONIT 所有命令都会执行的,经常两者经常一起使用。
FROM ubuntu:latest
CMD []
ENTRYPOINT ["echo"]
构建:docker bulid -t .
启动镜像:docker run -it --rm xxxxx hello world
结果:会打印 hello world
CMD 会承接 hello world 的内容,传递给 ENTRYPOINT 中。
如果 CMD中有值
FROM ubuntu:latest
CMD [“hello”]
ENTRYPOINT ["echo"]
构建:docker bulid -t .
启动镜像:docker run -it --rm xxxxx
结果:会打印 hello
如果启动镜像使用:docker run -it --rm xxxx world
结果:会打印 world
待续。。。