zoukankan      html  css  js  c++  java
  • Docker篇章5:Docker☞镜像

    Docker篇章5:Docker☞镜像

    • Docker镜像是轻量级,可执行独立软件包,用来打包软件运行环境和基于运行环境开发的软线,它包含运行某个软件所需的所有内容,包括代码,运行时库,环境变量和配置文件。

    1.docker镜像加载原理

    • docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统UnionFS.
    什么是UnionFS:
    	UnionFS(联合文件系统),它是一种分层,轻量级并且高性能的文件系统,它支持对文件系统修改作为一次提交来一层层的叠加,同事可以将不同目录挂在到同一个虚拟文件系统下。Union文件系统时Docker镜像的基础,镜像可以通过分层来进行集成,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
    特性:一次同事加载多个文件操作系统,但从外面看起来,只看到一个文件系统,联合加载会把各个层文件系统叠加起来,这样最终文件系统会包含所有底层文件和目录
    

    ​ bootfs(boot file system) 主要包含bootloader和kernel,bootloader主要时引导加载kernel,linux刚启动时会加载bootfs文件系统,在docker最底层时bootfs,这一层于我们典型Linux系统一样,包含boot加载器和内核。当boot加载完成之后整个内核旧都在内存中,此时内存使用权已由bootfs转交给内核,此时系统也会卸载bootfs。

    ​ rootfs(root file system) 在boots纸上,包含就是典型Linux系统中 /dev, /etc,/proc,/bin等标准目录和文件,rootfs就是各种不同操作系统发性版,比如Ubuntu,CentOS等。

    ​ 平时我们安装虚拟机CentOS都是好几个G,为什么docker这里才200M左右?

    	对于一个精简OS,rootfs可以很小,只需要包括最基本命令,工具和程序库就可以了,因为底层直接用主机的kernel,自己只需要提供rootfs就行,由此可见对于不同linux发性版本,bootfs基本是一致的,rootfs会由差额因此不同发性版可以公用bootfs
    
    • 分层镜像效果图如下,它就好像花卷一样:

    2.为什么docker镜像采用这种分层结构

    • 最大好处就是共享资源,比如:有多个镜像都从相同的base镜像构建而来,那么宿主机只需在磁盘上保存一份base镜像,同时内存中也需加载一份base镜像,就可以为所有容器服务了,而且镜像每一层都可以被共享。(好比如一个镜像第一次下载很慢,但是第二次下载很快,因它内部有缓存,可以共享资源)

    • 特点:docker镜像都是只读,当容器启动时,一个新的可写层被加载到镜像顶部,这一层通常被称作容器层,容器层之下都叫镜像层。

    3.简单示例:

    • docker拉取tomcat

      docker pull tomcat
      
    • 启动容器

      #启动tomcat 从外部访问端口8888 映射内部端口8080
      docker run -it -p 8888:8080 tomcat
      
    • 此时如果浏览器访问为404页面

    先关闭防火墙

    # 查看防火墙状态
    service firewalld status
    # 关闭防火墙
    systemctl stop firewalld.service
    # 禁止防火墙开机启动
    systemctl disable firewalld.service
    # 启动docker
    systemctl start docker
    # 重启docker
    systemctl restart docker
    

    进入tomcat 容器内

    docker exec it 启动tomcat容器的容器ID /bin/bash
    

    在tomcat目录执行

    cp -r /usr/local/tomcat/webapps.dist/* /usr/local/tomcat/webapps/
    

    此时访问页面主机IP:8888成功:

    • 对当前容器内的tomcat 修改,然后形成自定义镜像
    docker commit -a='xjk' -m='no change' 容器id project/tomcat:1.12
    
    • 然后启动自己构建镜像的tomcat容器
    # docker run -it -p 外部访问端口:tomcat端口默认8080 [REPOSITORY:TAG]
    docker run -it -p 7777:8080 project/tomcat:1.12
    # 后台启动 -d
    

    此时访问7777端口也是OK的。

  • 相关阅读:
    leetcode------Remove Element
    leetcode------Merge Two Sorted Lists
    [转载]Unity3D 游戏引擎之使用C#语言建立本地数据库(SQLITE)
    [转载]VS2012创建MVC3项目提示错误: 此模板尝试加载组件程序集 “NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”。
    [转载]Unity3D 访问Access数据库
    [转载]C#导入XLS数据到数据库
    [转载]Unity3D的断点调试功能
    [Unity3D]支持的视频格式
    unity 3d 获取鼠标当前坐标
    [转载]VS2012程序打包部署详解
  • 原文地址:https://www.cnblogs.com/xujunkai/p/13031373.html
Copyright © 2011-2022 走看看