1、确保系统已安装docker
### 安装docker环境依赖
yum install -y yum-utils device-mapper-persistent-data lvm2
### 安装docker-ce
yum install docker-ce
### docker启动并设置开机启动
systemctl start docker && systemctl enable docker
2、编写DockerFile
# 使用 OpenJDK 17 作为基础镜像,该镜像包含 JDK 17 环境
# 该镜像适用于需要编译或运行基于 JDK 17 的 Java 应用程序
FROM openjdk:17
# 设置容器中的工作目录为 /app
# 所有后续操作(如文件复制、命令执行等)都会基于该目录进行
WORKDIR /app
# 将本地的 JAR 文件 复制到容器的 /app 目录下
# COPY 命令将指定路径的文件从构建上下文复制到镜像中的目标路径
COPY web-flux-0.0.1-SNAPSHOT.jar /app/web-flux-0.0.1-SNAPSHOT.jar
# 设置环境变量 JAR_FILE,指向 JAR 文件的名称
# 环境变量可以在容器运行时被应用程序或其他脚本访问
# 这里设置环境变量方便在 Dockerfile 中或运行时引用 JAR 文件
ENV JAR_FILE=web-flux-0.0.1-SNAPSHOT.jar
# 暴露容器的 8201端口,使得主机能够与容器的指定端口进行通信
# 通常用于 Web 服务或应用程序监听端口
# 可以根据应用需要更改为其他端口号
EXPOSE 9001
# 定义容器启动时的默认命令,使用 ENTRYPOINT 设置为 java -jar 来启动应用
# 这行命令会在容器启动时运行 Java 应用,加载指定的 JAR 文件
# 如果没有其他命令传入,ENTRYPOINT 将执行默认的 java -jar jar包名称
ENTRYPOINT ["java", "-jar", "/app/web-flux-0.0.1-SNAPSHOT.jar"]
3、docker build
docker build -t 镜像名称:标签 .
docker build -t web-flux:0.0.1 .
1. docker build
docker build 是 Docker 的命令,用于根据 Dockerfile 文件和上下文构建镜像。Dockerfile 是描述如何构建镜像的脚本文件,包含了安装软件、设置环境、复制文件等步骤。
2. -t gateway:1.1
-t 选项用于给构建的镜像指定名称和标签。gateway:1.1 表示:
gateway 是镜像的名称(可以是你选择的任何名字)。
1.1 是镜像的标签(也可以是任何有效的标签)。标签通常用于标识不同版本的镜像。常见的标签有 latest(表示最新版本)或其他版本号如 1.0、2.0 等。
因此,-t gateway:1.1 表示你构建的镜像将命名为 gateway,并标记为 1.1 版本。
3. .
. 代表当前目录,作为 Docker 构建的上下文(build context)。构建过程中,Docker 将从当前目录获取所有的文件(如果有 .dockerignore 文件,则会排除其中指定的文件)并传递给 Docker 引擎,供 Dockerfile 使用。
通常,Dockerfile 和构建过程中需要的文件会在同一目录下。如果你运行 docker build -t gateway:1.1 .,Docker 会从当前目录(包含 Dockerfile)读取相关的文件来构建镜像。
命令的工作流程:
Docker 在当前目录查找 Dockerfile。
Docker 根据 Dockerfile 中的指令构建镜像(例如复制文件、安装依赖、设置环境变量等)。
构建完成后,Docker 将创建一个名为 gateway:1.1 的镜像,保存到本地的 Docker 镜像库中。
构建的效果
4、构建完成后,使用docker images 可以查询构建后的记录
docker images
可以查询到一条记录
5、启动构建完成的镜像文件
用生成的Docker镜像生成Docker容器并运行
docker run --name 容器名称 -p 宿主机端口:容器端口 -d 镜像名称:镜像标签
这里以我的jar包为举例
docker run --name web-flux -p 9001:9001 -d web-flux:0.0.1
命令解释
1. docker run
这是 Docker 中最常用的命令,用于运行一个新的容器。
docker run 会拉取指定镜像(如果本地没有的话),然后创建并启动一个容器。
2. --name gateway
--name 选项用于给启动的容器指定一个名称。
在这个例子中,容器将被命名为 gateway。
使用容器名称可以方便你后续操作,比如查看日志、停止容器或删除容器等。例如,使用 docker stop gateway 来停止名为 gateway 的容器。
注意: 容器名称应该是唯一的,不能与其他正在运行的容器名称重复。如果你尝试给容器起一个已经存在的名称,Docker 会报错。
3. -p 9001:9001
-p 选项用于设置端口映射,将容器内部的端口映射到宿主机的端口,使你能够从外部访问容器提供的服务。
9001:9001 表示将宿主机的 9001 端口映射到容器内的 9001 端口。
容器内的服务监听在端口 8201。
你可以通过宿主机的 9001 端口来访问容器中的服务。
例子: 如果容器运行的是一个 Web 应用,并且该应用在容器内部的端口 9001 上监听,那么宿主机的 http://localhost:9001 就能访问到容器内的应用。
端口映射原理:
容器内的服务可能仅能通过容器内的 IP 访问,但通过 -p 参数,将容器内部的端口暴露到宿主机后,外部网络请求就可以通过宿主机的指定端口访问到容器服务。
4. -d
-d 代表 detached mode(后台模式)。
如果不加 -d,容器会在前台运行,并且你会看到容器的日志输出。如果加上 -d,容器会在后台运行,当前终端会被释放出来,可以继续执行其他命令。
在后台运行时,Docker 会显示容器的唯一 ID,而不会显示容器的标准输出(日志)。
后台模式的优势: 当你希望容器在后台持续运行,不占用当前终端时,使用 -d 非常有用。
5. web-flux:0.0.1
web-flux:0.0.1 指定了要启动的 镜像名称 和 版本标签。
web-flux 是镜像的名称。
0.0.1 是镜像的版本标签。Docker 默认使用 latest 标签,如果没有显式指定版本标签,Docker 会拉取 latest 标签的镜像。这里使用了 0.0.1 版本的镜像,表示启动的是该版本的镜像。
镜像和标签: web-flux 是镜像名称,0.0.1 是版本标签。通过版本标签可以确保你运行的镜像是特定版本,而不是其他版本。
总结
这条命令的作用是:
创建并启动容器:基于 web-flux:0.0.1 镜像,创建并启动一个名为 web-flux 的新容器。
端口映射:将宿主机的 8201 端口映射到容器的 8201 端口,从而使容器内的服务能通过宿主机的端口进行访问。
后台运行:容器将在后台运行,不会占用当前的终端。
命令解析:
docker run --name web-flux -p 9001:9001 -d web-flux:0.0.1
--name web-flux:容器名称为 web-flux。
-p 9001:9001:宿主机的 9001 端口映射到容器的 9001 端口。
-d:容器以后台模式运行。
web-flux:0.0.1:使用 web-flux 镜像的 0.0.1 版本启动容器。
这样,通过这个命令,你将能够在后台运行一个名为 web-flux 的容器,并且通过宿主机的端口 9001 访问容器内部的服务。
6、查看docker当前运行的容器
docker ps
7、访问9001端口查看效果,这里路径我访问springboot定义的某一个接口查看效果
其他扩展
如何停止docker容器
docker stop xxx
xxx为 docker ps命令执行后 显示的 CONTAINER ID
停止之后再查看容器的列表,会发现没记录了。 可以使用下面命令,查看停止的容器的列表
docker ps -a
启动docker容器
docker start xxx
删除docker 容器
docker rm xxx