• docker镜像原理


    一、docker镜像原理 
    docker镜像本质
    是一个分层文件系统
    docker中一个centos镜像为什么只有200MB,而一个centos操作系统的iso文件只要几个G
    centos的ISO镜像文件包含bootfs和rootfs,而docker的centos镜像复用操作系统的bootfs,只有rootfs和其他镜像层
    docker中一个tomcat镜像为什么有500MB,而一个tomcat安装包只有70多MB
    由于docker中镜像是分层的,tomcat虽然只有70多MB,但他需要依赖于父镜像和基础镜像,所有整个对外暴露的tomcat今年更新大小500多MB

    1.操作系统组成部分:
    进程调度子系统
    进程通信子系统
    内存管理子系统
    设备管理子系统
    文件管理子系统
    网络通信子系统
    作业控制子系统

    文件管理子系统:
    Linux文件系统bootfs和rootfs两部分
    bootfs:包含bootloader引导加载程序和kernel内核
    rootfs:root文件系统,/dev /proc /bin /etc
    不同的Linux发行版,bootfs基本一样,而rootfs不同

    2.docker镜像由特殊的文件系统叠加而成
    最低端是bootfs,并使用宿主机的bootfs
    第二层是root文件系统rootfs, 称为base image
    再往上是叠加其他的镜像文件
    统一文件系统 union file system 技术能够将不同的层整合成一个文件系统,为这些层提供了一个统一的视角,这样就隐藏了多层的存在,在用户的角度看来,只存在一个文件系统。
    一个镜像可以放在另个镜像的上面,位于下面的镜像称为父镜像,最底部的镜像称为基础镜像
    当从一个镜像启动容器时,docker会在最顶层加载一个读写文件系统作为容器

    二、镜像制作
    docker镜像如何制作
    1.容器转为镜像
    docker commit 容器id 镜像名称:版本号
    docker save -o 压缩文件名称 镜像名称:版本号
    docker load -i 压缩文件名称


    数据卷目录挂载的  commit 不会写入到镜像里

    镜像转为压缩文件,可以传输


    2.dockerfile
    是一个文本文件
    包含了一条条指令
    每一条指令构建一层,基于基础镜像,最终构建出一个新的镜像
    对于开发人员:可以为开发团队提供一个万全一致的开发环境
    对于测试人员:可以直接拿开发时所构建的镜像或者通过dockerfile文件构建一个新的镜像开始工作了
    对于运维:在部署时,可以实现应用的无缝移植

    hub.docker.com、

    FROM
    MAINTAINER
    LABEL
    RUN
    CMD
    ENTRYPOINT
    COPY
    ADD
    ENV
    ARG
    VOLUME
    EXPOSE
    WORKDIR
    USER
    HEALTHCHECK
    ONBUILD
    STOPSIGNAL
    SHELL

    定义dockerfile 发布springboot


    springboot 打包
    右侧 maven lifecycle  package


    找到目录
    java -jar ./demo1-0.0.1-SNAPSHOT.jar
    可以测试,直接运行这个包也可以正常运行的

    chmod 777 root 
    上传文件包
    demo1-0.0.1-SNAPSHOT.jar ./docker-files
    移到文件夹下
    mv demo1-0.0.1-SNAPSHOT.jar ./docker-files

    ls -al  查看文件夹的信息

    先下载一个 java8
    docker search java
    docker pull java:8


    定义父镜像
    FROM java:8
    定义作者信息
    MAINTAINER haha
    将jar包添加到容器:
    ADD demo1-0.0.1-SNAPSHOT.jar app.jar
    定义容器启动执行的命令:
    CMD java -jar app.jar
    通过dockerfile构建镜像
    docker bulid -f dockerfile 文件路径 -t 镜像名称:版本


    FROM java:8
    MAINTAINER haha
    ADD demo1-0.0.1-SNAPSHOT.jar app.jar
    CMD java -jar app.jar
    docker bulid -f ./dockerfile 文件路径 -t 镜像名称:版本

     docker build -f ./springboot_dockerfile -t app .


    docker run -id -p 9000:8080 app


    装个命令行补全和错误命令检测吧
    不然报错 大半天都没找到 卡壳就卡死了

    docker run -it --name=c1 centos:7

    1.自定义centos7镜像
    要求
    1.默认登录路径为/usr
    2.可以使用vim

    官方提供的centos  默认在/目录下   vim不能用,只能vi

    定义父镜像
    定义作者信息
    执行安装vim命令
    定义目录

    FROM centos:7
    MAINTAINER haha
    RUN yum install -y vim
    WORKDIR /usr
    CMD /bin/bash

    docker build -f ./centos_dockerfile -t haha_centos:1 .

    docker run -it --name=haha_cen 

    docker run -it --name=haha_cen haha_centos:1


     

  • 相关阅读:
    pytest与testNg自动化框架
    【WPF】实现动态切换语言(国际化)以及动态换肤功能
    【校招VIP】java开源框架之spark
    SpringMVC综合案例
    c++入门必学库函数 memset
    python处理xml文件
    超详细的Pycharm.2023下载与安装教程
    IDC_ISP网络之IDC机房内网络架构及配置
    springboot进行微信公众号相关开发:(一)编写接口激活配置信息用,用以实现公众号与配置信息接口的绑定
    【Github】Github创建远程库
  • 原文地址:https://blog.csdn.net/lucylily11/article/details/127758705