侧边栏壁纸
博主头像
随心 博主等级

没有天赋,那就一直重复

  • 累计撰写 13 篇文章
  • 累计创建 4 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

dockerfile简介

随心
2025-06-04 / 0 评论 / 0 点赞 / 9 阅读 / 0 字

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这个打包构建一个新的镜像。

0

评论区