一、Dockerfile介绍
Dockerfile 是一个文本文件,通过它,用户可以定义如何构建 Docker 镜像。这个文件包含了一系列命令和参数,这些命令会在镜像构建过程中被执行,并最终创建一个新的镜像。
二、常用命令
Dockerfile 的指令是预定义的,每条指令都会为镜像创建一个新的层(layer)。这些层是 Docker 镜像的核心组成部分,它们允许 Docker 通过增量更新来高效地管理镜像和容器
以下是一些常用的指令:
1. FROM
指定基础镜像。指定基础镜像,用于构建当前镜像的起点。必须是 Dockerfile 中的第一条非注释命令。
FROM ubuntu:20.04
2. RUN
执行命令并创建新的镜像层
RUN apt-get update && apt-get install -y python3
3. COPY
将文件或目录从构建上下文复制到容器内部。与 ADD 类似,但 COPY 仅复制本地文件,不支持自动解压和 URL 下载。
COPY <src>... <dest>
COPY . /app 复制当前目录的内容到容器的 /app 目录
4. ADD
将文件、目录或远程 URL 地址的内容添加到镜像中。ADD 命令会自动解压压缩文件,并且如果源文件是 URL,则会自动下载。但需要注意的是,ADD 命令的行为可能不够清晰,因此在可能的情况下,推荐使用 COPY 命令。
ADD https://example.com/file.tar.gz /app
5. CMD
设置容器启动时的默认命令。Dockerfile 中可以有多个 CMD 命令,但只有最后一个会被执行。
CMD ["python3", "app.py"]
6. ENTRYPOINT
配置容器启动时运行的命令,使得容器以该命令作为其可执行程序。与 CMD 不同,ENTRYPOINT 的参数不会被 docker run 命令中的参数覆盖,而是作为参数传递给 ENTRYPOINT 指定的命令。
ENTRYPOINT ["python3"]
7. ENV
设置环境变量,无论是后续的其它指令(如 RUN),还是运行时的应用,都可以直接使用这里定义的环境变量。
ENV PYTHON_VERSION=3.8
8. WORKDIR
设置工作目录,用于后续 RUN、CMD、ENTRYPOINT、COPY 和 ADD 指令的默认执行目录。
WORKDIR /app
9. EXPOSE
声明容器运行时的监听端口,但并不实际将端口暴露出来。通常与 -p 参数一起使用,将宿主机的端口映射到容器内部。
EXPOSE 8080
三、Dockerfile制作
我们准备一个jar包,springboot的项目yd-demo-0.0.1-SNAPSHOT.jar
编写dockerfile
准备一个项目的jar包 yd-demo-0.0.1-SNAPSHOT.jar
基于 openjdk:8-jre 为基础镜像进行构建
FROM openjdk:8-jre
进入这个容器的目录,目录不存在会创建并指定为/data
WORKDIR /data
将jar包放入/app目录下,并重新命名为app.jar
ADD yd-demo-0.0.1-SNAPSHOT.jar yd-demo.jar
对外暴露的端口号
EXPOSE 8443
ENTRYPOINT 和 CMD 结合使用,ENTRYPOINT固定命令,CMD根据参数的不同 运行不同的jar包(动态参数)
ENTRYPOINT ["java","-jar"]
CMD ["yd-demo.jar"]
相当于 java -jar xxx.jar
四、构建镜像
将yd-demo-0.0.1-SNAPSHOT.jar包,还有dockerfile文件传到你需要的目录下面
执行命令,构建镜像:
docker build -t yd-demo .
. 表示当前目录
构建镜像命令说明
docker build -t [NAME]:[TAG] PATH | URL | -
-t, --tag:指定生成的镜像的名称和标签。格式为 NAME:TAG。如果不指定标签,默认为 latest。
PATH | URL | -:指定 Dockerfile 所在的路径、URL 或标准输入。
除了 -t 选项,docker build 命令还有其他一些常用选项:
--file, -f:指定 Dockerfile 的名称(默认是 Dockerfile)。
--no-cache:构建镜像时不使用缓存。
--build-arg:设置构建时的变量。
-q, --quiet:安静地构建镜像,只显示构建结果的简要信息。
启动容器
docker run -d --name yd-demo -p 8443:8443 yd-demo
查看容器日志
docker logs -f 0efabb83a401(对应自己的容器ID)
浏览请求接口
通过 Docker 部署 Spring Boot 项目,可以简化环境配置和部署流程。只需编写 Dockerfile 并构建镜像,即可在任何支持 Docker 的环境中运行 Spring Boot 应用。