FROM
FROM centos #制作基准镜像(基于centos:lastest)
From scratch #不依赖任何基准镜像base image
尽量使用官方提供的Base Image
WORKDIR设置工作目录
WORKDIR /usr/local
WORKDIR /usr/local/lql #自动创建
尽量使用绝对路径
ADD -复制文件
ADD hello / #复制到根路径
ADD test.tar.gz /#添加到根路径并压缩
ADD除了复制,还有添加远程文件的功能
ENV-设置环境常量
ENV JAVA_HOME /usr/local/openjdk8
RUN { JAVA_HOME }/bin/java –jar test.jar
尽量使用环境常量,提高程序的维护性
EXPOSE-暴露容器端口
EXPOSE 8080
EXPOSE 3306
将容器内部端口暴露给物理机
分层
FROM centos //镜像层
RUN ["echo" , "好好学习"] //镜像层
RUN ["echo" , "天天向上"] //镜像层
RUN ["echo" , "人见人爱"] //镜像层
RUN ["echo" , "花见花开"] //镜像层
[root@rabbitmq1 layer]# docker build -t mylayer:1.0 /opt/layer/
Sending build context to Docker daemon 2.048kB
Step 1/5 : FROM centos
latest: Pulling from library/centos
729ec3a6ada3: Pull complete
Digest: sha256:f94c1d992c193b3dc09e297ffd54d8a4f1dc946c37cbeceb26d35ce1647f88d9
Status: Downloaded newer image for centos:latest
---> 0f3e07c0138f
Step 2/5 : RUN ["echo" , "好好学习"]
---> Running in b4ae7c86dd0e //镜像层
好好学习
Removing intermediate container b4ae7c86dd0e
---> 52faaa758bea
Step 3/5 : RUN ["echo" , "天天向上"]
---> Running in 7d0a93acf720
天天向上
Removing intermediate container 7d0a93acf720
---> f504016c92a8
Step 4/5 : RUN ["echo" , "人见人爱"]
---> Running in b31259b25987
人见人爱
Removing intermediate container b31259b25987
---> fecfcd9995fc
Step 5/5 : RUN ["echo" , "花见花开"]
---> Running in 42a9c0e036c3
花见花开
Removing intermediate container 42a9c0e036c3
---> 5160b9150fc2
Successfully built 5160b9150fc2
Successfully tagged mylayer:1.0
只有变化的部分重新构建,没有变化的部分不会重新构建,从缓存中取出
RUN&CMD&ENTRYPOINT
RUN:在Build构建时执行命令
RUN [“yum”,”install”,”-y”,”vim”] #Exec命令格式
ENTRYPOINT:容器启动时执行的命令
用于容器启动时执行命令
Dockerfile只有最后一个ENTRYPOINT被执行
ENTRYPOINT[“ps”]推荐使用exec格式
CMD:容器启动后执行默认的命令或参数
用于设置默认执行的命令
Dockerfile出现多个CMD,只有最后一个
容器启动时附加命令,则CMD被忽略
CMD[“ps”, “ef”] #推荐使用exec格式
ENTRYPOINT于CMD区别
ENTRYPOINT:执行的固定的命令
CMD:执行的是默认的命令,外部一旦有参数,CMD命令会失效
实例
[root@rabbitmq1 opt]# docker build -t shell /opt/shell/
Sending build context to Docker daemon 2.048kB
Step 1/4 : FROM centos
---> 0f3e07c0138f
Step 2/4 : RUN echo "image building!!"
---> Running in 46cee04ff86c
image building!!
Removing intermediate container 46cee04ff86c
---> 71a6c43b7eae
Step 3/4 : ENTRYPOINT ["ps"]
---> Running in d8a57b6e5412
Removing intermediate container d8a57b6e5412
---> b0ae531425df
Step 4/4 : CMD ["-ef"]
---> Running in d0688f5b7a3a
Removing intermediate container d0688f5b7a3a
---> e0daac469b04
Successfully built e0daac469b04
Successfully tagged shell:latest
[root@rabbitmq1 opt]# docker run shell
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 13:00 ? 00:00:00 ps –ef
此时内部执行的命令是:ps –ef
[root@rabbitmq1 opt]# docker run shell -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 46332 1708 ? Rs 13:01 0:00 ps –aux
此时内部执行的命令是:ps –aux