1.FROM:引入和开始
#从头制作baseImage
FROM scratch
#使用已有的baseImage
FROM centos
#指定使用的版本
FROM ubuntu:14.04
2.LABEL:定义一些说明信息
LABEL maintainer=[email protected]
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