Dockerfile的使用

卖萌小老头
2022-09-13 / 0 评论 / 298 阅读 / 正在检测是否收录...

Dockerfile是什么?

Dockerfile就是镜像描述文件
Docker结构图

Dockfile作用

通过Dockerfile文件构建一个属于自己的镜像

为什么使用Dockerfile构建镜像呢?

官方镜像确实足够好,适用于大多数应用程序,但是如果我们想构建属于自己的业务镜像,这个时候就必须自定义镜像

如何通过Dockerfile构建自己的镜像

  1. 在指定位置创建一个Dockerfile文件

编写Dockerfile相关语句

Dockerfile语法(指令说明简洁版)

指令描述
FROM当前镜像基于哪个镜像(第一指令必须是FROM)
MAINTAINER镜像维护者姓名或邮箱地址
RUN构建镜像时运行的指令
CMD运行容器时执行的shell环境
VOLUME指定容器挂载点到宿主机自动生成的目录或其他容器
USER为RUN、CMD、和 ENTRYPOINT 执行命令指定运行用户
WORKDIR为 RUN、CMD、ENTRYPOINT、COPY 和 ADD 设置工作目录,就是切换目录
HEALTHCHECH健康检查
ARG构建时指定的一些参数
EXPOSE声明容器的服务端口(仅仅是声明)
ENV设置容器环境变量
ADD拷贝文件或目录到容器中,如果是URL或压缩包便会自动下载或自动解压
COPY拷贝文件或目录到容器中,跟ADD类似,但不具备自动下载或解压的功能
ENTRYPOINT运行容器时执行的shell命令

CMD & ENTRYPOINT

都是用来指定容器启动时默认执行指令。

  • 注意:CMD指令可以存在多个,但是存在多个时只有最优一个生效

使用

1、直接使用命令方式
java -jar demo.jar

2、json数组(推荐方式)
["java", "-jar", "demo.jar"]

区别

1、CMD命令里,在运行容器时,进行覆盖:

docker run 镜像:版本号 {覆盖自定义命令};
例如:docker run demo:1 ls /

2、ENTRYPOINT命令里,在运行容器时,进行覆盖:

docker run --entrypoint={覆盖命令} 镜像:版本号 {传递参数};
例如:docker run --entrypoint=ls 镜像:版本号 /

总结

ENTRYPOINT 用来书写一个容器固定的指令

CMD用来给ENTRYPOINT传递参数

  • 注意:配合使用时必须使用json数组语法

例如:

FROM java:8
WORKDIR /apps
...
ENTRYPOINT ["ls"]
CMD ["/apps"]

那么启动时就可以指定CMD

通过Dockerfile构建镜像

docker build -t 镜像名称:版本 .(指定Dockerfile文件所在位置)

Dockerfile构建镜像流程

Dockerfile构建流程图

0

评论 (0)

取消