• 【微服务容器化】第五章-Dockerfile


    • dockerfile是一个文本的配置文件,它可以快速创建自定义的镜像。

    • 文本内容:包含了若干的命令行,并支持#作为注释行

    • 文本格式:基础镜像FROM维护者MAINTAINER,操作指令ADD,容器启动后指令等共计4部分

    总结一句Dockerfile是用来定制镜像的文本文件。

    🍃5.1 Docker镜像原理

    思考:

    • Docker 镜像本质是什么?

    • Docker 中一个centos镜像为什么只有200MB,而一个centos操作系统的iso文件要几个个G?

    • Docker 中一个tomcat镜像为什么有600MB,而一个tomcat安装包只有70多MB?

    操作系统组成部分:

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

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

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

    在这里插入图片描述

    docker镜像原理

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

    回答问题

    1. Docker 镜像本质是什么?

      是一个分层文件系统

    2. Docker 中一个centos镜像为什么只有200MB,而一个centos操作系统的iso文件要几个个G?

      Centos的iso镜像文件包含bootfs和rootfs,而docker的centos镜像复用操作系统的bootfs,只有rootfs和其他镜像层 。

    3. Docker 中一个tomcat镜像为什么有600MB,而一个tomcat安装包只有70多MB?

      由于docker中镜像是分层的,tomcat虽然只有70多MB,但他需要依赖于父镜像和基础镜像,所有整个对外暴露的tomcat镜像大小600多MB。

    🍃5.2 镜像制作

    🍵5.2.1 容器转镜像

    转镜像

    docker commit 容器id 镜像名称:版本号 
    
    • 1

    压缩

    docker save -o 压缩文件名称 镜像名称:版本号 
    
    • 1

    解压

    docker load –i 压缩文件名称
    
    • 1

    在这里插入图片描述

    测试

    # 创建tomcat镜像 (宿主机进行)
    docker run -id --name=c_tomcat \ 
    -p 8080:8080 \ 
    -v $PWD:/usr/local/tomcat/webapps \ 
    tomcat 
    
    # 进入tomcat镜像 (宿主机进行)
    docker exec -it c_tomcat /bin/bash 
    
    #创建a.txt b.txt (容器中进行)
    cd ~ 
    touch a.txt b.txt
    
    #容器转镜像 (宿主机进行)
    docker commit 28b8d4dc9744 mjh_tomcat:1.0 
    
    #压缩镜像 (宿主机进行)
    docker save -o lxs_tomcat.tar mjh_tomcat:1.0 
    
    #删除原来镜像 (宿主机进行)
    docker rmi mjh_tomcat:1.0 
    
    #从压缩文件加载镜像 (宿主机进行)
    docker load -i mjh_tomcat.tar 
    
    #产生镜像 (宿主机进行)
    docker run -it --name=new_tomcat mjh_tomcat:1.0 /bin/bash 
    
    #进入查看内容 (宿主机进行)
    docker exec -it c_tomcat /bin/bash 
    
    #可以看到a.txt b.txt存在,而webapps/test不存在 (容器中进行)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    总结:

    镜像的制作并不会将数据卷中的数据打包,只会将容器中的数据携带。

    🍵5.2.2 dockerfifile

    概念

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

    参考Dochub网址:https://hub.docker.com ,比如centos和nginx镜像

    在这里插入图片描述

    案例一:自定义centos7镜像。

    要求:

    1. 默认登录路径为 /usr

    2. 可以使用vim

    实现步骤

    • 定义父镜像:FROM centos:7

    • 定义作者信息:MAINTAINER lxs lxs@lxs.cn

    • 执行安装vim命令: RUN yum install -y vim

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

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

    • 通过dockerfifile构建镜像:docker bulid –f dockerfifile文件路径 –t 镜像名称:版本 .

    第一步:创建centos_dockerfile

    #具体代码 
    mkdir ~/docker-files 
    cd ~/docker-files 
    vim centos_dockerfile
    
    • 1
    • 2
    • 3
    • 4

    第二步:配置centos_dockerfile,继承父镜像,centos_dockerfile具体内容 如下

    FROM centos:7 
    MAINTAINER mjh  
    RUN yum install -y vim 
    WORKDIR /usr 
    CMD /bin/bash
    
    • 1
    • 2
    • 3
    • 4
    • 5

    第三步:build

    docker build -f ./centos_dockerfile -t lxs_centos:1 .
    
    • 1
    • -f:镜像文件

    • -t:新镜像名

    • . 寻址路径

    第四步:测试

    #进入看效果
    docker run -it --name=c2 mjh_centos:1
    
    • 1
    • 2
    案例二:发布springboot项目
    • 定义父镜像:FROM java:8
    • 定义作者信息:MAINTAINER lxs lxs@163.com
    • 将jar包添加到容器: ADD springboot.jar app.jar
    • 定义容器启动执行的命令:CMD [“java”,“-jar”,“app.jar”]
    • 通过dockerfifile构建镜像:docker bulid –f dockerfifile文件路径 –t 镜像名称:版本 .

    第一步:在docker-files中创建springboot_dockerfile

    #具体代码 
    [root@centos7 docker-files]# vim centos_dockerfile
    
    • 1
    • 2

    第二步:配置springboot_dockerfile

    FROM java:8
    MAINTAINER mjh 
    
    ADD springboot.jar app.jar
    
    CMD ["java","-jar","app.jar"]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    第三步:build

    docker bulid –f ./springboot_dockerfile –t app .
    
    • 1

    第四步:启动容器

    docker run -id -p 9000:8080 app
    
    • 1

  • 相关阅读:
    RDS:一致性处理事务的神器
    docker容器保持运行不退出
    Java#17(static)
    什么是智能合约
    Purple Pi OH(Debian/Ubuntu)使用python控制gpio
    【计算机网络Part 2】数据链路层
    PyQt中QFrame窗口中的组件不显示的原因
    【完美世界】石昊挑逗云曦,斩杀神级猿魔,吃血魂草开新挂,团灭战族追兵
    Pointnet++训练记录——Partseg
    asp.net core MVC 上传单文件与多文件
  • 原文地址:https://blog.csdn.net/mjh1667002013/article/details/127597868