• Docker的Image与Container


    Docker的Image与Container

    Image的简介

    Image其实就是一个文件系统,它里面是一层层文件系统,叫做Union FS(联合文件系统)。联合文件系统,可以将几层目录挂载到一起,形成一个虚拟文件系统。虚拟文件系统的目录结构就像普通 linux 的目录结构一样,docker 通过这些文件再加上宿主机的内核提供了一个 linux 的虚拟环境。每一层文件系统我们叫做一层 layer,联合文件系统可以对每一层文件系统设置三种权限,只读(readonly)、读写(readwrite)和写出(whiteout-able),但是 docker 镜像中每一层文件系统都是只读的。构建镜像的时候,从一个最基本的操作系统开始,每个构建的操作都相当于做一层的修改,增加了一层文件系统。一层层往上叠加,上层的修改会覆盖底层该位置的可见性,这也很容易理解,就像上层把底层遮住了一样。当你使用的时候,你只会看到一个完全的整体,你不知道里面有几层,也不清楚每一层所做的修改是什么。
    

    创建Image的两种方式

    • 基于image创建container后,如果在container做了一些变化,l 例如安装了某个软件,可以将这些改变,commit成一个新的image,也可以简写为docker commit

      • 交互运行一个centos实例,给里面装一个lrzsz

        [root@node01 ~]# docker run -it centos
        [root@2ea4f2b475ca /]# yum -y install lrzsz
        
      • 装完退出

        [root@2ea4f2b475ca /]# exit
        
      • 查看修改后的容器

        [root@node01 ~]# docker container ls -a
        
      • 将这个新的容器,打包成一个新的镜像,生成新的镜像

        [root@node01 ~]# docker commit 2ea4f2b475ca guhaohao/centos-lrzsz
        
      • 查看镜像

        docker image ls
        
      • 可以根据镜像id,查看到镜像分层信息

        docker history 3b3d40f4a2b5
        
    • 使用Dockerfile,通过build制作image,可以简写为docker build

      • 定义Dockerfile文件

        vi Dockerfile
        
      • 写入一下内容

        FROM centos
        RUN yum -y install lrzsz
        
      • 编译镜像

        [root@node01 ~]# docker build -t guhaohao/centos-lrzsz2 .
        
      • 可以查看到多出了个镜像

        [root@node01 ~]# docker image ls
        

    Container的简介

    container可以理解为运行时的实例。
    要有Container首先要有Image,也就是说Container是通过image创建的。
    Container是在原先的Image之上新加的一层,称作Container layer,这一层是可读可写的(Image是只读的)。
    在面向对象的编程语言中,有类跟对象的概念。类是抽象的,对象是类的具体实现。Image跟Container可以类比面向对象中的类跟对象,Image就相当于抽象的类,Container就相当于具体实例化的对象。
    

    Image和Container的区别

    Image负责APP的存储和分发,Container负责运行APP
    

    Container的使用

    • 查看所有运行过的container容器

      [root@node01 ~]# docker container ls -a
      
    • 可以交互运行容器

      [root@node01 ~]# docker run -it centos
      
    • 查看运行时的容器

      [root@node01 ~]# docker container ls
      
    • 删除某个容器

      [root@node01 ~]# docker container rm 2ea4f2b475ca
      
    • 删除全部容器

      [root@node01 ~]# docker rm $(docker container ls -aq)
      
    • 删除没有在运行的容器

      [root@node01 ~]# docker rm $(docker container ls -f "status=exited" -q)
      
  • 相关阅读:
    Django组件之cookie与session
    广商14级软件工程分数:第五回合
    广商14级软件工程分数:第四回合
    Oracle Flashback和RMAN示例
    广商14级软件工程分数:第三回合
    广商14级软件工程分数:第二回合
    《学习进度条》博客
    广商14级软件工程分数:第一回合
    学生博客列表-广商14级软件工程
    源代码管理的一些问题
  • 原文地址:https://www.cnblogs.com/ghh520/p/13192659.html
Copyright © 2020-2023  润新知