简介
dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本。
docker commit构建镜像
1. 镜像打包
docker commit 容器ID/names 镜像名称:版本号
2. 镜像保存
docker save -o 镜像名称.tar 镜像名称:版本号
3. 镜像加载
docker load -i 镜像名称.tar
通过docker commit提交构建镜像的方式一般不常用,主要用来做测试,在构建自定义镜像时,可以使用Dockerfile来构建。
dockerfile构建镜像
一般 docker 镜像的构建步骤:
- 1、编写一个 dockerfile 文件
- 2、docker build 构建成为一个镜像
- 3、docker run 运行镜像
- 4、docker push 发布镜像
注意:每个 DockerFile 的保留字(指令),都必须是大写的。DockerFile 脚本执行是按照顺序执行的
DockerFile的指令
- FROM:指定基础镜像
- MAINTAINER:镜像维护者信息(姓名、邮箱)
- RUN:镜像构建时需要运行的命令
- ADD:将宿主机目录下的文件拷贝进镜像且会自动处理 URL 和解压 tar 压缩包(例如加入 mysql 的压缩包,添加内容)
- WORKDIR:指定在构建镜像过程中,终端默认的登录路径(镜像的工作目录)
- VOLUME:容器数据卷(挂载目录)
- EXPOSE:容器对外暴露的端口 (和 -p 是一个效果)
- CMD:指定容器启动时要运行的命令
- ENTRYPOINT:指定容器启动时要运行的命令
- COPY:将宿主机目录下的文件拷贝进镜像且不会自动处理 URL 和解压 tar 压缩包
- ENV:用来在构建镜像过程中设置环境变量
注意:ADD 和 COPY 区别
基本复制功能:
- COPY: 纯粹地将从构建上下文(即执行 docker build 命令时指定的目录及其子目录)中的文件或目录复制到镜像中指定的路径。
- ADD: 除了具备 COPY 的基本复制功能外,还提供了额外的功能。
推荐使用:
- 由于 COPY 指令更为简单且用途明确,对于大多数仅需复制文件或目录的场景,推荐使用 COPY。
- 当你需要利用 ADD 的额外功能(如解压或从URL下载)时,才应选择使用 ADD。
Dockerfile实践
使用Dockerfile部署SpringBoot项目实例:
1、编写Dockerfile文件
# 基于 openjdk:8-jre 为基础镜像进行构建
FROM openjdk:8-jre
# 进入这个容器的目录指定为/app
WORKDIR /app
# 将jar包放入/app目录下,并重新命名为app.jar
ADD my-framework-0.0.1-SNAPSHOT.jar app.jar
# 该项目使用的是9999端口,所有需要向外暴漏9999端口,日后才能通过映射的端口去访问这个暴漏的端口
EXPOSE 9999
# ENTRYPOINT 和 CMD 结合使用,ENTRYPOINT固定命令,CMD根据参数的不同 运行不同的jar包(动态参数)
ENTRYPOINT ["java","-jar"]
CMD ["app.jar"]
# 相当于 java -jar xxx.jar
2、创建文件javademo,并把jar包和Dockerfile文件放在里面
3、构建镜像
docker build -t my-framework:1.0 .
4、运行容器
docker run -d -p 9999:9999 --name myjavademo my-framework:1.0