Docker之DockerFile解析

DockerFile解析

是什么
·Dockerfile是用来构建Docker镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本。
概述
在这里插入图片描述

官网
https://docs.docker.com/engine/reference/builder/
构建三步骤
编写Dockerfile文件
docker build命令构建镜像
docker run依镜像运行容器实例
DockerFile构建过程解析
Dockerfile内容基础知识
1:每条保留字指令都必须为大写字母且后面要跟随至少一个参数
2:指令按照从上到下,顺序执行
3:#表示注释
4:每条指令都会创建一个新的镜像层并对镜像进行提交
Docker执行Dockerfile的大致流程
(1)docker从基础镜像运行一个容器
(2)执行一条指令并对容器作出修改
(3)执行类似docker commit的操作提交一个新的镜像层
(4)docker再基于刚提交的镜像运行一个新容器
(5)执行dockerfile中的下一条指令直到所有指令都执行完成
小总结

从应用软件的角度来看,Dockerfile、Docker镜像与Docker容器分别代表软件的三个不同阶段,

  • Dockerfile是软件的原材料
  • Docker镜像是软件的交付品
  • Docker容器则可以认为是软件镜像的运行态,也即依照镜像运行的容器实例
    Dockerfile面向开发,Docker镜像成为交付标准,Docker容器则涉及部署与运维,三者缺一不可,合力充当Docker体系的基石。
    在这里插入图片描述

1 Dockerfile,需要定义一个Dockerfile,Dockerfile定义了进程需要的一切东西。Dockerfile涉及的内容包括执行代码或者是文件、环境变量、依赖包、运行时环境、动态链接库、操作系统的发行版、服务进程和内核进程(当应用进程需要和系统服务和内核进程打交道,这时需要考虑如何设计namespace的权限控制)等等;

2 Docker镜像,在用Dockerfile定义一个文件之后,docker build时会产生一个Docker镜像,当运行 Docker镜像时会真正开始提供服务;

3 Docker容器,容器是直接提供服务的。

DockerFile常用保留字指令
参考tomcat8的dockerfile入门
https://github.com/docker-library/tomcat
FROM
基础镜像,当前新镜像是基于哪个镜像的,指定一个已经存在的镜像作为模板,第一条必须是from
MAINTAINER
镜像维护者的姓名和邮箱地址
RUN
容器构建时需要运行的命令
两种格式
shell格式

在这里插入图片描述

RUN yum -y install vim
exec格式

在这里插入图片描述

RUN是在 docker build时运行
EXPOSE
当前容器对外暴露出的端口
WORKDIR
指定在创建容器后,终端默认登陆的进来工作目录,一个落脚点
USER
·指定该镜像以什么样的用户去执行,如果都不指定,默认是root
ENV
用来在构建镜像过程中设置环境变量

ENV MY_PATH /usr/mytest
这个环境变量可以在后续的任何RUN指令中使用,这就如同在命令前面指定了环境变量前缀一样;
也可以在其它指令中直接使用这些环境变量,

比如:WORKDIR $MY_PATH
ADD
将宿主机目录下的文件拷贝进镜像且会自动处理URL和解压tar压缩包
COPY
类似ADD,拷贝文件和目录到镜像中。 将从构建上下文目录中 <源路径> 的文件/目录复制到新的一层的镜像内的 <目标路径> 位置
COPY src dest
COPY [“src”, “dest”]
<src源路径>:源文件或者源目录
<dest目标路径>:容器内的指定路径,该路径不用事先建好,路径不存在的话,会自动创建。
VOLUME
容器数据卷,用于数据保存和持久化工作
CMD
指定容器启动后的要干的事情

在这里插入图片描述
注意
Dockerfile 中可以有多个 CMD 指令,但只有最后一个生效,CMD 会被 docker run 之后的参数替换
参考官网Tomcat的dockerfile演示讲解
官网最后一行命令
在这里插入图片描述

我们演示自己的覆盖操作
在这里插入图片描述

它和前面RUN命令的区别
CMD是在docker run 时运行。
RUN是在 docker build时运行。
ENTRYPOINT
也是用来指定一个容器启动时要运行的命令
类似于 CMD 指令,但是ENTRYPOINT不会被docker run后面的命令覆盖, 而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序
命令格式和案例说明

命令格式:
在这里插入图片描述

ENTRYPOINT可以和CMD一起用,一般是变参才会使用 CMD ,这里的 CMD 等于是在给 ENTRYPOINT 传参。
当指定了ENTRYPOINT后,CMD的含义就发生了变化,不再是直接运行其命令而是将CMD的内容作为参数传递给ENTRYPOINT指令,他两个组合会变成

在这里插入图片描述

案例如下:假设已通过 Dockerfile 构建了 nginx:test 镜像:
在这里插入图片描述

是否传参 按照dockerfile编写执行 传参运行
Docker命令 docker run nginx:test docker run nginx:test -c /etc/nginx/new.conf
衍生出的实际命令 nginx -c /etc/nginx/nginx.conf nginx -c /etc/nginx/new.conf

优点
在执行docker run的时候可以指定 ENTRYPOINT 运行所需的参数。
注意
如果 Dockerfile 中如果存在多个 ENTRYPOINT 指令,仅最后一个生效。
小总结
在这里插入图片描述

案例
自定义镜像mycentosjava8
·要求
·Centos7镜像具备vim+ifconfig+jdk8
·JDK的下载镜像地址
·官网

下载地址:
https://www.oracle.com/java/technologies/downloads/#java8
在这里插入图片描述

https://mirrors.yangxingzhen.com/jdk/
编写
准备编写Dockerfile文件

在这里插入图片描述

FROM centos
MAINTAINER xxx<xxx.com>
 
ENV MYPATH /usr/local
WORKDIR $MYPATH
 
#安装vim编辑器
RUN yum -y install vim
#安装ifconfig命令查看网络IP
RUN yum -y install net-tools
#安装java8及lib库
RUN yum -y install glibc.i686
RUN mkdir /usr/local/java
#ADD 是相对路径jar,把jdk-8u171-linux-x64.tar.gz添加到容器中,安装包必须要和Dockerfile文件在同一位置
ADD jdk-8u171-linux-x64.tar.gz /usr/local/java/
#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_171
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH
 
EXPOSE 80
 
CMD echo $MYPATH
CMD echo "success--------------ok"
CMD /bin/bash

大写字母D
构建
docker build -t 新镜像名字:TAG .

docker build -t centosjava8:1.5 .

在这里插入图片描述
在这里插入图片描述

·注意,上面TAG后面有个空格,有个点
运行
docker run -it 新镜像名字:TAG

 docker run -it centosjava8:1.5 /bin/bash

![在这里插入图片描述](https://img-blog.csdnimg.cn/47da46154a0d479c8c90675e507bbc1c.png

UnionFS(联合文件系统)
UnionFS(联合文件系统):Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem)。Union 文件系统是 Docker 镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。

特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录

笔记来源:Docker

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

李沐的学习Pytorch环境配置

https://github.com/Miraclelucy/dive_into_deep_learning/tree/main 上面是别人的笔记 可以学一下。 如果没有梯子&#xff0c;按照清华源配置 清华源conda配置 最好下载 1.11版本torch那一套 然后装d2l版本可以装 pip install d2l0.17.6然后可以用 http://localhost:8889/…

DolphinScheduler V3.1.8 海豚调度器【概述、安装、功能介绍、项目运用、邮箱预警设置】轻松拿捏!

概述 Apache DolphinScheduler 是一个分布式易扩展的可视化 DAG 工作流任务调度开源系统。适用于企业级场景&#xff0c;提供了一个可视化操作任务、工作流和全生命周期数据处理过程的解决方案。 Apache DolphinScheduler 旨在解决复杂的大数据任务依赖关系&#xff0c;并为应…

Diffusion Models CLIP

Introduction to Diffusion Models 生成模型 主要指的是无监督学习中的生成模型&#xff0c;在无监督学习中的主要任务是让机器学习给定的样本&#xff0c;然后生成一些新的东西出来。比如&#xff1a;给机器看一些图片&#xff0c;能够生成一些新的图片出来&#xff0c;给机器…

.locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复

导言&#xff1a; 随着科技的不断发展&#xff0c;网络空间的威胁也日益增加。其中&#xff0c;.locked勒索病毒作为一种恶意软件&#xff0c;给用户的数据安全带来了极大的威胁。本文91数据恢复将介绍.locked勒索病毒的特点&#xff0c;以及如何有效恢复被它加密的数据文件&a…

Java入门篇 之 多态

本篇碎碎念&#xff1a;个人认为&#xff0c;一切都不是不学习的理由&#xff0c;在如今这个"内卷"的时代&#xff0c;唯有认真学习&#xff0c;掌握知识&#xff0c;才能把握命运 今日份励志文案:你必须拼尽全力&#xff0c;才有资格说运气不好 加油吧&#xff0c;少…

Elasticsearch基础条件查询

条件查询 query&#xff1a;查询 match&#xff1a;匹配 match_all&#xff1a;匹配所有 #第一种 GET /shopping/_search?q名字:张三#第二种 GET /shopping/_search {"query": {"match": {"名字": "张三"}} }#全量查询 match_all G…

MIB 6.1810实验Xv6 and Unix utilities(5)find

难度:moderate Write a simple version of the UNIX find program for xv6: find all the files in a directory tree with a specific name. Your solution should be in the file user/find.c. 题目要求&#xff1a;实现find &#xff0c;即在某个路径中&#xff0c;找出某…

Seaborn 回归(Regression)及矩阵(Matrix)绘图

Seaborn中的回归包括回归拟合曲线图以及回归误差图。Matrix图主要是热度图。 1. 回归及矩阵绘图API概述 seaborn中“回归”绘图函数共3个&#xff1a; lmplot&#xff08;回归统计绘图&#xff09;&#xff1a;figure级regplot函数&#xff0c;绘图同regplot完全相同。(lm指lin…

动态sql行转列

动态sql行转列 介绍案例转之前转之后 注意 介绍 本篇介绍 根据 时间格式化后行转列的案例讲解动态sql案例的初学 案例 --设置一个动态变量 赋予初始值 SET sql NULL;--获取规范化后需要用到的行头列表 SELECT GROUP_CONCAT(CONCAT(--注意1MAX(IF(date ", date, "…

Prometheus+Grafana环境搭建(window)

PrometheusGrafana环境搭建 1&#xff1a;配置Prometheus 1.1: 下载Prometheus安装包 官方下载地址 找到对应的win版本进行下载并解压 1.2 下载Window数据采集 官方下载地址 下载以管理员运行&#xff0c;安装成功后在服务里会出现一个"windows_exporter"采集…

数据库Communications link failure

1.出现错误查询 Error querying , Communications link failure #Error querying database.Cause:com.mysql.cj.jdbc.exceptions.CommunicationsException:Communications link failure The last packet successfully received from the server was 10,016 milliseconds ago. …

LangChain 实现给动物取名字

mkdir langchain-llm-appcd langchain-llm-app # 用vscode 打开当前目录 code .在macOS上通过终端打开Visual Studio Code&#xff08;VS Code&#xff09;&#xff0c;您可以按照以下步骤操作&#xff1a; 安装VS Code&#xff1a;首先&#xff0c;确保您已经在Mac上安装了Vis…

vulnhub靶场—matrix-breakout-2-morpheus靶机

一&#xff0c;实验环境 靶机ip&#xff1a;192.168.150.131攻击机ip&#xff1a;192.168.150.130 二&#xff0c;信息收集 arp-scan -l 扫描网段&#xff0c;寻找靶机ip 使用工具nmap进行端口扫描 nmap -A -T4 -p- 192.168.150.131 通过信息收集发现了靶机有80和81这两个…

23111709[含文档+PPT+源码等]计算机毕业设计基于Spring Boot智能无人仓库管理-进销存储

文章目录 **软件开发环境及开发工具&#xff1a;****功能介绍&#xff1a;****论文截图&#xff1a;****数据库&#xff1a;****实现&#xff1a;****代码片段&#xff1a;** 编程技术交流、源码分享、模板分享、网课教程 &#x1f427;裙&#xff1a;776871563 软件开发环境及…

主播职业发展指南

一、明确职业目标 1.确定长期目标:主播是一项充满挑战和机遇的工作&#xff0c;需要明确自己的长期职业目标。长期目标可以是成为一名知名的直播平台主播、成为一名电视节目主持人、成为一名网络红人等。2.制定短期目标:为了实现长期目标&#xff0c;需要制定短期目标。短期目…

基于协作mimo系统的RM编译码误码率matlab仿真,对比硬判决译码和软判决译码

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ..................................................................... while(Err < TL…

Flat Ads将在杭州举办社交出海沙龙,探寻海外巨大增量空间

深圳站落幕后&#xff0c;Flat Ads社交沙龙活动迎来杭州站&#xff01;11月29日&#xff0c;Flat Ads联动Alibaba Cloud、TopOn、融云&#xff0c;开展《泛娱乐社交APP出海新风口-杭州站》&#xff0c;分享如何捕捉出海新赛道的风向标&#xff0c;并迅速实现获客增长&#xff0…

Unity——URP相机详解

2021版本URP项目下的相机&#xff0c;一般新建一个相机有如下组件 1:Render Type(渲染类型) 有Base和Overlay两种选项&#xff0c;默认是Base选项 Base:主相机使用该种渲染方式&#xff0c;负责渲染场景中的主要图形元素 Overlay&#xff08;叠加&#xff09;:使用了Oveylay的…

转变关键财务流程,实现企业数字化升级

随着世界经济环境的不断发展和变化&#xff0c;企业的运营状态也需要进行及时的优化和升级&#xff0c;从不太理想的执行状态朝着理想的价值创造状态转变。实际上&#xff0c;许多企业在财务职能方面都没有实现现代化的成熟效果&#xff0c;这意味着它们的财务规划周期更长&…

vmware17 虚拟机拷贝、备份、复制使用

可以在虚拟机运行的情况下进行拷贝 查看新安装的虚拟机位置 跳转到上一级目录 复制虚拟机 复制虚拟机整个目录 删除lck文件&#xff0c;不然开机的时候会报错 用vmware 打开新复制的虚拟机 lck文件全部删除 点击开机 开机成功