详解 Dockerfile:从入门到实践
Docker 是一个开源的应用容器引擎,它允许开发者将应用及其依赖包打包到一个可移植的容器中,然后发布到任何流行的 Linux 机器或 Windows 机器上,也可以实现虚拟化。Dockerfile 是一个文本文件,其中包含了一系列命令,用户可以调用 docker build 来创建一个镜像。本文将详细介绍 Dockerfile 的基本语法和最佳实践,并通过一个具体的示例来帮助你更好地理解 Dockerfile 的编写方法。
Dockerfile 基本语法
Dockerfile 是一个文本文件,每一行包含一个指令。Docker 在构建镜像时会逐行执行这些指令。Dockerfile 的指令非常直观,
其对应的语法可以参考官方文档:
https://docs.docker.com/engine/reference/builder/
下面是一些常用的指令:
Dockerfile 编写流程
-
选择基础镜像:
- 选择一个合适的官方基础镜像,如
node:14、python:3.8等。
- 选择一个合适的官方基础镜像,如
-
设置工作目录:
- 使用
WORKDIR指令设置应用的工作目录。
- 使用
-
复制必要的文件:
- 使用
COPY或ADD指令将应用的源代码、配置文件等复制到工作目录中。
- 使用
-
安装依赖:
- 使用
RUN指令安装应用所需的依赖。
- 使用
-
设置环境变量:
- 使用
ENV指令设置环境变量。
- 使用
-
声明端口:
- 使用
EXPOSE指令声明应用运行时需要监听的端口。
- 使用
-
指定启动命令:
- 使用
CMD或ENTRYPOINT指令指定容器启动时执行的命令。
- 使用
示例:编写一个简单的 java 应用的 Dockerfile
1.Dockerfile标准写法
# 指定基础镜像
FROM ubuntu:16.04
# 配置环境变量,JDK的安装目录、容器内时区
ENV JAVA_DIR=/usr/local
ENV TZ=Asia/Shanghai
# 拷贝jdk和java项目的包
COPY ./jdk8.tar.gz $JAVA_DIR/
COPY ./docker-demo.jar /app.jar
# 设定时区
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 安装JDK
RUN cd $JAVA_DIR \&& tar -xf ./jdk8.tar.gz \&& mv ./jdk1.8.0_144 ./java8
# 配置环境变量
ENV JAVA_HOME=$JAVA_DIR/java8
ENV PATH=$PATH:$JAVA_HOME/bin
# 指定项目监听的端口
EXPOSE 8080
# 入口,java项目的启动命令
ENTRYPOINT ["java", "-jar", "/app.jar"]
2.简化写法(就有人提供了基础的系统加JDK环境,我们在此基础上制作java镜像,就可以省去JDK的配置了)
# 基础镜像
FROM openjdk:11.0-jre-buster
# 设定时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 拷贝jar包
COPY docker-demo.jar /app.jar
# 入口
ENTRYPOINT ["java", "-jar", "/app.jar"]
ps:jdk版本下载链接:Java Downloads | Oracle 中国
希望你喜欢这篇文章!请点关注和收藏吧。你的关注和收藏会是我努力更新的动力,祝关注和收藏的帅哥美女们今年都能暴富。如果有更多问题,欢迎随时提问
相关文章:
详解 Dockerfile:从入门到实践
Docker 是一个开源的应用容器引擎,它允许开发者将应用及其依赖包打包到一个可移植的容器中,然后发布到任何流行的 Linux 机器或 Windows 机器上,也可以实现虚拟化。Dockerfile 是一个文本文件,其中包含了一系列命令,用…...
随机变量的概率分布
第 5 章——概率分布 5.2 随机变量的概率分布 【例5-1】 计算期望值、方差、标准差 【代码框5-1】 计算期望值、方差、标准差 import pandas as pd import numpy as np example5_1 = pd.read_csv(./pydata/example/chap05/example5_1.csv)# 计算期望值 mymean = sum...
Kafka生产者如何提高吞吐量?
批量发送:生产者可以配置 batch.size 参数,将多个消息打包成一个批次发送。这样可以减少网络通信的次数,提高吞吐量。inger.ms:设置 linger.ms 参数,可以让生产者在发送消息前等待一段时间,以便收集更多的消…...
mysql:解决windows启动失败无报错(或长时间未响应)
前言 遇到好多次在修改配置文件后,mysql无法启动的问题了,这里给出一个可能原因的解决方案。 由于mysql需要修改配置文件,所以我在winserver2012服务器上更改了配置文件my.ini mysql5.7配置文件默认地址:C:\ProgramData\MySQL\MyS…...
【山——回文判断】
题目 代码 #include <bits/stdc.h> using namespace std; bool check(int num) {string s to_string(num);int l 0, r s.size() - 1;while (l < r){if (l && s[l] - s[l - 1] < 0)return false;if (s[l] ! s[r--])return false;}if (l && l r…...
FPGA学习笔记#7 Vitis HLS 数组优化和函数优化
本笔记使用的Vitis HLS版本为2022.2,在windows11下运行,仿真part为xcku15p_CIV-ffva1156-2LV-e,主要根据教程:跟Xilinx SAE 学HLS系列视频讲座-高亚军进行学习 学习笔记:《FPGA学习笔记》索引 FPGA学习笔记#1 HLS简介及…...
欧几里得算法python
一、问题描述 求最大公约数 class Fraction:def __init__(self, a, b):self.a aself.b bx self.gcd(a, b)self.a / xself.b / xdef gcd(self, a, b):while b >0:r a % ba bb rreturn adef zgs(self, a, b):x self.gcd(a, b)return a / x * bdef __add__(self, other…...
【layui】echart的简单使用
图表类型切换(柱形图和折线图相互切换) <title>会员数据</title><div class"layui-card layadmin-header"><div class"layui-breadcrumb" lay-filter"breadcrumb"><a lay-href""&g…...
ios打包文件上传App Store windows工具
在苹果开发者中心上架IOS APP的时候,在苹果开发者中心不能直接上传打包文件,需要下载mac的xcode这些工具进行上传,但这些工具无法安装在windows或linux电脑上。 这里,我们可以不用xcode这些工具来上传,可以用国内的香…...
vue2项目启用tailwindcss - 开启class=“w-[190px] mr-[20px]“ - 修复tailwindcss无效的问题
效果图 步骤 停止编译"npm run dev"安装依赖 npm install -D tailwindcssnpm:tailwindcss/postcss7-compat postcss^7 autoprefixer^9 创建文件/src/assets/tailwindcss.css,写入内容: tailwind base; tailwind components; tailwind utiliti…...
mysql中数据不存在却查询到记录?
前言 首先看下面的查询语种 select * from AudioKnowledgeChatInfo where AudioId297795550566600706; 查询结果如下 看到上面的查询结果,是不是一脸懵?这audioId明显不对啊,怎么查询到了? 原因剖析 首先我们来看看数据库表…...
vue3+elementplus+虚拟树el-tree-v2+多条件筛选过滤filter-method
筛选条件 <el-inputv-model"searchForm.searchTreeValue"input"searchTreeData"style"flex: 1; margin-right: 0.0694rem"placeholder"请输入要搜索的设备"clearable/><imgclass"refresh-img"src"com_refres…...
【C#设计模式(4)——构建者模式(Builder Pattern)】
前言 C#设计模式(4)——构建者模式(Builder Pattern) 运行结果 代码 public class Computer {private string part1 "CPU";private string part2 "主板";private string part3 "内存";private string part4 "显卡";private st…...
LabVIEW实验室液压制动系统
压制动系统是许多实验设备的重要安全组件,尤其在高负荷、高速实验环境下,制动系统的性能对设备和操作人员的安全至关重要。传统的实验室液压制动系统监测方法存在数据采集实时性差、精度低、故障预警不及时等问题。为了提高实验安全性和设备运行的稳定性…...
解决:Loading class `com.mysql.jdbc.Driver‘. This is deprecated
问题:Loading class com.mysql.jdbc.Driver. This is deprecated. The new driver class is com.mysql.cj.jdbc.Driver. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary. 解决方式ÿ…...
【寻找重复数字】——脑筋急转弯...
寻找重复数字 287. 寻找重复数 题目难度 中等 相关标签与企业信息 [相关标签] [相关企业] 题目描述 给定一个包含 n 1 n 1 n1 个整数的数组 nums,其数字都在 [ 1 , n ] [1, n] [1,n] 范围内(包括 1 1 1 和 n n n),可…...
AI基础知识
目录 1.激活函数:one: 激活函数的作用:two: sigmoid函数:three: tanh函数:four: ReLu:five: Leaky ReLU 2.Softmax函数3.优化器:one: 优化器的作用:two: BGD(批梯度下降):three: SGD(随机梯度下降):four: MBGD(Mini Ba…...
ubuntu 22.04 硬件配置 查看 显卡
ubuntu 22.04 硬件配置 查看 显卡 1. 参考文档 ubuntu 安装 nvidia 驱动 https://blog.51cto.com/u_13628828/7056095 input: HDA NVidia HDMI/DP,pcm3 as /devices/pci0000:00/0000:00:01.0/0000:01:00.1/sound/card1/input11 input: HDA NVidia HDMI/DP,pcm7 as /devices/…...
【计算机网络】网络框架
一、网络协议和分层 1.理解协议 什么是协议?实际上就是约定。如果用计算机语言进行表达,那就是计算机协议。 2.理解分层 分层是软件设计方面的优势(低耦合);每一层都要解决特定的问题 TCP/IP四层模型和OSI七层模型…...
linux nvidia/cuda安装
1.查看显卡型号 lspci |grep -i vga2.nvidia安装 2.1在线安装 终端输入(当显卡插上之后,系统会有推荐的安装版本) ubuntu-drivers devices可得到如下内容 vendor : NVIDIA Corporation model : TU104GL [Tesla T4] driver : nvid…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...
Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的
修改bug思路: 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑:async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...
无人机侦测与反制技术的进展与应用
国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机(无人驾驶飞行器,UAV)技术的快速发展,其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统,无人机的“黑飞”&…...
第7篇:中间件全链路监控与 SQL 性能分析实践
7.1 章节导读 在构建数据库中间件的过程中,可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中,必须做到: 🔍 追踪每一条 SQL 的生命周期(从入口到数据库执行)&#…...
