Docker 容器

作者: 糯米藕 | 来源:发表于2016-06-12 20:27 被阅读121次

    容器是由镜像创建的运行实例,可以看成是一个简易版的Linux环境,其本质是宿主机上的进程。每个容器是相互隔离的,用户可以启动、停止、创建、删除容器。

    Docker通过namespace实现资源隔离,同一个namespace下的进程可以感知彼此的变化,而对外界的进程一无所知,这样一来就实现了独立和隔离的目的。

    1.启动容器

    1、 利用镜像新建并启动一个容器

    $ docker run –i –t ubuntu:12.04 /bin/bash
    

    对比可以发现,其中-i是打开容器的标准输入,-t是分配一个伪终端并绑定到容器的标准输入上。



    2、 守护态运行容器,即在后台以守护态形式运行。

    $ docker run –d ubuntu:12.04 /bin/sh –c “while true; do echo hello fc;sleep 1;done”
    

    创建、启动容器后执行命令,循环打印“hello fc”,可以使用“docker logs [容器名称]”来查看容器输出的信息。

    更多的参数介绍可以通过docker run –help查询。

    使用docker run创建容器时,后台会进行如下操作:

    • 检查指定的镜像是否存在,不存在就从公有仓库下载
    • 利用镜像创建并启动一个容器
    • 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中
    • 从地址池配置一个ip给容器
    • 执行用户指定的应用程序
    • 执行完毕后终止容器

    虽然后台会进行这一系列的操作,但容器的速度依旧很快,是当之无愧的轻量级,使用docker创建容器并执行/bin/echo ‘hello’与直接在本地执行命令的速度几乎差不多。

    3、 启动一个处于停止状态的容器

    $ docker start [容器id]
    

    注:使用docker run命令创建并启动一个容器,如果命令出错只创建容器但没有运行,再次用docker start启动时,会报出同样的错误。


    2.进入容器

    1、 使用attach命令

    $ docker attach [容器名称]
    

    使用attach命令也有不足之处,多个终端同时登录一个容器时,所有窗口会同步显示。
    2、 使用nsenter

    3.导入导出容器

    1、 从本地导出一个容器

    $ docker export [容器id] > [文件名]
    

    2、 将导出的文件再导入为镜像

    $ cat [文件名] | docker import [repository:tag]
    

    4.export-import和save-load

    export用于存入存出容器,而save用于导出镜像。镜像类似于安装配置好的虚拟机镜像,利用这个镜像可以启动多个镜像实例,而这样的镜像实例就是容器。容器和镜像可以相互转换,镜像可以创建容器,容器修改后也可以生成新的镜像。

    save-load过程中容器id保持不变,也就是镜像存出、存入,依旧是同一个镜像。

    1、利用某个镜像创建一个容器

    $ docker run -t -i ubuntu:12.04 /bin/bash
    

    2、利用commit命令将修改后的容器变成一个新镜像

    $ docker commit 3aa901b9b85b ubuntu-1
    

    3、将容器导出为文件

    $ docker export 3aa901b9b85b >  ./ubuntu00.tar
    

    4、将该容器生成的新镜像存为文件

    $ docker save ubuntu-1 > ./ubuntu01.tar
    

    5、查看这两个文件的大小,发现由镜像save的文件稍微大一点



    6、重新将这两个文件导入为镜像

    $ cat ./ubuntu00.tar |docker import - ubuntu00:v1
    $ docker load < ./ubuntu01.tar
    

    7、查看这两个镜像的层级关系



    可以看出save保存的文件导入为镜像后可以查看历史,而export保存的文件导入为镜像后不可以回滚之前的层。简而言之,save保存所有数据,export导出当前状态。

    相关文章

      网友评论

        本文标题: Docker 容器

        本文链接:https://www.haomeiwen.com/subject/jlzedttx.html