详解 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…...
Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...
基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...
为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?
在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...
ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
DBAPI如何优雅的获取单条数据
API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...
QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...
JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案
JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停 1. 安全点(Safepoint)阻塞 现象:JVM暂停但无GC日志,日志显示No GCs detected。原因:JVM等待所有线程进入安全点(如…...
RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...
