概述

前面我们讲了Docker三个主要概念中的镜像,这里我们再来讲一下Docker的第二个重要概念:容器。

容器是独立运行的一个或一组应用以及它们的运行态环境。关于容器本篇主要讲如下几部分内容:


启动容器

关于容器的启动主要讲如下几种启动方式:新建并启动容器、守护态运行容器、启动已终止的容器、重启容器。

新建并启动容器

新建并启动容器的命令为docker run,首先我们来看一下该命令的使用

$ sudo docker run --help

docker run命令的参数非常多,此处只截取了一小部分进行展示。

接下来我们使用该命令创建并运行一个容器

$ sudo docker run ubuntu:14.04 /bin/echo 'Hello Docker'

可以看到执行该命令和在本机执行echo 'Hello Docker'是一个效果。

另外Docker也允许启动一个伪终端,使用交互运行的方式启动一个容器,所用到的参数为:-t -i

$ sudo docker run -i -t ubuntu:14.04 /bin/bash

Docker使用run命令启动一个容器时执行了一系列的标准操作:

  • 检查本地是否存在指定的镜像,不存在就从公有仓库下载
  • 利用镜像创建并启动一个容器
  • 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
  • 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
  • 从地址池配置一个 ip 地址给容器
  • 执行用户指定的应用程序
  • 执行完毕后容器被终止
PS:上面内容出自《 Docker从入门到实践

守护态运行容器

docker run使用-d参数能让一个容器以守护态运行。

$ sudo docker run -itd ubuntu:14.04 /bin/bash

可以看到使用-d之后没有再进入该容器,而是输出了一个容器ID,可以使用docker ps命令查看到该容器。

启动已终止的容器

Docker使用docker start来启动一个已终止的容器。

start命令的使用非常简单,下面就是一个简单示例。


重启容器

使用docker restart命令来重启一个或多个容器。

接下来我们演示一下restart命令的使用

$ sudo docker restart bf009d3e8082


终止容器

终止一个运行中的容器有两种方式:在容器里面使用exit或Ctrl+d就能终止并退出一个该容器;在容器外部可以使用docker stop命令来终止一个运行中的容器。

下面我们来演示一下如何使用docker stop命令来终止一个容器。

$ sudo docker stop bf009d3e8082


进入容器

关于进入Docker容器内容相对较多,此处单独出来一篇文章进行讲解,请参考《如何进入Docker容器》。

导出和导入容器

导出容器

导出容器使用命令docker export。

$ sudo docker export bf009d3e8082 > ubuntu.tar
上面命令执行的就是把容器ID为bf009d3e8082的容器导出到本地文件ubuntu.tar

导入容器快照

当使用docker export把一个容器导出到本地文件之后还可以使用docker import命令把该文本导入到本地镜像。

$ cat ubuntu.tar | sudo docker import - my_ubuntu_test

在前一篇关于镜像的文章中讲到过使用docker load命令导入一个镜像快照到本地镜像,此处又使用了docker import命令导入一个容器的快照到本地镜像,那这两种方式都有什么本质性的区别呢?在《Docker从入门到实践》中有非常不错的说明,具体内容如下:

这两者的区别在于容器快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积也要大。此外,从容器快照文件导入时可以重新指定标签等元数据信息。

删除容器

删除容器使用docker rm命令与前面的删除镜像(docker rmi)命令非常相似,不要记混了哈(rmi remove image)。

在命令中有一个-f参数,用于强制删除一个正在运行的容器。

$ sudo docker rm a10910619d78 1883c0b2bd57 0f1bd9eaefff
上面的命令是删除三个指定ID的容器。操作的结果如下图所示

如果容器有非常多个的话,使用docker rm containerId一个个来删除容器效率太低下,我们可以采用如下命令删除所有已停止的容器。

$ sudo docker rm `docker ps -a -q`

关于Docker容器的内容就讲述到这,如有不足之处还请大家指正。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐