Dockerfile制作相关命令

Dockerfile中执行命令的几种方式 Dockerfile 是用于构建 Docker 镜像的文本文件,提供了一系列构建指令和配置,用于自动化和标准化 Docker 镜像的构建流程。一个 Dockerfile 可以通过依次执行每行命令来创建一个新的 Docker 镜像。因此,执行命令与 Dockerfile 的编写和构建密不可分。RUN 命令: RUN 命令是最常用的一种方式,它允许在构建 Docker 镜像期间执行任意命令。例如:CMD 命令: CMD 命令用于指定容器启动时要执行的默认命令。 阅读详情

一、常用命令

1. FROM

指令指定基础镜像

FROM <image>:<tag>  如 FROM ubuntu:20.04

image: 基础镜像名称。
tag: 可选,镜像标签,默认为 latest。
如

2. RUN

用于在构建镜像时执行命令。可以用于安装软件包或配置文件等。

RUN <command>  如 RUN apt-get update && apt-get install -y python3

3. COPY

将本地文件或目录复制到镜像中的指定位置。

COPY <source> <destination>  如 COPY ./myfile.txt /app/myfile.txt

source: 本地路径(相对路径或绝对路径)。
destination: 镜像中的目标路径。

4. ADD

ADD 和 COPY 类似,但 ADD 还支持从 URL 下载文件以及自动解压归档文件(如 .tar)。

ADD <source> <destination>  如 ADD myarchive.tar.gz /app/

5. WORKDIR

设置工作目录,之后的 RUN, CMD, ENTRYPOINT 等指令都会在这个目录下执行。

WORKDIR <path>  如 WORKDIR /app

6. CMD

指定容器启动时执行的命令。

CMD 可以有多种形式:
    1. 执行命令:
    CMD ["executable", "param1", "param2"] 如 CMD ["python3", "app.py"]
    
    1. Shell 形式:
    CMD ["param1", "param2"](会通过 /bin/sh -c 运行)
    

注意: 如果在运行容器时指定了命令,CMD 指令将被忽略。

7. ENTRYPOINT

指定容器启动时的主命令。ENTRYPOINT 和 CMD 类似,但 ENTRYPOINT 不会被容器运行时的命令覆盖。

ENTRYPOINT ["executable", "param1", "param2"]  如 ENTRYPOINT ["python3", "app.py"] 或 ENTRYPOINT ["start.sh"]

8. EXPOSE

声明容器在运行时监听的网络端口(但不进行端口映射)。

EXPOSE <port> [<port>/<protocol>...] 如 EXPOSE 8080 8081/udp

9. ENV

设置环境变量,容器中运行的进程可以访问这些变量。

ENV <key>=<value> ...   如 ENV APP_ENV=dev

10. VOLUME

用于创建一个挂载点,可以把主机或其他容器的文件夹挂载到这个点。

VOLUME ["/path/to/dir"]   如 VOLUME ["/data"]

11. USER

指定容器内的用户身份。默认情况下,容器以 root 用户身份运行,可以通过 USER 指令更改。

USER <username> | <UID>   如 USER myuser

12. ARG

用于定义构建时的变量,可以在 docker build 命令中通过 --build-arg 参数传递。

ARG <name>[=<default_value>]  如  ARG VERSION=1.0

13. LABEL

用于为镜像添加元数据。通常用来提供版本信息、维护者信息等。

LABEL <key>=<value>  如 LABEL version="1.0" maintainer="your name"

14. SHELL

用来更改 Dockerfile 中 RUN 指令所使用的默认 shell(默认是 /bin/sh -c)。

SHELL ["executable", "parameters"]  如 SHELL ["/bin/bash", "-c"]

二、使用样例

  • entrypoint.sh

容器执行入口,自定义执行方式

#!/usr/bin/env bash

cd /opt/app

# look for jar file
JAR_NAME=""
# look for newest jar
latest_jar=$(ls -t *.jar 2>/dev/null | head -n 1)
if [ ! -z "$latest_jar" ]; then
    JAR_NAME="$latest_jar"
    echo "find jar: $JAR_NAME"
else
  echo "jar not found !!!"
  return;
fi

java -Duser.timezone=Asia/Shanghai \
-Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m \
-XX:+HeapDumpOnOutOfMemoryError \
-jar $JAR_NAME
  • Dockerfile

docker build 镜像的配置文件

# 基于java17
FROM openjdk:17
# 作者信息
MAINTAINER me

# 工作目录
WORKDIR /opt/app

# 端口
EXPOSE 8080

# 挂载目录
VOLUME ["/opt/app"]
# 复制自定义执行脚本
COPY ./entrypoint.sh  /usr/local/bin/entrypoint.sh
# 启动容器时运行自定义脚本
ENTRYPOINT ["sh","/usr/local/bin/entrypoint.sh"]

三、进阶构建

分多个步骤制作 Docker 镜像是一个良好的习惯,它不仅有助于镜像的清晰和可维护性,还能在构建过程中更好地利用 Docker 缓存,减少不必要的重建。

# 基础镜像
FROM node:latest AS application
# 设置工作目录
WORKDIR /app
# 将vue源码拷贝到工作目录
COPY myapp .
# 执行编译
RUN npm install
RUN npm run build


# 构建最终容器
FROM nginx:latest
# 从上个构建容器中,将编译后的文件复制到nginx工作目录,复制后application容器被抛弃,实际容器是当前nginx和复制过来的编译后文件,没有node环境
COPY --from=application /app/dist /usr/share/nginx/html
# 开放端口
EXPOSE 80
# 运行容器命令
CMD ['nginx","-g","daemon off;"]
[Docker学习笔记]利用Dockerfile创建镜像 本文旨在指导读者如何通过 Dockerfile 创建和优化 Docker 镜像,从而简化软件部署流程。我们将从 Dockerfile 的基础知识讲起,逐步深入到编写 Dockerfile 的最佳实践,包括如何选择基础镜像、设置工作环境、复制文件、安装依赖、暴露端口以及定义容器启动命令 阅读详情

相关推荐

狂神说docker(最全笔记)

一.Docker入门 1. Docker 为什么会出现 2. Docker的历史 3.Docker最新超详细版教程通俗易懂 Docker是基于Go语言开发的!开源项目 官网 官方文档Docker文档是超详细的 仓库地址 4. 虚拟化技术和容器化技术对比 4.1. 虚拟化技术的缺点 资源占用十分多 冗余步骤多 启动很慢 2.2. 容器化技术 比较Docker和虚拟化技术的不同 传统虚拟机, 虚拟出一条硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软.

qq_21197507的博客 5万+

Dockerfile命令详解之 RUN(一)

许多同学不知道Dockerfile应该如何写,不清楚Dockerfile中的指令分别有什么意义,能达到什么样的目的,接下来我将详细的为大家解释每一个指令的含义以及用法。指令不区分大小写。但是,按照惯例,它们应该是大写的,以便更容易地将它们与参数区分开来。

清风怎不知意的博客 1万+

告别臃肿VS!仅用Visual Studio 2022 Build Tools为Qt 5.12.12配置MSVC2017开发环境

本文详细介绍了如何仅使用Visual Studio 2022 Build Tools为Qt 5.12.12配置MSVC2017开发环境,避免安装臃肿的完整VS。通过精准选择组件、配置Qt Creator编译器和优化Kit设置,实现高效、精简的Windows平台Qt开发环境搭建,特别适合追求性能和资源优化的开发者。

weixin_30340617的博客 350

Docker - 深入理解Dockerfile中的 RUN, CMD 和 ENTRYPOINT

这个特性很重要例子:定义1个 docker file构建镜像正常执行时会输出hhihhhih但是我们可以在docker run 命令后面加上命令覆盖掉CMD 定义的命令hello这个特性相当重要, 可以让我们的容器部署更加灵活。

nvd11的专栏 4812

单细胞多组学数据整合分析实战:从原始数据到跨平台合并

本文详细介绍了单细胞多组学数据整合分析的实战流程,从原始数据处理到跨平台合并分析。通过Seurat和Harmony等工具的应用,帮助研究者有效解决批次效应问题,保留真实的生物学信号。文章包含代码示例和常见问题解决方案,特别适合需要进行单细胞合并分析的研究人员参考。

weixin_30752699的博客 90

KEGG数据库与KAAS工具:基因功能注释的实用指南

本文提供了使用KEGG数据库与KAAS工具进行基因功能注释的完整实用指南。详细阐述了如何从准备基因或蛋白序列开始,通过KAAS服务器获取KEGG Orthology(KO)编号,并解读注释结果。文章进一步介绍了如何利用KOBAS工具进行通路富集分析,将定性观察转化为定量洞察,并分享了提高注释准确率、处理大数据集及使用API等避坑技巧与高阶方法,为基因组学、转录组学研究者奠定坚实的数据分析基础。

weixin_29292535的博客 390

Dockerfile(4) - RUN 指令详解

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

NHB234567的博客 2167

深入解析“PROJ: proj_create_from_database: Cannot find proj.db”错误:从环境配置到打包实战

本文深入解析了“PROJ: proj_create_from_database: Cannot find proj.db”错误的根源与解决方案,涵盖环境配置、PyInstaller打包及跨平台兼容性处理。通过详细分析PROJ库路径问题及GDAL依赖关系,提供动态路径设置、资源文件打包等实战技巧,帮助开发者高效解决地理数据处理中的常见错误。

weixin_29074409的博客 444

[docker]八、Dockerfile指令详解

1、详解Dockerfile制作镜像之——命令讲解 参考资料: Dockerfile reference | Docker Documentation Docker run 命令 | 菜鸟教程 当查找Dockerfile文件的时候,若是我们不在那个路径当中,我们可以使用"docker run -f /path/tp/a/Dockerfile .",使用绝对路径找到那个Dockerfile。 2、RUN和FROM指令的作用 FROM:定制的镜像都是基于 FROM 的镜像,这里的 nginx 就是定

m0_48638643的博客 7169

从零搭建IoT数据中台:STM32+WebSocket实现边缘设备与Web端实时双向通信

本文详细介绍了如何从零搭建基于STM32和WebSocket协议的IoT数据中台,实现边缘设备与Web端的实时双向通信。通过硬件选型、协议设计、服务器搭建及安全优化,提供了一套低延迟、高并发的企业级解决方案,适用于智能农业和工业监控等场景。

tea88的博客 749

如何入门强化学习

很多同学在入门强化学习的时候都会遇到困难,那我这里就简单介绍一下应该如何入门强化学习,并以开源代码为例详解强化学习实战。

seeksister的博客 3304

使用DockerFile 制作镜像以及相关的命令

当我们了解了DockerFile 的基础指令之后,我们就可以自己制作一个镜像;Docker Hub 网站上的大部分镜像都是都是从这个镜像过来的:FROM scratch,然后配置需要的软件和配置进行构建,创建一个自己的centos: ...

二哈 3142

手把手教你学Simulink——基于Simulink的CLLC谐振变换器双向对称控制

本文介绍了一种基于Simulink的CLLC谐振变换器双向对称控制方法。针对CLLC拓扑的多阶谐振特性,采用固定频率、50%占空比、仅调节相位差的对称控制策略,实现了宽电压范围调节和全负载ZVS软开关。详细阐述了Simulink建模步骤,包括功率级搭建、相位差生成逻辑和双向切换实现,并通过仿真验证了稳态性能和双向无缝切换能力。该方法解决了传统PFM控制的不足,具有控制简单、效率高、易于工程实现的优势,适用于车载充电和储能系统等双向功率应用场景。

MHD0815的博客 302

Dockerfile制作tomcat镜像

作者:yangjl 前言   Docker镜像的基础知识可参考,这章主要是对编写Dockerfile相关内容的补充。可能之前很多小伙伴们使用iserve的镜像都是从docker中拉取的supermap/iserver的镜像运行iserver。肯定很多小伙伴能都想制作自己独有的iserver镜像,今天我以制作tomcat镜像为例带着大家学习下Dockerfile编写的基本规则。 一、Dockerfile基本定义及常用命令介绍 Dockerfile是一个包含用于组合镜像的命令的文本文档。.

SuperMap技术控 1326

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

docker镜像制作的命令,docker自定义镜像

docker镜像制作的命令,docker自定义镜像

sky学linux的博客 1315

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Dockerfile

Dockerfile是一种更强大的镜像制作方式通过编写类似脚本的Dockerfile文件来制作镜像使用Dockerfile文件制作镜像首先创建编写Dockerfile文件,然后制作镜像docker build -t 镜像名称:标签 Dockerfile所在目录。

xh1615的博客 407

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

dockerfile制作镜像

2.dockerfile内容。

lemon310的博客 475

06.Docker 镜像制作和管理

Docker 镜像中有没有内核从镜像大小上面来说,一个比较小的镜像只有 1MB 多点或几 MB,而内核文件需要几十 MB, 因此镜像里 面是没有内核的,镜像在被启动为容器后将直接使用宿主机的内核,而镜像本身则只提供相应的 rootfs,即系统正常运行所必须的用户空间的文件系统,比如: /dev/,/proc,/bin,/etc 等目录,容器 当中 /boot 目录是空的,而 /boot 当中保存的就是与内核相关的文件和目录。为什么没有内核由于容器启动和运行过程中是直接使用了宿主机的内核,不会直接调用物理硬件

weixin_56408536的博客 1016

Dockerfile命令详解:打造高效容器镜像

Dockfile文件是镜像生成的一种方式。Dockerfile 是一个文本格式的配置文件,用户可以使用 Dockerfile 快速创建自定义的镜像。Dockerfile文件中的每一个命令都会创建镜像的一层。

2503_91960880的博客 1197

Docker常用命令及镜像制作方法

docker ps -aq ——列出所有容器(包括正在运行的和已停止的容器)的 容器 ID(-q只显示容器ID)docker ps -aqf "status=exited" ——列出所有状态为 已退出(exited) 的容器的 容器 ID(exited小写)docker rm -f $(docker ps -aq) ——强制删除所有容器(包括正在运行的和已停止的容器)

2402_88627342的博客 1425

docker 制作Java镜像 jar包与配置文件外置

运行此命令后,Docker 将创建并运行名为 "blog1.0" 的容器,并将主机的端口 8083 映射到容器的端口 8083。这个命令是用于在 Docker 中运行一个名为 "blog:1.0" 的容器,并指定了一些参数配置。运行此命令后,应用程序将在指定的环境("dev")下启动,并加载位于。目录存在,并且包含正确的应用程序 JAR 文件以及所需的其他文件。这样,在执行后续命令时,会在该目录下进行操作。在此部分,使用 Java 8 的路径来运行。,表示在当前工作目录下的。目录中查找配置文件。

qq_45432155的博客 1214

docker常用命令及镜像制作

一、镜像命令docker search #搜索镜像docker pull/push #下载/上传镜像 docker images #查看所有本地主机上的镜像 可以使用docker image ls代替docker tag #源镜像名 新镜像名docker rmi #删除镜像docker image prune #移除没有标签并且没有被容器引用的镜像,dangling(摇晃)镜像 示例:拉取tomcat镜像[root@docker-01 ~]# docker

dyf040508的博客 1060

docker使用dockfile 写错了 Dockerfile中ENTRYPOINT设置的命令 可以动态覆盖

 docker run的--entrypoint可以覆盖Dockerfile中ENTRYPOINT设置的命令   docker run -it -p20180:80   -p20181:8080  -p20182:8976  --entrypoint="/bin/bash" --name containerName image:tag   docker commit -a ‘songlk’...

lucky的专栏 7509

docker镜像制作:制作带有输入参数的docker镜像

docker深度学习镜像制作

qsx123432的博客 964

【Docker】Docker Compose相关

docker compose 相关

chendi8的博客 559
上一篇: UE4与WEB-UI通信
雕花の刺猬
博客等级 码龄10年 45粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值