Dockerfile是什么?
Dockerfile就是镜像描述文件
Dockfile作用
通过Dockerfile文件构建一个属于自己的镜像
为什么使用Dockerfile构建镜像呢?
官方镜像确实足够好,适用于大多数应用程序,但是如果我们想构建属于自己的业务镜像,这个时候就必须自定义镜像
如何通过Dockerfile构建自己的镜像
- 在指定位置创建一个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构建镜像流程

评论 (0)