标签:
容器是Docker第二个核心概念,简单的的说容器是镜像的一个运行实例,所不同的是,它带有额外的可写文件层。
如果说虚拟机是模拟运行了一整套操作系统(提供运行态环境和其他系统环境)和跑在上面的应用。那么Docker容器就是独立运行的一个或一组应用,以及他们的必须运行环境。
Docker的容器十分轻量,用户可以随意的创建或删除容器。
可以使用docler create创建一个容器,比如创建一个Mysql的容器:
docker create –it mysql:latest
然后使用ps命令就可以查看所有的容器,不过要加上-a参数,因为create后的容器默认是不开启的。
docker ps –aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES5f660cfdf9b1 mysql:latest “/entrypoint.sh —na About a minuteago goofy_newtond8990fec2141 ubuntu:latest “/bin/bash” 3 hours ago Exited (0) 3hours ago serene_payne
如果要开启这个容器,就需要docker start
docker start 5f660cfdf9b1
在start可以加ID,也可以加容器的名字,可以用–name在创建的时候为容器起名字,如果不起名的话,docker会自动为它分配一个。
启动容器的方式有两种,一是创建一个容器并启动这个容器,另一种就是一个将一个处于终止状态的容器重新启动。
如果是创建一个容器并立即启动,就是使用的docker run命令,这个命令等价与docker create 加 docker start。
当用docker run来创建一个容器时,操作包括:
比如使用ubuntu镜像执行bash终端,允许用户进行交互:
docker run –t –i ubuntu:14.04 /bin/bash
root@ce5e7fe50200:/#
其中-t参数是让docker分配一个伪终端并绑定到容器的标准输入上,-i则让容器的标准输入保持打开。(相当于让docker可以和使用其他系统一样使用命令行进行交互)
exit或ctrl+D退出之后,容器也就处于了终止状态,因为bash程序结束了。
更多时候,需要容器在后台以守护态运行,可以通过添加-d参数来实现。
比如:
docker run –d ubuntu:14.04
可以使用docker stop终止一个正在运行的容器,命令格式为:
docker stop [–t|—time[=10]]
它会首先想容器发送SIGTERM信号,然后等待一段时间(默认10s),再发送SIGKILL信号终止容器。
当然,可以使用docker kill命令直接发送SIGKILL信号强行终止容器。
如果想重新启动一个容器只需要docker restart
因为在使用-d参数之后,容器启动之后便会进入后台,用户无法看到容器中的信息。某些时候需要进入容器进行操作,有多种方法进入容器,包括docker attach命令、docker exec命令,以及nsenter工具。
docker attach是docker自带的命令,使用简单docker attach 后面跟ID或容器名就可以,不过attach命令有时候并不方便,当多个窗口同时attach到同一个容器的时候,所有的窗口都会同步显示,当某个窗口因命令阻塞时,其他窗口也就没法进行别的操作了。
exec是docker 1.3版本提供的工具,可以直接在容器内运行命令,例如进入一个容器并启动一个bash:
docker exec –ti [ID|NAME] /bin/bash
nsenter是util-linux包2.23版本后包含的工具,并不是docker的自带工具,需要安装util-linux包,使用起来稍麻烦,不打算尝试。
使用docker rm指令便可以删除指定容器,语法格式:
docker rm [OPTIONS] CONTAINER[CONTAINER..]
支持的选项包括:
导出容器是指导出一个已经创建好的容器到一个文件,不管这个容器是否处于运行状态都可以导出。
使用导出命令docker export命令,该命令使用格式为:
docker export CONTAINER
比如:
docker export boring_galileo > dbserver.tar
可以将这些文件传输到其他机器上,在其他机器通过导入命令实现容器的迁移。
导出的文件又可以使用docker import命令导入,成为镜像,例如:
把刚才导出的文件再导入:
cat dbserver.tar | docker import – dbserver:lastest
这个效果和镜像的创建中的基于本地模板导入非常一致。
实际上,既可以通过docker load导出镜像存储文件到本地镜像库,又可以使用docker import命令导入一个容器快照到本地镜像库。这两者的区别在于容器快照文件将丢失所有的历史记录和元数据信息(即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积也要大。此外,从容器快照文件导入时可以重新指定标签等元数据信息。
标签:
原文地址:http://www.cnblogs.com/zhangmingcheng/p/5722432.html