Docker:Dockerfile(补充四)

这里写目录标题

  • 1. Dockerfile常见指令
    • 1.1 DockerFile例子
  • 2. 一些其他命令

1. Dockerfile常见指令

在这里插入图片描述

简单的dockerFile文件

FROM openjdk:17LABEL author=leifengyangCOPY app.jar /app.jarEXPOSE 8080ENTRYPOINT ["java","-jar","/app.jar"]
# 使用JDK 8的官方Java运行环境镜像
FROM openjdk:8-jre-slim
WORKDIR /app# 将本地的jar文件复制到容器中
COPY ./path/to/your/app.jar /app/app.jar# 暴露需要的端口,假设你的应用使用8080端口
EXPOSE 8080# 设置容器启动时执行的命令
CMD ["java", "-jar", "app.jar"]

之后需要构建Docker镜像

docker build -t your-app-name .

命令 docker build -t your-app-name . 用于根据当前目录下的 Dockerfile 和上下文环境来创建 Docker 镜像。

  1. docker build:这是用来构建 Docker 镜像的命令。它读取 Dockerfile 并执行其中的指令来组装镜像。

  2. -t your-app-name:这个选项用于为新创建的镜像添加一个标签(在此例中为 your-app-name)。标签是一种给 Docker 镜像命名的方式,可以包括仓库名、镜像名和标签,格式通常是 repository/name:tag,其中标签是可选的。这有助于后续组织和检索镜像。

  3. .:这表示构建的上下文。点号 . 表示当前目录,意味着 Docker 将在当前目录查找 Dockerfile。上下文包括指定目录中的所有文件和子目录。在构建过程中,Dockerfile 可以访问这些文件。

最后运行容器,将容器的8080端口映射到本地的8989端口:

docker run -p 8989:8080 your-app-name

1.1 DockerFile例子

[fanzhen@localhost resource]$ cat Dockerfile 
FROM frolvlad/alpine-java:jdk8-slim
ADD . /root/why
WORKDIR /root/why
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone 
EXPOSE 12019
CMD ["sh","start.sh"]

这个 Dockerfile 定义了一个用来构建 Docker 镜像的过程,主要用于创建一个基于 Java 的环境。下面我逐行解释一下这个 Dockerfile 中的每条指令:

  1. FROM frolvlad/alpine-java:jdk8-slim
  • 这一行指定了镜像的基础来源,即使用一个预构建的镜像 frolvlad/alpine-java:jdk8-slim。这个基础镜像基于 Alpine Linux,并且预装了 Java JDK 8 的精简版。
  1. ADD . /root/why
  • 这一条指令将构建上下文的当前目录(Dockerfile 所在的目录)中的所有文件和目录添加到容器的 /root/why 目录。
  1. WORKDIR /root/why
  • 设置工作目录为 /root/why。之后的指令(比如 RUN、CMD 等)都会在这个目录下执行。
  1. ENV TZ=Asia/Shanghai
  • 设置环境变量 TZ(时区)为 Asia/Shanghai,以确保容器内的时间与上海时间同步。
  1. RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
  • 这条 RUN 指令通过创建符号链接,将系统的时区设置为环境变量 TZ 所指定的时区(此处为上海)。同时,它将时区值写入到 /etc/timezone 文件,这样容器内的应用程序可以正确地识别时区配置。
  1. EXPOSE 12019
  • 指明容器在运行时会监听端口 12019。这不会自动映射端口到宿主机,但是为运行时提供了元数据说明容器服务预期会使用哪个端口。
  1. CMD ["sh","start.sh"]
  • 定义容器启动后执行的默认命令。这里使用 sh 命令执行 start.sh 脚本。如果 start.sh 是一个启动脚本,这条指令会启动应用程序。
    这个 Dockerfile 的主要用途是设置一个适合 Java 应用的环境,具体到设置工作目录、调整时区和准备启动命令。
[fanzhen@localhost resource]$ cat start.sh 
nohup java -jar ict-graph-search-api-0.0.1-SNAPSHOT.jar  > /root/why/logs/log.out 2>&1

该命令用于在 Linux 系统中启动一个 Java 应用程序,并使其在后台运行,即使终端会话结束后也不会被终止。下面是对命令的详细解释:

  • nohup: 这是一个命令,用于运行另一个命令,使得即使终端会话结束,该命令也会继续运行。nohup 的名字来源于 “no hang up” 的缩写,意思是不挂断运行。

  • java -jar ict-graph-search-api-0.0.1-SNAPSHOT.jar: 这部分是实际被 nohup 运行的命令。这里使用 Java 运行时来启动一个 jar 包(Java ARchive),这是一个包含 Java 应用程序及其依赖项的压缩文件。ict-graph-search-api-0.0.1-SNAPSHOT.jar 是 jar 文件的名称,通常 -SNAPSHOT 表示这是一个开发中的版本。

  • >: 这是重定向操作符,用于将命令的标准输出(stdout)重定向到指定的文件中。

  • /root/why/logs/log.out: 这是输出文件的路径,即上述 Java 应用的标准输出和标准错误将被写入这个文件。这通常用于日志记录,便于后续查看应用程序的运行情况。

  • 2>&1: 这是另一个重定向操作符,用于将标准错误(stderr)重定向到标准输出(stdout)。这里,它意味着错误信息也会被写入到 log.out 文件中,与标准输出合并。

整体上,这条命令的作用是在后台无中断地启动 Java 应用,并将其运行输出(包括错误信息)记录到一个日志文件中,这对于生产环境中的长时间运行和问题追踪非常有用。


[fanzhen@localhost ict-graph-search-api]$ cat graph-docker-run.sh 
# 文件挂载目录
FILE_MOUNT_DIRECTORY=$(pwd)/resourcedocker run -p 19999:8989 --name ict-graph-search-api \--restart=always \-v $FILE_MOUNT_DIRECTORY/config:/root/why/config \-v $FILE_MOUNT_DIRECTORY/ict-graph-search-api-0.0.1-SNAPSHOT.jar:/root/why/ict-graph-search-api-0.0.1-SNAPSHOT.jar \-v $FILE_MOUNT_DIRECTORY/logs:/root/why/logs \-d ict-graph-search-api

这个脚本 graph-docker-run.sh 用于启动一个 Docker 容器,并通过挂载一些本地目录到容器内部来配置一个 Java 应用。下面是对这个脚本中每个部分的解释:

  1. 定义文件挂载目录:
  • FILE_MOUNT_DIRECTORY=$(pwd)/resource
  • 这一行定义了一个变量 FILE_MOUNT_DIRECTORY,它的值设置为当前工作目录下的 resource 子目录的绝对路径。
  1. 启动 Docker 容器的命令:

docker run -p 19999:8989 --name ict-graph-search-api --restart=always -v $FILE_MOUNT_DIRECTORY/config:/root/why/config -v $FILE_MOUNT_DIRECTORY/ict-graph-search-api-0.0.1-SNAPSHOT.jar:/root/why/ict-graph-search-api-0.0.1-SNAPSHOT.jar -v $FILE_MOUNT_DIRECTORY/logs:/root/why/logs -d ict-graph-search-api

  • docker run: 运行一个新的 Docker 容器。
  • -p 19999:8989: 映射宿主机的端口 19999 到容器的端口 8989。这通常是应用监听的端口。
  • --name ict-graph-search-api: 设置容器的名称为 ict-graph-search-api。
  • --restart=always: 设置重启策略为始终重新启动容器,确保在退出或失败时容器可以自动重启。
  • -v $FILE_MOUNT_DIRECTORY/config:/root/why/config: 将宿主机上的 config 目录挂载到容器内的 /root/why/config 目录。这样容器内的应用可以使用这些配置文件。
  • -v $FILE_MOUNT_DIRECTORY/ict-graph-search-api-0.0.1-SNAPSHOT.jar:/root/why/ict-graph-search-api-0.0.1-SNAPSHOT.jar: 将应用的 jar 文件从宿主机挂载到容器内。
  • -v $FILE_MOUNT_DIRECTORY/logs:/root/why/logs: 将宿主机的 logs 目录挂载到容器内的 /root/why/logs 目录,用于存储日志文件。
  • -d ict-graph-search-api: 以 detached 模式运行容器,并指定使用 ict-graph-search-api 镜像。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2. 一些其他命令

删除其他容器
在这里插入图片描述

删除全部的卷
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/493227.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

谷歌浏览器的扩展市场使用指南

谷歌浏览器的扩展市场为用户提供了丰富多样的功能扩展,可以大幅提升浏览体验。本文将为你详细介绍如何使用谷歌浏览器的扩展市场,包括安装、管理和一些推荐的无障碍工具、图标重置方法和便捷操作技巧。(本文由https://chrome.py010.cn/的作者…

04、Vue与Ajax

4.1 发送AJAX异步请求的方式 发送AJAX异步请求的常见方式包括: 4.1.1. 原生方式 使用浏览器内置的JS对象XMLHttpRequest const xhr new XMLHttpRequest() xhr.open() xhr.send() xhr.onreadystatechange function(){} 4.1.2. 原生方式 使用浏览器内置的JS函…

网络安全概论——防火墙原理与设计

一、防火墙概述 防火墙是一种装置,它是由软件/硬件设备组合而成,通常处于企业的内部局域网与 Internet 之间,限制 Internet 用户对内部网络的访问以及管理内部用户访问 Internet 的权限。换言之,一个防火墙在一个被认为是安全和可…

南城云趣:智能云平台,杜绝电动车充电安全隐患

电动自行车作为绿色低碳出行的主要方式之一,受到无数市民的推崇,而电动自行车数量的急剧上涨,也严重增加小区管理的负担。记者调查发现,目前电动自行车缺乏有效的管理,使得带车或电瓶上楼充电、乱停乱放、车辆容易被盗等安全问题日益突出,给社区消防安全和管理带来严峻的挑战。…

Linux 文件系统目录结构及其简要介绍

👋 欢迎来到“Linux学习:Linux 文件系统目录结构”篇! 接下来让我们一起来学习一下Linux 文件系统目录结构吧!祝你有所收获! 文章目录 总结表格Linux 文件系统目录结构及其简要介绍补充小资源 小伙伴们都知道&#xff…

【服务器】MyBatis是如何在java中使用并进行分页的?

MyBatis 是一个支持普通 SQL 查询、存储过程和高级映射的持久层框架。它消除了几乎所有的 JDBC 代码和参数的手动设置以及结果集的检索。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 …

Elasticsearch-DSL高级查询操作

一、禁用元数据和过滤数据 1、禁用元数据_source GET product/_search {"_source": false, "query": {"match_all": {}} }查询结果不显示元数据 禁用之前: {"took" : 0,"timed_out" : false,"_shards" : {&quo…

使用 UniApp 在微信小程序中实现 SSE 流式响应

概述 服务端发送事件(Server-Sent Events, SSE)是一种允许服务器向客户端推送实时更新的技术。SSE 提供了一种单向的通信通道,服务器可以持续地向客户端发送数据,而不需要客户端频繁发起请求。这对于需要实时更新的应用场景非常有用。 流式传输的特点是将数据逐步传输给客…

【Tomcat】第六站(最后一站啦!):数据的返回

1. 引言 前端资源比如html页面,进行返回。截止到目前我们写的项目架构不支持前端页面(静态资源 )。 2. 数据的返回 2.1 准备 为了能够写前端页面,新建一个项目。选择Maven项目,下一步,下一步。 加载完…

electron-vite【实战系列教程】

创建项目 https://blog.csdn.net/weixin_41192489/article/details/144442262 安装必要的插件 UI 库 element-plus npm install element-plus --save安装 element-plus 图标 npm install element-plus/icons-vue安装插件 – 自动注册组件 vs 自动导入框架方法 npm install -…

信号处理相关的东东(学习解惑)

信号处理相关的东东(学习解惑) 所有内容学习自知乎专栏,https://www.zhihu.com/column/xinhao,写的很好,值得反复学习 时频域分析的一些常用概念 FROM:https://zhuanlan.zhihu.com/p/35742606 1、相加性…

[Python学习日记-73] 面向对象实战1——答题系统

[Python学习日记-73] 面向对象实战1——答题系统 简介 需求模型——5w1h8c 领域模型 设计模型 实现模型 案例:年会答题系统 简介 在学习完面向对象之后你会发现,你还是不会自己做软件做系统,这是非常正常的,这是因为计算机软…

简单工厂模式和策略模式的异同

文章目录 简单工厂模式和策略模式的异同相同点:不同点:目的:结构: C 代码示例简单工厂模式示例(以创建图形对象为例)策略模式示例(以计算价格折扣策略为例)UML区别 简单工厂模式和策…

SQL语句整理五-StarRocks

文章目录 查看版本号:SPLIT:insert 和 update 结合 select:报错:1064 - StarRocks planner use long time 3000 ms in memo phase:字段增删改: 查看版本号: select current_version(); current…

中化信息与枫清科技深化合作:共探“AI+”产业新生态

随着数字化转型的浪潮席卷全球,数据已成为推动创新和经济增长的关键力量。为持续深化数据要素价值挖掘与应用实践,推动打造行业交流平台,驱动产业创新共荣,2024 年 12 月 18 日 -19 日,由中国通信标准化协会主办的“20…

CH340系列芯片驱动电路·CH340系列芯片驱动!!!

目录 CH340基础知识 CH340常见类型 CH340引脚功能讲解 CH340驱动电路 CH340系列芯片数据手册 编写不易,仅供学习,请勿搬运,感谢理解 常见元器件驱动电路文章专栏连接 LM7805系列降压芯片驱动电路降压芯片驱动电路详解-CSDN博客 ME62…

进网许可认证、交换路由设备检测项目更新25年1月起

实施时间 2025年1月1日起实施 涉及设备范围 核心路由器、边缘路由器、以太网交换机、三层交换机、宽带网络接入服务器(BNAS) 新增检测依据 GBT41266-2022网络关键设备安全检测方法交换机设备 GBT41267-2022网络关键设备安全技术要求交换机设备 GB/…

【HarmonyOS NEXT】Web 组件的基础用法以及 H5 侧与原生侧的双向数据通讯

关键词:鸿蒙、ArkTs、Web组件、通讯、数据 官方文档Web组件用法介绍:文档中心 Web 组件加载沙箱中页面可参考我的另一篇文章:【HarmonyOS NEXT】 如何将rawfile中文件复制到沙箱中_鸿蒙rawfile 复制到沙箱-CSDN博客 目录 如何在鸿蒙应用中加…

使用k6进行MongoDB负载测试

1.安装环境 安装xk6-mongo扩展 ./xk6 build --with github.com/itsparser/xk6-mongo 2.安装MongoDB 参考Docker安装MongoDB服务-CSDN博客 连接成功后新建test数据库和sample集合 3.编写脚本 test_mongo.js import xk6_mongo from k6/x/mongo;const client xk6_mongo.new…

电子应用设计方案-63:智能升降茶几系统方案设计

智能升降茶几系统方案设计 一、引言 智能升降茶几作为一种创新的家具产品,结合了实用性和功能性,能够满足不同场景下的使用需求。本方案旨在设计一款安全可靠、操作便捷、功能丰富的智能升降茶几。 二、系统概述 1. 系统目标 - 实现茶几桌面的平稳升降&…