Docker镜像是什么原理?Dockerfile是什么?

Dockerfile

一、docker镜像原理

在这里插入图片描述

Linux文件系统有bootfs和rootfs两部分组成

  • bootfs: 包含bootloader(引导加载程序)和kernel(内核)
  • rootfs: root文件系统,包含的就是典型Linux系统中的 /dev,/ proc, /bin, /etc等标准目录和文件
  • 不同的linux发行版,bootfs基本一样,儿rootfs不同,如ubuntu,centos等

111

docker镜像是由特殊的文件系统叠加而成的**【分层的文件系统】**

最底端是bootfs,并使用宿主机的bootfs

第二层是root文件系统rootfs,称为base image

然后网上可以叠加其它的镜像

好处就是基础镜像可以复用

在这里插入图片描述

  • 统计文件系统技术能够将不同的层整合成一个文件系统,为这些层提供了一个统一的视角,这样就隐藏了多层的存在,在用户的角度来看,只存在一个文件系统
  • 一个镜像可以放在另一个镜像的上面,位于下面的镜像称为父镜像,最底部的镜像称为基础镜像

当从一个镜像启动容器时,Docker会在最顶层加载一个读写文件系统作为容器**【复用】**

二、Docker镜像制作

1、容器转换为新的镜像
docker commit 容器id 镜像名称:版本号(你要转换的镜像名称)
docker save -o 压缩文件名称 镜像名称:版本号
docker load -i 压缩文件名称

转换后新的镜像挂载的数据卷不会生效,但是不是目录挂载的都会生效

在这里插入图片描述

2、dockerfile

dockerfile就是一个文本文件

  • 包含一条条指令
  • 每条指令构建一层,基于基础镜像,最终构建出一个新的镜像
  • 对于开发人员:可以为开发团队提供一个完全一致的开发环境
  • 会与测试人员:可以可以直接拿着开发时构建的镜像或者通过Dockerfile文件构建新的镜像开始工作
  • 对于运维人员:在部署时,可以实现应用的无缝移植
    在这里插入图片描述

Dochub网址:http://hub.docker.com

例:

在这里插入图片描述

dockerfile关键字

关键字作用备注
FROM指定父镜像指定dockerfile基于那个image构建
MAINTAINER作者信息用来标明这个dockerfile谁写的
LABEL标签用来标明dockerfile的标签 可以使用Label代替Maintainer 最终都是在docker image基本信息中可以查看
RUN执行命令执行一段命令 默认是/bin/sh 格式: RUN command 或者 RUN [“command” , “param1”,“param2”]
CMD容器启动命令提供启动容器时候的默认命令 和ENTRYPOINT配合使用.格式 CMD command param1 param2 或者 CMD [“command” , “param1”,“param2”]
ENTRYPOINT入口一般在制作一些执行就关闭的容器中会使用
COPY复制文件build的时候复制文件到image中
ADD添加文件build的时候添加文件到image中 不仅仅局限于当前build上下文 可以来源于远程服务
ENV环境变量指定build时候的环境变量 可以在启动的容器的时候 通过-e覆盖 格式ENV name=value
ARG构建参数构建参数 只在构建的时候使用的参数 如果有ENV 那么ENV的相同名字的值始终覆盖arg的参数
VOLUME定义外部可以挂载的数据卷指定build的image那些目录可以启动的时候挂载到文件系统中 启动容器的时候使用 -v 绑定 格式 VOLUME [“目录”]
EXPOSE暴露端口定义容器运行的时候监听的端口 启动容器的使用-p来绑定暴露端口 格式: EXPOSE 8080 或者 EXPOSE 8080/udp
WORKDIR工作目录指定容器内部的工作目录 如果没有创建则自动创建 如果指定/ 使用的是绝对地址 如果不是/开头那么是在上一条workdir的路径的相对路径
USER指定执行用户指定build或者启动的时候 用户 在RUN CMD ENTRYPONT执行的时候的用户
HEALTHCHECK健康检查指定监测当前容器的健康监测的命令 基本上没用 因为很多时候 应用本身有健康监测机制
ONBUILD触发器当存在ONBUILD关键字的镜像作为基础镜像的时候 当执行FROM完成之后 会执行 ONBUILD的命令 但是不影响当前镜像 用处也不怎么大
STOPSIGNAL发送信号量到宿主机该STOPSIGNAL指令设置将发送到容器的系统调用信号以退出。
SHELL指定执行脚本的shell指定RUN CMD ENTRYPOINT 执行命令的时候 使用的shell
3、Dockerfile案例

定义dockerfile,发布springboot项目

步骤:

  • 把springboot项目打包,jar包,传到对应的目录

在这里插入图片描述

  • 编辑dockerfile,把jar包添加到对应的镜像里面去
1、定义父镜像: FROM java:8
2、定义作者信息: MAINTAINER 作者信息
3、把jar包添加到容器:ADD springboot.jar(springboot项目的jar包) app.jar(容器中的名称,自定义,方便启动)
4、定义容器启动执行的命令:CMD java -jar app.jar(自定义的容器名称)
5、通过dockerfile构建镜像:docker build -f dockerfile文件路径 -t镜像名称:版本

在这里插入图片描述

  • 构建镜像

在这里插入图片描述

  • 启动镜像 系统默认分配名字,可以省略不写**【要做端口映射,外部机器才可以访问】**

在这里插入图片描述

  • 访问容器中的springboot项目

在这里插入图片描述

在这里插入图片描述

2、自定义centos7的镜像。

要求:

  • 默认登陆路径为/usr
  • 可以使用vim

1、定义父镜像:FROM centos:7

2、定义作者信息:MAINTAINER 作者信息

3、执行安装vim的命令: RUN yum install -y vim

4、定义默认的工作目录:WORKDIR /usr

5、定义容器启动执行的命令: CMD /bin/bash

步骤

  • 创建dockerfile文件编写
    在这里插入图片描述

  • 构建新镜像 docker build
    在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Dockerfile是用来构建Docker镜像的文件。它是一种命令参数脚本,用于定义构建镜像的步骤和源代码。通过编写Dockerfile文件,我们可以创建自己的镜像,而不仅仅依赖于官方基础镜像。常规使用步骤包括编写Dockerfile文件、使用docker build命令构建镜像、使用docker run命令运行镜像以及使用docker push命令发布镜像。每个保留关键字都必须是大写字母,指令会按照从上到下的顺序执行,注释使用#表示。每个指令都会创建并提交一个新的镜像层。 引用提供了更多关于Docker的介绍和实现原理,以及如何编写最佳的Dockerfile来构建业务镜像的方法。通过学习本章内容,你会了解Docker的概念和基本操作,并学会构建自己的业务镜像。 如果你想具体了解如何构建镜像和创建容器,可以使用以下命令:使用"docker build"命令构建镜像,例如:"docker build -t mytomcat:0.1 .";使用"docker run"命令创建容器,例如:"docker run -d -p 8080:8080 --name tomcat01 -v /home/kuangshen/build/tomcat/test:/usr/local/apache-tomcat-9.0.35/webapps/test -v /home/kuangshen/build/tomcat/tomcatlogs/:/usr/local/apache-tomcat-9.0.35/logs mytomcat:0.1"。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [DockerFile](https://blog.csdn.net/tfzz12/article/details/123388948)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [k8s中的Docker是什么](https://download.csdn.net/download/weixin_26642481/19758385)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

皮卡丘不断更

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值