容器是docker另一个核心概念。简单的说,容器是镜像的一个运行实例。所不同的是,镜像是静态的只读文件,而容器带有运行时需要的可写文件层,容器就是独立运行的一个或一组应用以及他们所必须的运行环境,包括文件系统、系统类库、shell环境等。本节将具体介绍围绕容器的重要操作,包括创建一个容器、启动容器、终止一个容器、进入容器内执行操作、删除容器和通过导入导出容器来实现容器迁移。
1、创建容器
1)新建容器
可以使用docker create命令新建一个容器,例如:
[root@localhost ~]# docker create -it ubuntu:latest
3601134b939893cf55191cf6ccc727f03fcdbff527a6c71f153c43dc228ced1d
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3601134b9398 ubuntu:latest "/bin/bash" 5 seconds ago Created nostalgic_haibt
-t:让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上。
-i:让容器的标准输入保持打开(即交互式)。
还可以使用--name给容器起个形象的名称。
2)启动容器
使用docker create命令新建的容器处于停止状态,可以使用docker start命令来启动它。
[root@localhost ~]# docker create -it --name dream_king ubuntu:latest
88d3c971729578402844c90ac7d93a950bb632f72ec46050e0e3d9976c483fa8
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
88d3c9717295 ubuntu:latest "/bin/bash" 3 seconds ago Created dream_king
[root@localhost ~]# docker start dream_king
dream_king
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
88d3c9717295 ubuntu:latest "/bin/bash" About a minute ago Up 25 seconds dream_king
3)新建并启动容器
可以直接新建并启动容器,所需命令主要为docker run,等价于先执行docker create命令,在执行docker start命令。下面的命令输出一个”Hello world“,之后终止容器。
[root@localhost ~]# docker run -it ubuntu:14.04 /bin/echo "hello world"
hello world
这跟在本地直接执行/bin/echo 'hello world'几乎感觉不出任何区别。
当利用docker run来创建容器时,Docker在后台运行的标准操作包括:
- 检查本地是否存在指定的镜像,不存在就从公有仓库下载
- 利用镜像创建并启动一个容器
- 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
- 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
- 从网桥的地址池配置一个IP地址给容器
- 执行用户指定的应用程序
- 执行完毕后容器被终止
下面的命令则启动一个bash终端,允许用户进行交互。
在交互模式下,用户可以通过所创建的终端来输入命令,例如:
容器的核心为所执行的应用程序,所需要的资源都是应用程序运行所必须的。除此之外,并没有其他的资源。可以在伪终端中利用ps或top来查看进程信息。
可见,容器中仅运行了指定的bash应用。这种特点使得Docker对资源的利用率极高,是货真价实的轻量级虚拟化。
如果我们这个时候我们正常退出,输入exit或者Ctrl+d命令后,容器就自动处于退出(Exited)状态了。docker ps -a查看容器处于Exit状态。