容器是 Docker 的另一个核心概念。
简单地说,容器是镜像的一个运行实例,所不现的是,它带有额外的可写文件层。
下面将具体介绍容器的重要操作,包括创建一个容器、启动容器、终止一个容器、进入容器内执行操作、删除荣器和通过导入导出容器来实现容器迁移等。
创建容器
新建容器
使用 docker create 命令新建一个容器
root@localhost:~# docker create -it ubuntu:latest
使用docker create 命令新建的容器处理停止状态,使用docker start 命令启动它。
新建并启动容器
启动容器有两种方式,一种是基于镜像新建一个容器并启动,另一个是将终止状态(stopped)的容器重新启动。所需的命令主要为docker run ,等价于先执行docker create 命令,再执行 docker start 命令。
例如,下面的命令输出一个“ Hello World”,之后容器自动终止。
root@localhost:~# sudo docker run ubuntu /bin/echo 'Hello world'
Hello world
下面的命令则启动一个bash 终端,允许用户进行交互:
root@localhost:~# sudo docker run -t -i ubuntu:14.04 /bin/bash
root@2af4b41755da:/#
用户按 Ctrl+d 或输入 exit 命令来退出容器
root@2af4b41755da:/# exit
exit
对于所创建的 bash 容器,当使用 exit 命令退出之后,该容器就自动处理终止状态了。
守护态运行
我们可以添加 -d 参数来实现
例如下面的命令会在后台运行容器:
root@localhost:~# sudo docker run -d ubuntu /bin/sh -c "While true; do echo hello world; sleep 1; done"
通过 docker ps -a 来查看容器信息:
终止容器
使用 docker stop 来终止一个运行中的容器,命令格式为 docker stop[-t | --time [=10]]。它先向容器发送SIGTERM 信号,等待一段时间后(默认为10秒),再发送 SIGKILL 信号终止容器。
注意:docker kill 命令会直接发送SIGKILL 信号来强行终止容器。
使用docker ps -a -q 命令看到处于终止状态的容器的ID信息。例如:
root@localhost:~# sudo docker ps -a -q
c15ad4a50766
2af4b41755da
f186c6b5ba12
处于终止状态的容器,通过 docker start 命令来重新启动
root@localhost:~# sudo docker start c15
c15
docker restart 命令会将一个运行态的容器终止,然后再重新启动它:
root@localhost:~# sudo docker restart c15
c15
进入容器
在使用 -d 参数时,容器启动后会进客户后台,用户无法看到容器中的信息。下面为大家介绍进入容器进行操作的多种方法:
attach 命令
docker attach 是 Docker 自带的命令。示例:
使用attach命令有时不方便。当多个窗口同时 attach 到同一个容器的时候,所有窗口都会同步显示。当某个窗口因命令阻塞时,其他窗口也无法执行操作了。
exec 命令
该命令可以直接在容器内运行命令。例如进入到刚创建的容器中,并启动一个bash:
root@localhost:~# sudo docker exec -ti 2ba8459942c5 /bin/bash
root@2ba8459942c5:/#
删除容器
使用 docker rm 命令删除处理终止状态的容器,命令格式
- -f 强行终止并删除一个运行中的容器
- -l 删除容器的连接,但保留容器
- -v 删除容器挂载的数据卷。
例如:,查看处理终止状态的容器并删除:
root@localhost:~# sudo docker ps -a
root@localhost:~# sudo docker rm fef8faf0cef7
如果要删除一个运行中的容器加 -f 参数。Docker会发送 SIGKILL 信号给容器,终止其中的应用:
root@localhost:~# sudo docker rm -f 04e7d4d6cd1b
导入和导出容器
导出容器
导出容器是指导出一个已经创建的容器到一个文件,不管此时这个容器是否处理运行状态,可以使用dokcer export 命令,格式为:docker export CONTAINER.
查看所有容器如下所示:
分别导出2ba8459942c5容器和c15ad4a50766容器到test_for_run.tar文件和test_for_stop.tar文件。
root@localhost:~# sudo docker export 2ba >test_for_run.tar
root@localhost:~# sudo docker export c15 >test_for_stop.tar
导入容器
导出的容器使用 docker import 命令导入, 成为镜像
小结
容器是直接提供应用服务的组件,也是 Dokcer 实现快速的启停和高效服务性能的基础。
在生产环境中,建议使用HAProxy 工具来代理容器访问,这样在容器出现故障时,可以快速切换到其他容器,还可以自动重启故障容器。
参考文档
《Docker 技术入门与实战》第4章 容器