Docker基础教程——容器

版权声明:http://blog.csdn.net/anxpp https://blog.csdn.net/anxpp/article/details/52476339

原文出自:http://blog.csdn.net/anxpp/article/details/52476339

    容器是Docker的另一个核心概念。

    一般来说,镜像的一个运行实例就是容器,容器提供了一个可写的文件层。

    本文同上一篇介绍镜像一样的结构,逐步介绍容器。

    1、创建容器

    Docker的容器非常轻量级,创建和删除都很容易。

    1.1、新建容器

    新建容器使用docker create命令:

docker create -it ubuntu:latest
    此时创建好的容器处于停止状态,使用docker pa -a可以查看容器列表。

    停止的容器可以使用docker start命令启动。

    1.2、启动容器

    启动容器有两种方式:

    1、基于镜像新建容器并启动

    2、启动终止状态的容器

    主要涉及的命令为docker run,等价于先执行docker create,然后执行docker start命令。

    比如:

docker run ubuntu /bin/bash 'hello word'
    会启动容器并输出hello word然后自动终止。

    利用docker run创建并启动容器时,docker在后台运行的标准操作包括:

  • 检查本地是否存在指定的镜像,不存在就从仓库下载
  • 利用镜像创建并启动一个容器
  • 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
  • 从宿主主机配置的网桥接口中桥接一个虚拟接口道容器中去。
  • 从地址池中分配一个IP给容器
  • 执行用户指定的应用程序
  • 执行完毕后容器被终止
    下面启动一个bash终端与用户交互:

docker run -t -i ubuntu /bin/bash
    -t:让docker分配一个伪终端并绑定到容器的标准输入上。

    -i:让容器的标准输入保持打开。

    交互模式下用户可以通过所创建的中断来输入命令,这和一般linux的中断使用起来是一样的。

    输入exit或者按ctrl+d可以退出容器。

    对于所创建的bash容器,当使用exit命令退出后,docker容器也会自动终止,因为对于docker来说,没有运行中的应用后,容器也没有必要继续运行了。

    1.3、守护态运行

    可以通过-d参数让docker容器在后台以守护态(Daemonized)形式运行。

    比如:

docker run -d ubuntu /bin/bash -c "while true;do each hello word; sleep 1 done"
    使用docker ps命令查看容器信息。

    使用docker logs获取容器的输出信息。

    2、终止容器

    终止一个运行中的命令是docker stop,格式:

docker stop [-t|--time[=10]]
    这时会首先向容器发送SIGTERM信号,等待一段时间后(默认为10s),再次发送SIGNKILL信号终止容器。

    同样的,像刚刚前面说的一样,当Docker容器中指定的应用终结时,容器页自动终止。

    可以通过docker ps命令查看:

docker ps -a -q
    这里参数表示查看所有退出的容器。

    容器(被)终止后,可以通过docker start重新启动。

    而docker restart命令,页如我们所料,会首先终止一个运行态的容器,然后再重新启动它。

    3、进入容器

    启动容器时若加上参数-d会进入后台,无法直接看到容器中的内容。

    如果想进入容器,有多种方法:docker attach命令、docker exec命令以及nsenter工具等。

    3.1、attach命令

    这是Docker自带的命令。

    如果我们有如下运行的容器:

docker run -idt ubuntu
    可以这样进入:
docker attach 容器Name
    但是,当多个窗口(终端)同时attach到一个容器时,所有窗口都会同步显示,当某个窗口因为命令等阻塞后,其他窗口也会被阻塞而不能执行操作。

    3.2、exec命令

    exec是docker中1.3版本开始提供的工具,可以直接在容器中运行命令。

    还是刚刚那个运行的容器的例子,如果想要进入并启动一个bash:

docker exec -ti 容器ID /bin/bash

    3.3、nsenter工具

    nsenter工具包含在util-linux 2.23版本及以后,如果系统中的对应包版本较低,可以如下安装新版:

。。。。。。

    4、删除容器

    删除容器使用docker rm命令,格式为:

docker rm [OPTIONS] CONTAINER [CONTAINER...]
    支持的选项:

  • -f、--force=false:因为运行中的容器默认是不能被删除的,这个参数就是强行终止并删除一个运行中的容器。
  • -l、--link=false:删除容器的连接,但保留容器。
  • -v、--volumes=false:删除容器挂在的数据卷。
    例如,删除终止状态的容器:

docker rm 容器ID
    删除运行中的容器:

docker rm -f 容器ID

    5、导入导出容器

    跟镜像一样,容器也可以导出为一个文件和从文件中导入容器。

    5.1、导出容器到文件

    导出容器是将一个以及从镜像创建为容器的实例导出到一个文件,而不管此时这个容器是否处于运行状态。

    命令为dicker export,格式:

docker export CONTAINER
    一个导出的示例:

docker export 容器ID >导出后的文件名.tar
    然后可以将文件发送到其他地方以实现容器的迁移。

    5.2、从文件导入容器

    对于刚刚导出的容器,对应使用docker import命令导入,然后成为镜像

cat 文件名.tar | docker import - 镜像名字:TAG
    比如:

cat test.tar | docker import - test/ubuntu:v0.0.1
    镜像的导入使用的是docker load,下面是两者的区别:

  • 容器快照文件将丢失所有的历史记录和元数据信息(仅保存容器的快照状态),所以从容器快照导入时一般会重新指定标签等元数据信息。
  •  镜像文件保存完整记录,所以体积页更大。


小结

    容器是直接提供应用服务的组件,操作都非常轻量级,是docker实现快速的启停和高效服务效能的基础。

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页