Skip to main content

Dockerfile

info

Dockerfile 是镜像的描述文件,用来构建打包一个镜像,官方建议命名是 Dockerfile , 使用此命名,docker build 的时候可以省略 -f 指定文件位置,会自动寻找名为 Dockfile 的文件

如何使用

  • 编写一个 Dockerfile 文件
  • 书写脚本
  • docker build 构建成一个镜像
  • docker run 通过镜像运行一个容器

构建过程

  • 每个指令关键字都必须大写
  • 从上往下, 逐行执行
  • # 代表的是注释
  • 每一个指令执行都是创建一个新的镜像层

Dockerfile 文件是面向开发的,发布项目,制作镜像,就需要写这个文件

指令

FROM             # 基础镜像,一切从这里开始构建
MAINTAINER # 镜像作者, 姓名 + 邮箱
RUN # 构建镜像时需要运行的命令
ADD # 添加内容
WORKDIR # 工作目录
VOLUME # 容器内数据卷挂载目录
EXPOSE # 暴露端口
CMD # 运行容器时执行, 多个命令, 最后一个生效
ENTRYPOINT # 运行容器时执行, 多个命令, 最后一个生效
ONBUILD # 当构建一个被继承 Dockerfile 的时候就会运行
COPY # 拷贝文件到镜像中
ENV # 构建的时候设置环境变量

ADD 和 COPY的区别

同样是拷贝和复制操作, 但是ADD会在拷贝的过程中将压缩包进行解压, COPY则不会

CMD 和 ENTRYPOINT 的区别

CMD ["ls","-a"]
ENTRYPOINT ["ls","-a"]

这两个命令会在容器启动后执行一条命令,大多数情况下,只需要在这二者之间选一个使用即可。大部分Linux发行版的基础镜像里面调用CMD命令, 指定容器启动后执行/bin/sh或/bin/bash。这样镜像启动默认进入交互式的shell。CMD可以被 docker run xxx ls -l 直接拼接命令覆盖。 如果你希望你的docker镜像只执行一个具体程序, 不希望用户在执行docker run的时候随意覆盖默认程序. 建议用ENTRYPOINT

构建自己的镜像

FROM openjdk:17-jdk-alpine
EXPOSE 8080
ADD app.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

打包镜像

docker build -f Dockerfile -t user/test:1 .
# -f 指定 Dockerfile的文件路径
# -t 指定镜像名字和 tag
# . 指定当前目录