Dockerfile语法和简单镜像构建
Dockerfile是一个用于定义Docker镜像的文本文件,包含了一系列的指令和参数,用于指示Docker在构建镜像时应该执行哪些操作,例如基于哪个基础镜像、复制哪些文件到镜像中、运行哪些命令等。
Dockerfile文件的内容主要有几个部分组成,包括基础镜像,创建者信息,镜像操作指令,容器启动指令等
创建Dockerfile文件并通过docker bulid来构建镜像,是除了从镜像仓库拉取、解压保存镜像之外的另一种自定义构建镜像的方式。构建指令:docker build -t="image-name" <文件目录> --load
Dockerfile文件指令
#FROM
FROM指定基础镜像,这个文件需要在本地有,如果没有则在docker build后增加--load参数去docker官网进行拉取
Dockerfile文件中定义的镜像就以FROM的镜像为基础,可指定tag
#MAINTAINER
是备注,用以指定创建者信息
#COPY
将同目录下的文件复制到镜像中
也可以使用—chown=参数指定权限
格式为 filename <path>
#ADD
格式同COPY
区别是移动tar文件后会自动解压
docker官方推荐使用COPY
#RUN
说明镜像构建过程中需要运行的命令,每次执行都会增加一层
有shell模式和exec模式
shell模式: 直接使用linux命令即可
exec模式:通过方括号指定参数来实现,如
RUN ["/bin/bash","-c"," yum -y install xxx"]
/bin/bash表示解释器位置 -c代表指定后面是要执行的命令
#EXPOSE
声明端口,说明这个端口是容器映射出去的端口 可以指定多个
声明后,docker run -P会随机将宿主机端口映射到声明后的端口
#CMD
CMD在docker run命令执行时执行
有shell模式和exec模式
但会被docker run后自带的命令所覆盖
如果使用了ENTRYPOINT指令,作为其默认参数
#ENTERYPOINT
作用于CMD相同
有shell模式和exec模式
ENTERYPOINT 不会被docker run后自带的命令覆盖,如果使用了参数--entrypoint则可以覆盖
ENTERYPOINT与CMD混用:
ENTERYPOINT ["nginx","-c"]
CMD ["/nginx.conf"]
nginx是nginx的命令行工具
-c代表用xx文件执行该命令
/nginx.conf基于根目录下的nginx.conf运行,即该文件是默认文件
如果docker run指定了命令,就会覆盖掉CMD指定的文件,转而使用docker run指定的文件
#VOLUME
指定容器内的默认挂载点,使用后会默认把宿主机/var/lib/docker/volumes中挂载到容器中的挂载点,在docker run时可以通过-v手动指定宿主机挂载点
1.持久化存储,避免因为重启导致数据丢失
2.可以通过-v来更好管理存储,容器端固定而宿主机端不固定
#WORKDIR
指定命令的工作目录,需要提前创建好
#ENV
指定环境变量
格式为ENV key=value
例如ENV VERSION= 1.0,就可以使用$VERSION来引用
#USER
用以指定执行命令的用户和用户组
#ONBUILD
延迟执行创建的命令,在某次构建镜像时不会执行,但下次如果有新的dockerfile使用了本镜像进行镜像构建时,就会执行这条命令。
nginx镜像构建
mkdir wsdockerfile
#centos8已经停更了,下载软件需要另外的源,这个文件清华镜像站和centos官网都能找到
cp Centos-vault-8.5.2111.repo wsdockerfile/
cd wsdockerfile/
#删除并替换/etc/yum.repos.d/的源文件
#下载nginx并开放80端口
#用ENTRYPOINT使docker启动时自动启动nginx
cat > dockerfile << EOF
FROM centos
MAINTAINER ws
RUN rm -rf /etc/yum.repos.d/*
COPY Centos-vault-8.5.2111.repo /etc/yum.repos.d/
RUN yum install -y nginx
COPY index.html /usr/share/nginx/html/
EXPOSE 80
ENTRYPOINT ["/usr/sbin/nginx","-g","daemon off;"]
EOFecho 123 > index.htmldocker build -t="ws/nginx:v1" . #开始构建
#[+] Building 130.1s (10/10) FINISHED docker:default
# => [internal] load build definition from dockerfile 0.0s
# => => transferring dockerfile: 270B 0.0s
# => [internal] load .dockerignore 0.0s
# => => transferring context: 2B 0.0s
# => [internal] load metadata for docker.io/library/centos:latest 0.0s
# => [1/5] FROM docker.io/library/centos 0.0s
# => [internal] load build context 0.0s
# => => transferring context: 77B 0.0s
# => CACHED [2/5] RUN rm -rf /etc/yum.repos.d/* 0.0s
# => CACHED [3/5] COPY Centos-vault-8.5.2111.repo /etc/yum.repos.d/ 0.0s
# => [4/5] RUN yum install -y nginx 129.6s
# => [5/5] COPY index.html /usr/share/nginx/html/ 0.0s
# => exporting to image 0.4s
# => => exporting layers 0.4s
# => => writing image sha256:075aaa08f6799ed252578b0c82645e41c61a818584e6e183053a6ce 0.0s
# => => naming to docker.io/ws/nginx:v1 0.0s
docker images | grep ws/nginx
#ws/nginx v1 075aaa08f679 51 seconds ago 342MB
docker run -d -p 80 --name wshttp ws/nginx:v1
#1f57b4d4b5a8d73fa5488b792099c08fe15cb1bbfdc71d166c1430f5be9e15d4
docker ps
#CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
#1f57b4d4b5a8 ws/nginx:v1 "/usr/sbin/nginx -g …" 19 seconds ago Up 18 seconds 0.0.0.0:32768->80/tcp, :::32768->80/tcp wshttp

tomcat8镜像构建
tomcat版本tomcat-8.5.97 官网能下载到 jdk版本jdk-8u45
mkdir wsdockerfile2
cp jdk-8u45-linux-x64.rpm apache-tomcat-8.5.97.tar.gz Centos-vault-8.5.2111.repo wsdockerfile2
cd wsdockerfile2
#ADD传送jdk包和tomcat包并解压
#rpm包安装jdk-8u45
#ENTRYPOINT安装tomcat,开始后查看日志
echo "
FROM centos
MAINTAINER ws
RUN rm -rf /etc/yum.repos.d/*
COPY Centos-vault-8.5.2111.repo /etc/yum.repos.d/
ADD jdk-8u45-linux-x64.rpm /usr/local/ #\\
ADD apache-tomcat-8.5.97.tar.gz /usr/local/
RUN cd /usr/local && rpm -ivh jdk-8u45-linux-x64.rpm
RUN mv /usr/local/apache-tomcat-8.5.97 /usr/local/tomcat8
ENTRYPOINT /usr/local/tomcat8/bin/startup.sh && tail -F /usr/local/tomcat8/logs/catalina.out
EXPOSE 8080
" > dockerfiledocker build -t="tomcat8" . --load
#

相关文章:
Dockerfile语法和简单镜像构建
Dockerfile是一个用于定义Docker镜像的文本文件,包含了一系列的指令和参数,用于指示Docker在构建镜像时应该执行哪些操作,例如基于哪个基础镜像、复制哪些文件到镜像中、运行哪些命令等。 Dockerfile文件的内容主要有几个部分组成,…...
uniapp使用wxml-to-canvas开发小程序保存canvas图片
微信小程序官方解决方案:wxml-to-canvas 使用wxml-to-canvas要知道一些前提条件 1、只能画view,text,image 2、每个元素必须要设置宽高 3、默认是flex布局,可以通过flexDirection: "column"来改变排列方式 4、文字 必…...
关于数据库切换的麻烦
背景介绍 现项目使用了两个数据源,分别为A、B,两个数据库的数据结构并不相同,数据库A是用来做查询一些基本信息的,数据库B是用来保留业务操作数据的。后端是在mapper层用DS注解来区分哪些地方用数据库A,而哪些地方用数…...
Qt/QML编程学习之心得:Linux下读写文件File(24)
在Linux嵌入式系统中,经常会使用Qt来读写一个文件,判断一个文件是否存在,具体如何实现呢? 首先,要使用linux系统中相关的头文件: #include <unistd.h> #include <stdio.h> #include <stdlib.h> 其次,判断路径是否存在, if(!dir.exists()){mkdir(…...
【Vue2+3入门到实战】(22)VUE3之组合式API - setup、reactive和ref函数、computed、watch、生命周期函数详细讲解
目录 一、组合式API - setup选项1. setup选项的写法和执行时机2. setup中写代码的特点3. <script setup>语法糖 二、组合式API - reactive和ref函数1. reactive2. ref3. reactive 对比 ref 三、组合式API - computed四、组合式API - watch1. 侦听单个数据2. 侦听多个数据…...
如何在互联网上找到你想要的数据?
互联网时代,信息爆炸,怎么在网上查到到自己想要的信息已经变难了。毕竟经常搜索的内容前几页都是广告。 那么如何在大量的广告和垃圾信息中获取到自己想要的信息呢? 首先,明确自己的需求,比如你想找哪个方面的数据,…...
揭秘淘宝商品详情API如何助力电商创新发展
淘宝商品详情API是淘宝开放平台提供的一种数据接口服务,能够获取到淘宝网商品详情的各种信息,包括商品标题、价格、销量、评价等。通过淘宝商品详情API,开发者可以轻松地获取到这些数据,并利用这些数据进行商业分析和应用开发。 …...
vue element plus Space 间距
虽然我们拥有 Divider 组件,但很多时候我们需要不是一个被 Divider 组件 分割开的页面结构,因此我们会重复的使用很多的 Divider 组件,这在我们的开发效率上造成了一定的困扰。 间距组件就是为了解决这种困扰应运而生的。 基础用法# 最基础…...
【驱动序列】C#获取电脑硬件之CPU信息,以及它都有那些品牌
欢迎来到《小5讲堂》,大家好,我是全栈小5。 这是是《驱动序列》文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识…...
目标检测-One Stage-YOLO v3
文章目录 前言一、YOLO v3的网络结构和流程二、YOLO v3的创新点总结 前言 根据前文目标检测-One Stage-YOLOv2可以看出YOLOv2的速度和精度都有相当程度的提升,但是精度仍较低,YOLO v3基于一些先进的结构和思想对YOLO v2做了一些改进。 提示:…...
安泰ATA-4014高压功率放大器在传感器脉冲涡流检测中的应用
传感器在工程领域起着至关重要的作用,能够实时获取各种物理量的信息。而功率放大器作为传感器信号处理的重要组成部分,广泛应用于各种测量和控制系统中。本文将探讨功率放大器在这一领域的重要性和作用。 首先,了解传感器脉冲涡流检测的基本原…...
Axure全面指南:正确打开并高效使用的步骤!
AxureRP是目前流行的设计精美的用户界面和交互软件。AxureRP根据其应用领域提供了一组丰富的UI控制。作为Axure的国内替代品,即时设计可以在线协作,浏览器可以在无需下载客户端的情况下打开和使用。如果以前使用Axure,很容易切换到即时设计。…...
ts axios 指定返回值类型,返回数据类型不确定该怎么办 typescript
ts axios 指定返回值类型,返回数据类型不确定该怎么办 typescript 转到 ts 以来,一直有个问题困扰着我,就是每次用 axios 获取数据时,返回值 res 的类型都不能确定,这就导致编辑器一直提示我: 原因 原因是…...
判断是否是json字符串
一、在isJson.js文件里创建一个isJson类并抛出 /*** isJson 类用于判断一个字符串是否为有效的 JSON 字符串。* class isJson* param {string} str - 要判断的字符串。* returns {boolean} 如果字符串是有效的 JSON 字符串,则返回 true;否则返回 false。…...
SpringBoot集成Minio(接上文)
如果启动项目出现下面错误,把minio的版本更换为低版本的,我最初用的是8.5.7版本的出现下面错误,后面一直调低版本发现8.2.2,8.3.0都是可以的。(因为我需要用8.5.7的版本所以调了别的依赖的版本,大家可以根据…...
更新 torchtext 造成的torch版本不匹配的问题
更新 torchtext 造成的torch版本不匹配的问题 - pip 原来的版本配置 cuda11.6 torch-GPU 1.13.1 如果直接pip update torchtext 会卸载原来的torch然后默认安装CPU版本,很烦。网上的各种方法都是推荐conda.但是我一直都是pip。因此考虑pip 的解决办法。 解决办…...
flutter资源
开发者平台 腾讯云 https://cloud.tencent.com/developer/article/1902681 掘金 stackoverflow 个人博主 Magic旭 https://www.jianshu.com/u/f9b0b77d6038 J船长 https://juejin.cn/user/1820446987136903/posts 老孟 http://www.laomengit.com/flutter/widgets/Theme.html#t…...
C++经典程序
C有许多经典的程序示例,以下是其中一些简单但常见的例子,以帮助你更好地了解C语言的基本概念。 1. **Hello World程序:** cpp #include <iostream> int main() { std::cout << "Hello, World!" << std…...
Java多线程-Thread类的run方法
Java多线程-Thread类的run方法 一、背景二、研究Thread类的start()源码1、源码(比较短,贴一下)1.1 重点:start0(); 三、研究Thread类的run()源码1、源码(很关键,必须贴) 四、创建线程的2种方式1…...
java基础之Java8新特性-方法引入
目录 1.简介 2.方法引入 方法引入遵循规范 方法引入种类 1.静态方法引入 2.对象方法引入 3.实例方法引入 4.构造函数引入 1.简介 方法引用是 Java 8 中引入的另一个重要特性,它提供了一种简洁的语法来直接引用现有方法或构造函数。方法引用可以看作是 Lambd…...
探索二维非常规态型近场动力学代码
非常规态型近场动力学代码 纬度:二维; 时间积分:自适应动态松弛 or verlet-velocity; 零能抑制模式:silling method or Li pan method; 语言:MATLAB 代码注释详细,可适当在数值模拟领域,近场动力…...
2026 年智慧工地排名榜单第一|山东建安物联科技有限公司
2026 年度智慧工地综合实力榜单正式揭晓,山东建安物联科技有限公司(大建安)凭借标准引领、技术实力与标杆项目,登顶全国榜首,成为行业公认的智慧工地领军企业。公司打造的中建八局烟台崆峒胜境项目,获评国家…...
避坑指南:SpringBoot调用DeepSeek API时你可能会遇到的5个问题及解决方案
SpringBoot集成DeepSeek API的5个典型避坑指南 在将DeepSeek的对话补全能力整合到SpringBoot应用时,不少开发者会遇到一些看似简单却容易踩坑的问题。这些问题往往不会在官方文档中被特别强调,但却能让你在调试过程中耗费数小时。本文将聚焦五个最具代表…...
GB28181协议实战:WVP开源项目+ZLM流媒体服务联调配置详解
GB28181协议实战:WVP开源项目ZLM流媒体服务联调配置详解 在视频监控领域,GB28181协议作为国家标准协议,已经成为设备互联互通的重要基础。而将WVP(Web Video Platform)开源项目与ZLM(ZLMediaKit)…...
终极Modbus测试工具:OpenModScan让工业通讯调试变得前所未有的简单
终极Modbus测试工具:OpenModScan让工业通讯调试变得前所未有的简单 【免费下载链接】OpenModScan Open ModScan is a Free Modbus Master (Client) Utility 项目地址: https://gitcode.com/gh_mirrors/op/OpenModScan 在工业自动化领域,Modbus协议…...
brpc代码重构原则:保持兼容性与提升性能并重的终极指南
brpc代码重构原则:保持兼容性与提升性能并重的终极指南 【免费下载链接】brpc brpc is an Industrial-grade RPC framework using C Language, which is often used in high performance system such as Search, Storage, Machine learning, Advertisement, Recomme…...
毕业季、返修季、投稿季:SCI论文润色,到底能不能提高接收率?
“SCI论文如果先润色,再投稿,是不是更容易被接收?”这个问题,真的每年到了这个时间点都会高频出现。尤其是3月底到4月初,很多同学刚从基金申请、毕业论文、返修修改的高压节奏里缓过来,马上又进入下一轮“赶…...
大数据治理必看:数据目录的五大核心功能
大数据治理必看:数据目录的五大核心功能关键词:大数据治理、数据目录、元数据管理、数据血缘、数据协作摘要:在数据量爆炸式增长的今天,企业常面临“数据多到找不到、找到不敢用、用了怕出错”的困境。数据目录作为大数据治理的“…...
别再死记硬背了!用Vivado工具链图解FPGA底层:CLB、SLICE与LUT到底怎么连的?
用Vivado工具链图解FPGA底层:从代码到硬件的可视化之旅 当你在Vivado中编写完一段Verilog代码,点击综合按钮后,那些抽象的硬件描述究竟是如何变成FPGA芯片上实实在在的电路连接的?对于初学者来说,CLB、SLICE、LUT这些概…...
FBGA200封装揭秘:为什么长鑫这款LPDDR4X内存更适合工业级嵌入式设备?
FBGA200封装工业级LPDDR4X内存的五大实战优势 在工业自动化生产线控制柜里,一块仅有指甲盖大小的内存模块正在零下20度的环境中稳定处理着每秒上千条传感器数据;与此同时,行驶在戈壁滩的智能矿卡车载系统中,同款内存芯片正承受着持…...
