如何写一个简单的dockerfile

Dockerfile 是一种文本文档,它包含了一组用户可以调用以创建镜像的指令。用户可以使用 docker build 命令,根据 Dockerfile 中定义的步骤,自动构建出一个新的 Docker 镜像。

以下是一些常用的 Dockerfile 指令:

FROM:设置基础镜像,必须为第一个非注释指令。

ADD:将文件从 Docker 主机复制到 Docker 镜像。这个命令也可以接受一个 URL 作为参数。

COPY:类似于 ADD,但只关注复制本地文件,而不会提取和解压等操作。

CMD:为启动的容器提供默认的执行命令,只能在 Dockerfile 中使用一次。

ENTRYPOINT:与 CMD 类似,但是它的参数会被 CMD 的内容或者 docker run 的参数所覆盖。

接下来是一个 Dockerfile 示例:

第一步 准备材料

准备好基础镜像

确定好你的基础镜像地址,我们这里以dockerhub.kubekey.local/your-image作为示例

准备好要导入到基础镜像的文件

我们这里以gateway.jar、auth.jar、business.jar、job.jar,还有一个配套的run.sh指令作为示例.

第二步 创建dockerfile

进入和第一步的相同目录,执行

bash 复制代码
vim Dockerfile

写入如下指令

bash 复制代码
# 基础镜像
FROM dockerhub.kubekey.local/your-image

# 将 JAR 文件添加到 Docker 镜像中
ADD gateway.jar /app/gateway.jar
ADD auth.jar /app/auth.jar
ADD business.jar /app/business.jar
ADD job.jar /app/job.jar

# 添加启动脚本
ADD run.sh /app/run.sh

# 设定工作目录
WORKDIR /app

# 设置 run.sh 为可执行
RUN chmod +x /app/run.sh

# 当 Docker 容器启动时自动执行 run.sh
ENTRYPOINT ["/app/run.sh"]

执行:x保存退出。

注意,你需要把 FROM dockerhub.kubekey.local/your-image 中的 your-image 替换为你需要的镜像名称。同时,你需要确保所有的 JAR 文件和 run.sh 脚本都在你执行 docker build 命令的当前目录下。

run.sh 需要包含启动你的 JAR 文件的命令,例如run.sh内容如下:

bash 复制代码
#!/bin/bash
java -jar /app/gateway.jar &
java -jar /app/auth.jar &
java -jar /app/business.jar &
java -jar /app/job.jar &

第三步 构建镜像

执行指令

bash 复制代码
docker build -t my-image:1.0 

格式是docker build -t image_name,后面的冒号后跟的是tag信息,例如版本号等,如果你执行docker build -t my-image ,docker默认会给你打latest的标签,也就是说实际上会执行,docker build -t my-image:latestlatest标签这里表示最新版本。

第四部 查看镜像

执行指令,就可以看到你构建好的镜像了

bash 复制代码
docker images | grep my-image
相关推荐
AAA@峥4 分钟前
K8s 资源管控:ResourceQuota 与 LimitRange 机制详解与实战
云原生·容器·kubernetes
daoihfoaf19 分钟前
太原助听器品质甄选
容器
云川之下2 小时前
【k8s】Docker inspect 命令
docker·容器·kubernetes
猫吃了源码3 小时前
CentOS7使用Kubeadm安装部署K8s(Kubernetes)最新稳定版本1.26.x
云原生·容器·kubernetes
倔强的石头1063 小时前
飞牛OS部署Mtab:Docker搭建自托管书签导航并实现远程访问
运维·docker·容器
张忠琳4 小时前
【k3s】AutoK3s v0.9.3 —— Part 7 辅助模块超深度逐行分析
云原生·容器·kubernetes·k3s·autok3s
张忠琳13 小时前
【k3s】AutoK3s v0.9.3 Part 1 入口与 CLI 命令模块 — 超深度逐行分析之三
云原生·容器·kubernetes·k3s·autok3s
apgk118 小时前
基于Canal实现mysql数据同步到消息队列(RabbitMQ/Kafka)详细操作教程
docker·kafka·rabbitmq
fatcoder19 小时前
玩转Docker 06 — 容器网络
前端·后端·docker
xiaoxiangsiyan20 小时前
企业日常运维高频应用服务全解
运维·网络·云原生·容器·dns