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

news/2024/10/18 22:34:55/

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
    在这里插入图片描述


http://www.ppmy.cn/news/708543.html

相关文章

WEB端项目中接入海康监控视频播放监控画面

需求: 以树形结构展示组织以及组织下的摄像头列表,点击单个摄像头进行预览效果图: 该博客基于 海康开放平台API开发 准备工作 1. APPkey、APPsecret、服务器ip地址、端口号 2. [OpenAPI 安全认证库 (JAVA) V1.1.3](…

神策(Android)- 集成基础埋点的整个过程

记得最早以前都是用友盟全家桶,埋点是用友盟,推送也是用友盟;但是近俩年我参与开发的app,埋点都是用神策、推送都是用极光私服,分享都是去对应集成对应平台的SDK 神策篇 神策(Android)- 集成基…

Linux-passwd或shadow删了怎么办?

passwd或者shadow被删除了怎么办 passwd和shadow被删了,可以启用营救模式进行补救,原因是这两个文件都有备份。 先将光驱的自动启动勾选。 将Boot的引导顺序改变下,将光驱引导顺序放到最前面。 选择Troubleshootin可以从名字来知道&#…

基于51单片机的电子密码锁

主要功能&#xff1a; 1、6位密码开锁 可以修改用户密码和管理员密码 断电记忆 3次错误报警锁住键盘 #include <REG51.h> #include<intrins.h> #define LCM_Data P0 #define uchar unsigned char #define uint unsigned int #define w 6 //定义密…

C++ DAY5

1.全局变量&#xff0c;int monster 10000;定义英雄类hero&#xff0c;受保护的属性string name&#xff0c;int hp,int attck&#xff1b;公有的无参构造&#xff0c;有参构造&#xff0c;虚成员函数 void Atk(){monster-0;}&#xff0c;法师类继承自英雄类&#xff0c;私有属…

Redis高可用——集群模式

Redis高可用——集群模式 一、Redis 群集模式二、集群的作用1.数据分区2.高可用 三、Redis集群的数据分片四、Redis集群的主从复制模型五、搭建Redis 群集模式1.创建每个redis节点的目录&#xff0c;复制需要的文件2.开启群集功能3.启动redis节点4.启动集群5.测试群集 一、Redi…

使用三防漆的安全说明

关于使用三防漆的安全说明&#xff1a; 1、在摆放三防漆时一定要远离火源及相关禁止之氧化物&#xff1b; 2、在密封储存并避免阳光直射和高温环境&#xff1b; 3、操作场所应具备换气设备&#xff0c;随时保持作业场所之空气含本剂浓度在允许量范围内&#xff1b; 4、具有不易…

深圳图高智能深耕5G三防夜视智能终端细分领域,引领行业发展

深圳市图高智能有限公司&#xff08;以下简称&#xff1a;图高智能&#xff09;成立于2017年5月&#xff0c;是一家专业从事智能手机及移动通讯终端相关控制优化系统研发、生产和销售的国家高新技术企业&#xff0c;并于2018年7月通过了ISO9001 2015质量体系认证&#xff0c;同…