1.FROM:引入和开始
#从头制作baseImage
FROM scratch
#使用已有的baseImage
FROM centos
#指定使用的版本
FROM ubuntu:14.04
2.LABEL:定义一些说明信息
LABEL maintainer=604702050@qq.com
LABEL version=”1.0”
LABEL description=”xxx”
3.RUN:执行命令,每执行一条RUN,多一个分层,一般用&&合并语句,反斜杠换行
RUN yum -y update && yum -y install lrzsz \
net-tools
RUN apt-get -y update && apt-get -y install lrzsz\
net-tools
RUN /bin/bash -c ‘source $HOME/.bashrc;echo $HOME’
4.WORKDIR:进入或创建目录,尽量不要使用相对路径
#进入/root目录
WORKDIR /root
#如果没有会自动创建
WORKDIR /test
WORKDIR demo
#输出:/test/demo
RUN pwd
5.ADD和COPY:将本地的文件,添加到image里
#将hello添加到根目录下
ADD hello /
#将tar包直接解压到根目录
ADD test.tar.gz /
#最终hello应该在 /root/test/hello
WORKDIR /root
COPY hello test/
6.ENV:增加Dockerfile的可读性
#设置常量
ENV MYSQL_MAJOR 5.5
#使用常量
$MYSQL_MAJOR
RUN apt-get -y install mysql-server=”${MYSQL_VERSION}”
CMD和ENTRYPOINT:
#shell格式
RUN apt-get -y install lrzsz
CMD echo “hello docker”
ENTRYPOINT echo “hello docker”
#exec格式
RUN [“apt-get”,”-y”,”install”,”lrzsz”]
CMD [“/bin/echo”,”hello docker”]
ENTRYPOINT [“/bin/echo”,”hello docker”]
- ENTRYPOINT使用的比CMD多一些
- ENTRYPOINT:设置容器启动时运行的命令,一定会执行,不会被忽略
操作一下:
- 分别编写Dockerfile


- 构建image


- 查看下

- 分别运行两个image看效果

- 修改Dockerfile如下

- 重新构建和运行

CMD和ENTRYPOINT对比:CMD命令可能被覆盖,ENTRYPOINT命令一定会执行
CMD:设置容器启动后默认执行的参数和命令,若docker指定了其他命令,CMD可以被忽略,CMD若指定多个,只运行最后一个
- 编写file

- 构建和运行

ENTRYPOINT:
- 再构建一个ENTRYPOINT

- 构建

- 运行CMD的image

- 运行ENTRYPOINT的image

本文详细解析了Dockerfile中的关键指令,包括FROM、LABEL、RUN、WORKDIR、ADD/COPY、ENV、CMD和ENTRYPOINT的使用方法及区别,帮助读者深入理解Docker镜像构建过程。
1213

被折叠的 条评论
为什么被折叠?



