Docker19_Dockerfile5

一、Docker镜像原理

 1、思考:

  • Docker 镜像本质是什么?
  • Docker 中一个centos镜像为什么只有200MB,而一个centos操作系统的iso文件要几个G?
  • Docker 中一个tomcat镜像为什么有500MB,而一个tomcat安装包只有70多MB?

  

   

 2、操作系统组成部分:

  • 进程调度子系统
  • 进程通信子系统
  • 内存管理子系统
  • 设备管理子系统
  • 文件管理子系统
  • 网络通信子系统
  • 作业控制子系统

 3、Linux文件系统由bootfs和rootfs两部分组成

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

  

 4、docker镜像原理 

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

  

 5、思考:

  • 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

二、镜像制作

 Docker 镜像如何制作?

  1. 容器转为镜像

docker commit 容器id 新镜像名称:版本号
docker save -o 压缩文件名称 镜像名称:版本号
docker load –i 压缩文件名称  #压缩文件还原为一个镜像

  

  2.dockerfile

三、Dockerfile概念及作用

 1、Dockerfile 概念

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

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

   

四、Dockerfile关键字

  

五、案例

 1、案例1

  案例:需求

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

 案例:实现步骤

  1. 定义父镜像:FROM centos:7
  2. 定义作者信息:MAINTAINER itheima <itheima@itcast.cn>
  3. 执行安装vim命令: RUN yum install -y vim
  4. 定义默认的工作目录:WORKDIR /usr
  5. 定义容器启动执行的命令:CMD /bin/bash
  6. 通过dockerfile构建镜像:docker build –f dockerfile文件路径 –t 新镜像名称:版本

 实现:

   

 2、案例2

 案例:需求

  定义dockerfile,发布springboot项目

 案例:实现步骤

  1. 定义父镜像:FROM java:8
  2. 定义作者信息:MAINTAINER itheima <itheima@itcast.cn>
  3. 将jar包添加到容器: ADD springboot.jar app.jar
  4. 定义容器启动执行的命令:CMD java –jar app.jar
  5. 通过dockerfile构建镜像:docker build –f dockerfile文件路径 –t 新镜像名称:版本

 实现:

  需要先把springboot项目打jar包,上传到docker系统上。

  确保jar包打包成功:

   

    

   

   

   

   

  问题:java8镜像无法拉取,构建镜像时报错

   

    

  解决办法:更换镜像源后重新执行构建镜像

    

 

posted on 2024-05-29 13:31  花溪月影  阅读(7)  评论(0编辑  收藏  举报