Dockerfile制作相关命令

一、常用命令

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 bashcd /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" ]; thenJAR_NAME="$latest_jar"echo "find jar: $JAR_NAME"
elseecho "jar not found !!!"return;
fijava -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;"]

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

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

相关文章

【计算机视觉】边缘检测

图像的边缘简单来说就是图像中灰度不连续的地方。 1.图像梯度 图像梯度是指图像像素灰度值在某个方向上的变化&#xff1b;图像梯度是图像的一阶导数&#xff0c;实际计算时可以使用差分来近似。 1.1 什么是图像梯度&#xff1f; 图像梯度是一种数学工具&#xff0c;用于描…

@JsonNaming实现入参接口参数下划线驼峰自动转换

JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class) 是用于 Jackson 库中的一个注解&#xff0c;作用是改变 Java 对象的字段命名策略&#xff0c;特别是在序列化和反序列化时。这可以帮助 Java 对象中的字段名从驼峰命名法&#xff08;CamelCase&#xff09;转换为蛇…

Microsemi Libero SoC免费许可证申请指南(Microchip官网2024最新方法)

点击如下链接&#xff1a; https://www.microchip.com/en-us/products/fpgas-and-plds/fpga-and-soc-design-tools/fpga/licensing 点击右侧&#xff0c;请求免费的License 如果提示登录&#xff0c;请先登录Microchip账号。 点击Request Free License。 选项一年免费的Li…

docker容器内部启动jupyter notebook但是宿主机无法访问的解决方法

目录 1.问题2.解决方法 1.问题 在docker容器内启动了jupyter notebook&#xff0c;在宿主机内用如下的url无法访问 http://localhost:8888 http://127.0.0.1:8888 启动方法&#xff1a; jupyter notebook 2.解决方法 启动方法加上选项[ --ip‘*’]或者[–ip‘0.0.0.0’] 即启…

[C++]类的继承

一、什么是继承 1.定义&#xff1a; 在 C 中&#xff0c;继承是一种机制&#xff0c;允许一个类&#xff08;派生类&#xff09;继承另一个类&#xff08;基类&#xff09;的成员&#xff08;数据和函数&#xff09;。继承使得派生类能够直接访问基类的公有和保护成员&#xf…

vue前端获取电脑本机的mac和ip地址

vue 前端 使用 node 里的 os 模块,来获取主机mac和IP地址 需要注意的是这篇教程只能获取本地的&#xff0c;打包到服务器上也是服务器的。需要获取不同使用者的客户端mac&#xff0c;看我这篇。获取客户端不同的mac地址 一、根目录创建 getNetworkInfo.js 脚本文件 const os …

harbor镜像仓库搭建

Harbor简介 Harbor的发展背景和现状 Harbor项目起始于2014年左右,当时正值容器技术和微服务架构迅速崛起的时期。随着越来越多的企业开始采用容器化部署应用,对于私有镜像管理的需求也日益增长。传统的解决方案要么缺乏必要的企业级特性(如访问控制、安全性和可扩展性),…

01-51单片机硬件基础

开发板介绍 学校授课用的是普中科技的EM3.V2.2开发板&#xff0c;没什么好说的&#xff0c;记着去淘宝上找原理图&#xff0c;别迷信课本。 网上有卖51最小系统板的&#xff0c;比开发板便宜&#xff0c;也有下载模块&#xff0c;可以自己搭建外围电路。 还可以自己在protue…

方法引用和lambda表达式的奥妙

方法引用替代Lambda表达式 什么情况可以使用方法引用替代lambda表达式&#xff1f; 下面代码中两处使用了lambda表达式&#xff0c;一个是filter内&#xff0c;一个是forEach内。其中&#xff0c;forEach内的lambda表达式可以被方法引用替代&#xff0c;但是filter内的lambda…

Android通过okhttp下载文件(本文案例 下载mp4到本地,并更新到相册)

使用步骤分为两步 第一步导入 okhttp3 依赖 第二步调用本文提供的 utils 第一步这里不做说明了&#xff0c;直接提供第二步复制即用 DownloadUtil 中 download 为下载文件 参数说明 这里主要看你把 destFileName 下载文件名称定义为什么后缀&#xff0c;比如我定义为 .mp4 下…

What is load balancing? 什么是负载均衡?

原文链接 What Is Load Balancing? | IBM 什么是负载均衡&#xff1f; 在多台服务器之间高效的分配网络流量的过程&#xff0c;以优化应用程序的可用性&#xff0c;同时确保积极的用户体验。 电商网站依赖负载均衡&#xff08;load balancing&#xff09;来确保web应用能够无…

dex2oat 提升启动速度

用途 build阶段可以将apk中dex生成oat文件&#xff08;odex&#xff09;&#xff0c;dex2oat 源码目录/system/bin/dex2oat 4种编译模式&#xff1a; verify&#xff1a;只运行 DEX 代码验证quicken&#xff1a;运行 DEX 代码验证&#xff0c;并优化一些 DEX 指令&#xff0c…

JavaScript 原型对象与原型链的魔法与艺术

在JavaScript的世界里&#xff0c;原型对象和原型链是两个非常重要的概念。它们不仅帮助我们理解对象的创建过程&#xff0c;还为我们提供了一种高效的方式来管理共享的属性和方法。本文将深入探讨JavaScript中的原型对象和原型链&#xff0c;包括它们的定义、工作原理以及在实…

力扣题目 - 3264.K 次乘运算后的最终数组I

题目 还需要你前往力扣官网查看详细的题目要求 地址 1.给你一个整数数组 nums &#xff0c;一个整数 k 和一个整数 multiplier 。2.你需要对 nums 执行 k 次操作&#xff0c;每次操作中&#xff1a;找到 nums 中的 最小 值 x &#xff0c;如果存在多个最小值&#xff0c;选择最…

黑马商城微服务复习(6)

MQ高级 1. 消息可靠性2. 发送者的可靠性1. 发送者问题2. 生产者重试机制3. 生产者确认机制4. MQ可靠性5. 消费者的可靠性 3. 延迟消息1. 定义2. 死信交换机 1. 消息可靠性 发送消息时丢失&#xff1a; 生产者发送消息时连接MQ失败生产者发送消息到达MQ后未找到Exchange生产者发…

内网是如何访问到互联网的(华为源NAT)

私网地址如何能够访问到公网的&#xff1f; 在上一篇中&#xff0c;我们用任意一个内网的终端都能访问到百度的服务器&#xff0c;但是这是我们在互联网设备上面做了回程路由才实现的&#xff0c;在实际中&#xff0c;之前也说过运营商是不会写任何路由过来的&#xff0c;那对于…

oracle归档模式下的快速热备方法-适合小库

在我们的一些小型的oracle生产库中&#xff0c;有些时候我们可以在不停库且不使用rman的情况下实现数据库的热备。该热备的原理是通过控制数据文件块头的scn号在备份时候不变化&#xff0c;进而保证备份的数据文件数据一致性。 一、环境 数据库版本&#xff1a; 数据库需要开启…

rabbitMq举例

新来个技术总监&#xff0c;把 RabbitMQ 讲的那叫一个透彻&#xff0c;佩服&#xff01; 生产者 代码举例 public String sendMsg(final String exchangeName,final String routingKey,final String msg) {} /*** 发送消息* param exchangeName exchangeName* param routin…

2024年12月13日Github流行趋势

项目名称&#xff1a;nexus-xyz / nexus-zkvm 项目维护者&#xff1a;govereau slumber danielmarinq sjudson yoichi-nexus项目介绍&#xff1a;Nexus zkVM 是一个零知识虚拟机。项目star数&#xff1a;1,948项目fork数&#xff1a;343 项目名称&#xff1a;soxoj / maigret …

(九)机器学习 - 多项式回归

多项式回归&#xff08;Polynomial Regression&#xff09;是一种回归分析方法&#xff0c;它将自变量 xx 和因变量 yy 之间的关系建模为 nn 次多项式。多项式回归的目的是找到一个 nn 次多项式函数&#xff0c;使得这个函数能够最好地拟合给定的数据点。 多项式回归的数学表达…