Docker:Dockerfile(补充四)

news2025/3/10 5:45:20

这里写目录标题

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

1. Dockerfile常见指令

在这里插入图片描述

简单的dockerFile文件

FROM openjdk:17

LABEL author=leifengyang

COPY app.jar /app.jar

EXPOSE 8080

ENTRYPOINT ["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)/resource

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

这个脚本 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.coloradmin.cn/o/2262878.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

98. 验证二叉搜索树(java)

题目描述: 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下: 节点的左 子树 只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。 …

微软 Phi-4:小型模型的推理能力大突破

在人工智能领域,语言模型的发展日新月异。微软作为行业的重要参与者,一直致力于推动语言模型技术的进步。近日,微软推出了最新的小型语言模型 Phi-4,这款模型以其卓越的复杂推理能力和在数学领域的出色表现,引起了广泛…

libaom 源码分析:熵编码模块介绍

AV1 熵编码原理介绍 关于AV1 熵编码原理介绍可以参考:AV1 编码标准熵编码技术概述libaom 熵编码相关源码介绍 函数流程图 核心函数介绍 av1_pack_bitstream 函数:该函数负责将编码后的数据打包成符合 AV1 标准的比特流格式;包括写入序列头 OBU 的函数 av1_write_obu_header…

JAVA基于百度AI人脸识别签到考勤系统(开题报告+作品+论文)

博主介绍:黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育、辅导。 所有项目都配有从入门到精通的基础知识视频课程&#xff…

go 中使用redis 基础用法

1、安装redis 参考链接:https://www.codeleading.com/article/98554130215/ 1.1 查看是否有redis yum 源 yum install redis没有可用的软件包,执行1.2 1.2下载fedora的epel仓库 yum install epel-release --下载fedora的epel仓库1.3启动redis s…

postman添加cookie

点击cookies 输入域名,添加该域名下的cookies 发送改域名下的请求,cookie会自动追加上

简易记事本开发-(SSM+Vue)

目录 前言 一、项目需求分析 二、项目环境搭建 1.创建MavenWeb项目: 2.配置 Spring、SpringMVC 和 MyBatis SpringMVC 配置文件 (spring-mvc.xml): 配置视图解析器、处理器映射器,配置了CORS(跨源资源共享)&#x…

vsCode 报错[vue/no-v-model-argument]e‘v-model‘ directives require no argument

在vue3中使用ui库中的组件语法v-model:value时会提示[vue/no-multiple-template-root]The template root requires exactly one element. 引入组件使用单标签时会提示[vue/no-multiple-template-root]“The template root requires exactly one element. 原因: 1.可…

初学stm32 -- SysTick定时器

以delay延时函数来介绍SysTick定时器的配置与使用 首先是delay_init()延时初始化函数,这个函数主要是去初始化SysTick定时器; void delay_init() {SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); //选择外部时钟 HCLK/8fac_usSystemCoreCloc…

Gitlab 数据备份全攻略:命令、方法与注意事项

文章目录 1、备份命令2、备份目录名称说明3、手工备份配置文件3.1 备份配置文件3.2 备份ssh文件 4、备份注意事项4.1 停止puma和sicdekiq组件4.2 copy策略需要更多磁盘空间 5、数据备份方法5.1 docker命令备份5.2 kubectl命令备份5.3 参数说明5.4、选择性备份5.5、非tar备份5.6…

selenium工作原理

原文链接:https://blog.csdn.net/weixin_67603503/article/details/143226557 启动浏览器和绑定端口 当你创建一个 WebDriver 实例(如 webdriver.Chrome())时,Selenium 会启动一个新的浏览器实例,并为其分配一个特定的…

Docker--Docker Registry(镜像仓库)

什么是Docker Registry? 镜像仓库(Docker Registry)是Docker生态系统中用于存储、管理和分发Docker镜像的关键组件。 镜像仓库主要负责存储Docker镜像,这些镜像包含了应用程序及其相关的依赖项和配置,是构建和运行Doc…

OpenEuler Linux上怎么测试Nvidia显卡安装情况

当安装好显卡驱动后怎么样知道驱动程序安装好了,这里以T400 OpenEuler 正常情况下,我们只要看一下nvidia-smi 状态就可以确定他已经正常了 如图: 这里就已经确定是可以正常使用了,这里只是没有运行对应的程序,那接来下我们就写一个测试程序来测试一下:以下代码通过AI给出然后…

【python虚拟环境安装】linux centos 下的python虚拟环境配置

linux centos 下的python虚拟环境配置 在 CentOS 环境中处理 pip 安装警告的方法1. 创建并使用虚拟环境2. 忽略警告并继续使用 root 用户安装(不推荐)报错问题处理 在 CentOS 环境中处理 pip 安装警告的方法 当在 CentOS 环境中遇到 pip 安装警告时&…

Excel根据身份证号,计算退休日期和剩余天数!

大家好,我是小鱼。 日常工作中,有时我们需要使用Excel表格统计男女员工退休日期或者退休剩余天数,很多新手小伙伴可能不知道如何下手。今天就跟大家分享一下WPS中的Excel表格数据如果根据身份证号,自动批量计算退休日期和剩余天数…

排序算法(3)——归并排序、计数排序

目录 1. 归并排序 1.1 递归实现 1.2 非递归实现 1.3 归并排序特性总结 2. 计数排序 代码实现 3. 总结 1. 归并排序 基本思想: 归并排序(merge sort)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法&#xff0…

Electron-Vue 开发下 dev/prod/webpack server各种路径设置汇总

背景 在实际开发中,我发现团队对于这几个路径的设置上是纯靠猜的,通过一点点地尝试来找到可行的路径,这是不应该的,我们应该很清晰地了解这几个概念,以下通过截图和代码进行细节讲解。 npm run dev 下的路径如何处理&…

HTML零基础入门教学

目录 一. HTML语言 二. HTML结构 三. HTML文件基本结构 四. 准备开发环境 五. 快速生成代码框架 六. HTML常见标签 6.1 注释标签 6.2 标题标签:h1-h6 6.3 段落标签:p 6.4 换行标签:br 6.5 格式化标签 6.6 图片标签&a…

晶闸管-直流电动机调速系统设计【MATLAB源码+Word文档】

1.1.设计指标及要求 某双闭环直流调速系统采用晶闸管三相桥式整流电路供电,基本数据为:直流他励电动机, 设计要求主要技术指标: 1.2 目录 2. 硬件电路设计 3. 控制电路 4. MATLAB系统仿真 转速输出波形 硬件电路图 Word文档MATLAB仿真源…

Andriod Studio | 项目构建成功,依赖无报错的情况下,却无法启动App?

启动App时出现问题(Error running app): (1) Emulator failed to connect within 5 minutes 原因:App(模拟器)超过5分钟未响应,连接失败 解决办法:可能是因为电脑磁盘不足&#…