频道栏目
首页 > 系统 > Linux > 正文

Docker基础教程——容器

2016-09-14 09:46:08           
收藏   我要投稿

容器是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实现快速的启停和高效服务效能的基础。
上一篇:【系统】[CentOS]装完CentOS7重启提示Initial setup of CentOS Linux 7 (core)
下一篇:使用iperf工具测试infiniband的速度
相关文章
图文推荐
热门新闻

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站