docker的三种镜像创建

news2024/11/18 10:21:48

目录

dock的三种镜像创建

基于现有的镜像创建

基于本地模板创建

基于Dockerfile 创建

联合文件系统

镜像加载原理

为什么Docker里的centos的大小才200M?

Docker 镜像结构的分层

Dockerfile 操作常用的指令

Dockerfile格式

dockerfile构建apache实例


dock的三种镜像创建

创建镜像有三种方法,分别为基于已有镜像创建、基于本地模板创建以及基于Dockerfile创建。

基于现有的镜像创建

首先创建一个镜像,在容器里做修改

docker create -it centos:7 /bin/bash

然后将修改后的容器提交为新的镜像,需要使用该容器的 ID 号创建新镜像

docker commit -m "new" -a "centos" bbd9376525ca centos:test

常用选项:
-m 说明信息;
-a 作者信息;
-p 生成过程中停止容器的运行。

基于本地模板创建

通过导入操作系统模板文件可以生成镜像,模板可以从 OPENVZ 开源项目下载,下载地址为http://openvz.org/Download/template/precreated

wget http://download.openvz.org/template/precreated/debian-7.0-x86-minimal.tar.gz

#导入为镜像
cat debian-7.0-x86-minimal.tar.gz | docker import - debian:test

基于Dockerfile 创建

联合文件系统

UnionFS(联合文件系统):Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下。AUFS、OverlayFS 及 Devicemapper 都是一种 UnionFS。

Union文件系统是Docker镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。

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

下载的时候看到的一层层的就是联合文件系统。

镜像加载原理

Docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统就是UnionFS。

bootfs主要包含bootloader和kernel,bootloader主要是引导加载kernel,Linux刚启动时会加载bootfs文件系统。

在Docker镜像的最底层是bootfs,这一层与我们典型的Linux/Unix系统是一样的,包含boot加载器和内核。当boot加载完成之后整个内核就都在内存中了,此时内存的使用权已由bootfs转交给内核,此时系统也会卸载bootfs。

我们可以理解成一开始内核里什么都没有,操作一个命令下载debian,这时就会在内核上面加了一层基础镜像;再安装一个emacs,会在基础镜像上叠加一层image;接着再安装一个apache,又会在images上面再叠加一层image。最后它们看起来就像一个文件系统即容器的rootfs。在Docker的体系里把这些rootfs叫做Docker的镜像。但是,此时的每一层rootfs都是read-only的,我们此时还不能对其进行操作。当我们创建一个容器,也就是将Docker镜像进行实例化,系统会在一层或是多层read-only的rootfs之上分配一层空的read-write的rootfs。

为什么Docker里的centos的大小才200M?

因为对于精简的OS,rootfs可以很小,只需要包含最基本的命令、工具和程序库就可以了,因为底层直接用宿主机的kernel,自己只需要提供rootfs就可以了。由此可见对于不同的linux发行版,bootfs基本是一致的,rootfs会有差别,因此不同的发行版可以公用bootfs。

Docker 镜像结构的分层

镜像不是一个单一的文件,而是有多层构成。容器其实是在镜像的最上面加了一层读写层,在运行容器里做的任何文件改动,都会写到这个读写层。如果删除了容器,也就删除了其最上面的读写层,文件改动也就丢失了。Docker使用存储驱动管理镜像每层内容及可读写层的容器层。

(1)Dockerfile 中的每个指令都会创建一个新的镜像层;

(2)镜像层将被缓存和复用;

(3)当Dockerfile 的指令修改了,复制的文件变化了,或者构建镜像时指定的变量不同了,对应的镜像层缓存就会失效;

(4)某一层的镜像缓存失效,它之后的镜像层缓存都会失效;

(5)镜像层是不可变的,如果在某一层中添加一个文件,然后在下一层中删除它,则镜像中依然会包含该文件,只是这个文件在 Docker 容器中不可见了。

Dockerfile 操作常用的指令

(1)FROM 镜像

指定新镜像所基于的基础镜像,第一条指令必须为FROM 指令,每创建一个镜像就需要一条 FROM 指令

(2)MAINTAINER 名字

说明新镜像的维护人信息

(3)RUN 命令

在所基于的镜像上执行命令,并提交到新的镜像中

(4)ENTRYPOINT

["要运行的程序", "参数 1", "参数 2"]

设定容器启动时第一个运行的命令及其参数。

可以通过使用命令docker run --entrypoint 来覆盖镜像中的ENTRYPOINT指令的内容。

(5)CMD

["要运行的程序", "参数1", "参数2"] 

上面的是exec形式,shell形式:CMD 命令 参数1 参数2

启动容器时默认执行的命令或者脚本,Dockerfile只能有一条CMD命令。如果指定多条命令,只执行最后一条命令。

如果在docker run时指定了命令或者镜像中有ENTRYPOINT,那么CMD就会被覆盖。

CMD 可以为 ENTRYPOINT 指令提供默认参数。

(6)EXPOSE 端口号

指定新镜像加载到 Docker 时要开启的端口

(7)ENV

环境变量 变量值

设置一个环境变量的值,会被后面的 RUN 使用
 

(8)ADD 源文件/目录 目标文件/目录

将源文件复制到镜像中,源文件要与 Dockerfile 位于相同目录中,或者是一个 URL  
有如下注意事项:

①如果源路径是个文件,且目标路径是以 / 结尾, 则docker会把目标路径当作一个目录,会把源文件拷贝到该目录下。

如果目标路径不存在,则会自动创建目标路径。

②如果源路径是个文件,且目标路径是不以 / 结尾,则docker会把目标路径当作一个文件。

如果目标路径不存在,会以目标路径为名创建一个文件,内容同源文件;

如果目标文件是个存在的文件,会用源文件覆盖它,当然只是内容覆盖,文件名还是目标文件名。

如果目标文件实际是个存在的目录,则会源文件拷贝到该目录下。 注意,这种情况下,最好显示的以 / 结尾,以避免混淆。

③如果源路径是个目录,且目标路径不存在,则docker会自动以目标路径创建一个目录,把源路径目录下的文件拷贝进来。

如果目标路径是个已经存在的目录,则docker会把源路径目录下的文件拷贝到该目录下。

④如果源文件是个归档文件(压缩文件),则docker会自动帮解压。    

URL下载和解压特性不能一起使用。任何压缩文件通过URL拷贝,都不会自动解压。

(9)COPY 源文件/目录 目标文件/目录

只复制本地主机上的文件/目录复制到目标地点,源文件/目录要与Dockerfile 在相同的目录中

(10)VOLUME [“目录”] 

在容器中创建一个挂载点

(11)USER 用户名/UID

指定运行容器时的用户

(12)WORKDIR 路径

为后续的 RUN、CMD、ENTRYPOINT 指定工作目录

(13)ONBUILD 命令

指定所生成的镜像作为一个基础镜像时所要运行的命令。

当在一个Dockerfile文件中加上ONBUILD指令,该指令对利用该Dockerfile构建镜像(比如为A镜像)不会产生实质性影响。

但是当编写一个新的Dockerfile文件来基于A镜像构建一个镜像(比如为B镜像)时,这时构造A镜像的Dockerfile文件中的ONBUILD指令就生效了,在构建B镜像的过程中,首先会执行ONBUILD指令指定的指令,然后才会执行其它指令

(14)HEALTHCHECK

健康检查

Dockerfile格式

●第一行必须使用 FROM 指令指明所基于的镜像名称;

●之后使用 MAINTAINER 指令说明维护该镜像的用户信息;

●然后是镜像操作相关指令,如 RUN 指令。每运行一条指令,都会给基础镜像添加新的一层。

●最后使用 CMD 指令指定启动容器时要运行的命令操作。

dockerfile构建apache实例

#建立工作目录
mkdir  /opt/apache
cd  /opt/apache

vim Dockerfile
#基于的基础镜像
FROM centos:7
#维护镜像的用户信息
MAINTAINER this is apache image <wz>
#镜像操作指令安装apache软件
RUN yum -y update
RUN yum -y install httpd
#开启 80 端口
EXPOSE 80
#复制网站首页文件
ADD index.html /var/www/html/index.html
//方法一:
#将执行脚本复制到镜像中
ADD run.sh /run.sh
RUN chmod 755 /run.sh
#启动容器时执行脚本
CMD ["/run.sh"]
//方法二:
ENTRYPOINT [ "/usr/sbin/apachectl" ]
CMD ["-D", "FOREGROUND"]

准备执行脚本

vim run.sh
#!/bin/bash
rm -rf /run/httpd/*                            #清理httpd的缓存
/usr/sbin/apachectl -D FOREGROUND            #指定为前台运行
#因为Docker容器仅在它的1号进程(PID为1)运行时,会保持运行。如果1号进程退出了,Docker容器也就退出了。​​​​​​​

准备网站页面
echo "this is test web" > index.html

生成镜像
docker build -t httpd:centos .

新镜像运行容器
docker run -d -p 1216:80 httpd:centos

测试
http://192.168.131.100:1216/

########如果有网络报错提示########
[Warning] IPv4 forwarding is disabled. Networking will not work.

解决方法:
vim /etc/sysctl.conf
net.ipv4.ip_forward=1

sysctl -p
systemctl restart network
systemctl restart docker

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

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

相关文章

探索【Stable-Diffusion WEBUI】各种插件和追求更高效

文章目录 &#xff08;零&#xff09;前言&#xff08;一&#xff09;界面与翻译(1.1) 主题风格&#xff08;kitchen Theme&#xff09;(1.2) 对照翻译&#xff08;Bilingual Localization&#xff09;(1.3) 自行翻译(1.3) 提示词翻译&#xff08;Prompt Translator&#xff09…

asp.net765数码手机配件租赁系统

员工部分功能 1.员工登录&#xff0c;员工通过自己的账号和密码登录到系统中来&#xff0c;对租赁信息进行管理 2.配件查询&#xff0c;员工可以查询系统内的配件信息 3.客户信息管理&#xff0c;员工可以管理和店内有业务往来的客户信息 4.配件租赁&#xff0c;员工可以操作用…

字节蝉联全球独角兽榜首,ChatGPT企业狂升200多位

江山代有才人出&#xff0c;各领风骚数百年。 4月18日&#xff0c; 胡润研究院发布了《2023全球独角兽榜》&#xff0c;列出了全球成立于2000年之后&#xff0c;价值10亿美元以上的非上市公司。 榜单显示&#xff0c;全球一共有1361家独角兽企业入围榜单&#xff0c;分布在48个…

不要再问为什么在职读研?在中国人民大学与加拿大女王大学金融硕士项目听到了最好的答案

为什么要在职读研呢&#xff1f;平时工作已经很忙很累了&#xff0c;再利用业余时间去学习是为什么呢&#xff1f;有不满足于现状的&#xff0c;有一直为了自己目标努力冲刺的&#xff0c;有为了圆自己名校梦想的&#xff0c;也有单纯喜欢专业喜欢学校的。相信每个读研人都有自…

在时代的浪潮中实在前行,实在智能应邀出席浪潮数字企业2023生态伙伴大会

4月15日&#xff0c;以“新产品 新路径 新生态&#xff0c;共赢2023”为主题的浪潮数字企业生态伙伴大会在济南召开。 浪潮集团执行总裁王兴山、浪潮数字企业总经理魏代森、浪潮数字企业副总经理兼CTO郑伟波、IDC中国副总裁兼首席分析师武连峰等业内专家、实在智能等行业领军企…

三步搞定centos虚拟机的克隆

vm17centos7min版本&#xff0c;三步实现大数据的基础操作 一 在vm中选择克隆选项二 配置IP地址三 三台设备基于秘钥实现免密登录1 三台设备分别执行下面的指令&#xff0c;产生公钥和私钥2 给hadoop124和hadoop123 和hadoop122执行下列指令&#xff0c;将123和124的公钥拷贝给…

【小程序云开发】30分钟搭建个人相册小程序

文章目录 前言准备工作小程序架构创建小程序云开发环境创建数据库搭建个人相册写在最后 前言 图片存储&#xff0c;是所有应用开发里最常见的场景之一。 本文将通过实战“个人相册小程序”开发&#xff0c;教你如何借助小程序 云开发 能力&#xff0c;提升功能开发效率&#x…

【环境篇 1】CC2340环境搭建

文章目录 1 准备安装条件2.安装工具2.1 CCS12.1 安装2.2 下载并安装CC23XX SDK2.3 下载并安装对应开发环境和版本的 Sysconfig2.4 下载对应版本Free-RTOS2.5 下载并安装 TI Clang 3 工程编译3.1 环境修改3.2 导入工程2.4 编译项目 1 准备安装条件 CCS IDE编译工具&#xff0c;…

React 路由react-router-dom详解

React 路由react-router-dom详解 ( 路由嵌套 路由传参 路由权限 路由优化 按需导入 404页面 ) 前面我们先了解一下 路由是什么&#xff1f; 路由分类有哪些&#xff1f;内置API有哪些&#xff1f; 可能有点枯燥&#xff0c;不喜欢看的直接跳过&#xff01; 1&#xff0c;相…

2023年软考中级网络工程师考试大纲

1.考试目标 通过本考试的合格人员能根据应用部门的要求进行网络系统的规划、设计和网络设备的软硬件安装调试工作&#xff0c;能进行网络系统的运行、维护和管理&#xff0c;能高效、可靠、安全地管理网络资源&#xff0c;作为网络专业人员对系统开发进行技术支持和指导&#…

几十个简要的游戏案例分析

文章目录 一、 介绍二、 影响游戏体验的因素三、 游戏能爆火的因素1.影响游戏爆火因素的排名2.玩游戏的两种经典心理3.经典案例分析Qq农场植物大战僵尸水果忍者召唤神龙羊了个羊 4.游戏公司可借鉴的经验 四、 几十款游戏的多方面分析FC红白游戏机十二人街霸热血高校系列魂斗罗系…

vsftpd 3.0.3升级到3.0.5后的坑

1、问题描述 vsftpd 3.0.3升级到3.0.5后&#xff0c;Java ftps连接不成功&#xff0c;报以下错误&#xff1a; javax.net.ssl.SSLHandshakeException: Remote host terminated the handshakeat java.base/sun.security.ssl.SSLSocketImpl.handleEOF(SSLSocketImpl.java:1715…

Java日志处理

日志 日志就是Logging&#xff0c;它的目的是为了取代System.out.println() 输出日志&#xff0c;而不是用System.out.println()&#xff0c;有以下几个好处&#xff1a; &#xff08;1&#xff09;可以设置输出样式&#xff0c;避免自己每次都写“ERROR: ” var &#xff0…

故障分析 | 一次规律的 MySQL 主从延迟跳变

作者&#xff1a;李彬 爱可生 DBA 团队成员&#xff0c;负责项目日常问题处理及公司平台问题排查。爱好有亿点点多&#xff0c;吉他、旅行、打游戏… 本文来源&#xff1a;原创投稿 *爱可生开源社区出品&#xff0c;原创内容未经授权不得随意使用&#xff0c;转载请联系小编并注…

WxGL应用实例:绘制高精度的3D太阳系模型

文章目录 1 坐标系的选择1.1 黄道坐标系1.2 三维空间直角坐标系 2 使用JPL星历表计算轨道2.1 日期时间2.2 特定时刻天体的位置2.3 天体运行轨道 3 太阳系模型3. 1 全家福3.2 时间、距离和半径的缩放3.3 黄道坐标系模型 天何所沓&#xff1f;十二焉分&#xff1f;日月安属&#…

拆解Open ODS View和HANA Composite Provider

这两个也不是新面孔了。 那么OODS和HCPR到底他俩怎么用&#xff1f;既然大家都是虚拟的&#xff0c;不占地方。那这俩infoprovider到底有啥区别&#xff1f; 首先就是目的不同。 HCPR是可以用Union和Join。也就是老的Multiprovider和InfoSet。Union就是说两个数据集的行能被…

UniLM模型简单介绍

目录 一、概要 二、深入扩展 2.1 预训练任务 2.2 模型精调 一、概要 如果将基于Transformer的双向语言模型&#xff08;如BERT模型中的掩码语言模型&#xff09;与单向的自回归语言模型&#xff08;如BART模型的解码器&#xff09;进行对比&#xff0c;可以发现&#xff0c…

常见的注册中心Nacos、Eureka

常见的注册中心 1.Eureka&#xff08;原生&#xff0c;2.0遇到瓶颈&#xff0c;停止维护&#xff09; 2.Zookeeper&#xff08;支持&#xff0c;专业的独立产品。例如&#xff1a;dubbo&#xff09; 3.Consul&#xff08;原生&#xff0c;GO语言开发&#xff09; 4.Nacos …

中国社科院与美国杜兰大学金融管理硕士项目——在职读研的日子里藏着我们未来无限可能

人生充满期待&#xff0c;梦想连接着未来。每一天都可以看作新的一页&#xff0c;要努力去成为最好的自己。在职读研的光阴里藏着无限的可能&#xff0c;只有不断的努力&#xff0c;不断的强大自己&#xff0c;未来会因为你的不懈坚持而发生改变&#xff0c;纵使眼前看不到希望…

算法---统计参与通信的服务器

题目 这里有一幅服务器分布图&#xff0c;服务器的位置标识在 m * n 的整数矩阵网格 grid 中&#xff0c;1 表示单元格上有服务器&#xff0c;0 表示没有。 如果两台服务器位于同一行或者同一列&#xff0c;我们就认为它们之间可以进行通信。 请你统计并返回能够与至少一台其…