1、已存在的基础镜像,首行。FROM
FROM 镜像名:版本号
2、使用LABEL指定镜像的维护者信息(作者姓名和邮箱)。LABEL maintainer
LABEL maintainer="用户<用户邮箱>"
3、容器构建时需要运行的命令。RUN
有两种格式:学一个吧,贪多嚼不烂,反正也没其他人看。
shell格式 RUN后面跟linux命令
RUN linux命令
4、容器对外暴露出的端口。
EXPOSE 端口 端口
5、创建容器后,登录进来的目录。WORKDIR
ENV CATALINA_HOME /usr/local/tomcat 这是设置变量
WORKDIR $CATALINA_HOME 这是引用变量
6、指定该镜像以什么样的用户去执行,如果不指定,默认是root。(一般不修改该配置)没加这句,后面再说吧。USER
USER 用户名
7、构建镜像过程中设置环境变量。ENV
环境变量可以在后续的任何RUN指令或其他指令中使用
ENV 环境变量名 环境变量值
ENV 环境变量名=值
8、容器数据卷,用于数据保存和持久化工作。类似于 docker run 的-v参数。VOLUME
VOLUME 挂载点
挂载点可以是一个路径,也可以是数组(数组中的每一项必须用双引号)
9、将宿主机目录下(或远程文件)的文件拷贝进镜像,且会自动处理URL和解压tar压缩包。ADD
ADD (需要是Dockerfile文件同一个目录的文件)
格式 ADD 物理机文件名 镜像目录名
10、类似ADD,拷贝文件和目录到镜像中。COPY
COPY src dest
COPY ["src", "dest"]
# <src源路径>:源文件或者源目录
# <dest目标路径>:容器内的指定路径,该路径不用事先建好。如果不存在会自动创建
11、指定容器启动后处理的指令
CMD
有两种格式:
● shell格式
# CMD <命令>
CMD echo "hello world"
● exec格式
# CMD ["可执行文件", "参数1", "参数2" ...]
CMD ["catalina.sh", "run"]
Dockerfile中如果出现多个CMD指令,只有最后一个生效。CMD会被docker run之后的参数替换。
说是只有一个生效,但是我操作的时候没有生效,搞不懂为什么,写的也没问题,然后就是好像是覆盖,而不是最后一个生效,后面再说吧。
12、ENTRYPOINT,这个笔记是找的别人的看的,因为给的笔记打不开,没软件,所以找的评论区一个人的。
用来指定一个容器启动时要运行的命令。
类似于CMD命令,但是ENTRYPOINT不会被docker run后面的命令覆盖,这些命令参数会被当做参数送给ENTRYPOINT指令指定的程序。
ENTRYPOINT可以和CMD一起用,一般是可变参数才会使用CMD,这里的CMD等于是在给ENTRYPOINT传参。
当指定了ENTRYPOINT后,CMD的含义就发生了变化,不再是直接运行期命令,而是将CMD的内容作为参数传递给ENTRYPOINT指令,它们两个组合会变成 <ENTRYPOINT> "<CMD>"。
例如:
FROM nginx
ENTRYPOINT ["nginx", "-c"] # 定参
CMD ["/etc/nginx/nginx.conf"] # 变参
对于此Dockerfile,构建成镜像 nginx:test后,如果执行;
● docker run nginx:test,则容器启动后,会执行 nginx -c /etc/nginx/nginx.conf
● docker run nginx:test /app/nginx/new.conf,则容器启动后,会执行 nginx -c /app/nginx/new.conf
操作案例
# 基于Ubuntu版本(也可:版本号明确指定版本,避免使用latest)
FROM ubuntu
# 使用LABEL指定镜像的维护者信息(作者姓名和邮箱)
LABEL maintainer="z3<z3@123.com>"
# 设置环境变量(建议使用大写字母)
ENV MYPATH /usr/local
# 切换工作目录(使用环境变量)
WORKDIR $MYPATH
# 合并RUN命令(减少镜像层数,提高效率)RUN后面可以跟日常linux命令。
RUN apt-get update && \
apt-get install -y net-tools
#类似于复制文件到容器内。但是tag包可以直接解压。可写可不写。
ADD 物理机源目录文件 容器内目录
# 声明容器运行时监听的端口(非强制,仅作提示)
EXPOSE 80
# 最终CMD指令(仅保留一个,最后一个CMD生效)
CMD echo $MYPATH
CMD echo "install ifconfig cmd into ubuntu success ....."
CMD /bin/bash
docker bulid -t 镜像名:版本号 Dockerfile文件所在目录
dockerfile有些类似docker commit这个打包构建一个新的镜像。
评论区