Docker中,容器是独立运行的一个或一组应用,以及应用运行的环境;对应传统的虚拟化,虚拟机可以理解为模拟操作系统和运行在上面的应用。
启动容器
启动容器一般有两种方式,一种是新建容器并启动,一种是将终止状态的容器重新启动,Docker容器非常的轻量级,能够很好的支持用户随时删除和创建容器。
新建并启动容器
docker使用docker run命令来新建并启动容器,如:
例如如下命令表示输出一个HelloWorld,之后终止容器。
|
下面是新建并启动一个容器,包含bash终端,允许用户进行交互
[root@legaoyun10514 ~]# docker run -i -t centos:7.2.1511 bin/bash [root@b3dbe17e8ce4 /]# uname -a Linux b3dbe17e8ce4 3.10.0-862.el7.x86_64 #1 SMP Fri Apr 20 16:44:24 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux [root@b3dbe17e8ce4 /]# cat /proc/version Linux version 3.10.0-862.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-28) (GCC) ) #1 SMP Fri Apr 20 16:44:24 UTC 2018 [root@b3dbe17e8ce4 /]# |
其中-i表示让容器的标准输入保持打开,-t表示让docker分配一个伪终端给容器,并绑定到容器的标准输入上
docker run命令的执行步骤是:
- 检查本地是否存在镜像,如果没有从共有仓库下载
- 利用镜像创建并启动一个容器
- 分配一个文件系统,并在只读镜像外面挂在一层可读写层
- 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
- 从地址池配置一个IP地址给容器
- 执行用户指定的应用程序
- 执行完毕后容器被终止
启动已终止容器
可以利用docker start命令,将一个已终止容器启动运行。
容器的核心是所执行的应用程序,所需要的资源都是应用程序所必须的,除此之外没有其他资源占用,可以在伪终端中利用top或者ps命令查看容器中的进程信息。
|
可以看到容器中只运行了bash应用,所以docker的虚拟化是非常轻量级的,对资源的利用率非常高。
使用docker ps命令可以查看docker容器列表,其中
默认,不加参数表示,所有启动状态的容器
|
使用 docker start启动已终止容器
|
后台(background)运行
一般情况下,需要docker容器在后台运行,而不是将容器的命令执行结果输出到宿主主机,后台运行docker容器可以通过-d参数来实现。
执行下面的命令,使用-d,和不适用-d的效果。
|
|
后台运行的容器,可以通过docker logs [容器id]命令来查看容器命令的执行结果,如:
[root@legaoyun10514 ~]# docker logs 48df4126c4a4 1 2 3 4 … … |
终止容器
使用docker stop来终止一个运行中的容器,如:
|
当docker容器中的应用程序终结时,docker容器也会终结,如只启动/bin/bash终端的容器,当exit或者ctrl+d终结时,容器终止。
docker restart可以重新启动一个容器
进入容器
使用docker run -d容器启动的docker容器,可以使用docker attach命令或者nsenter命令进入容器,进行操作。
attach命令
|
attache命令使用时是有弊端的,当多个终端同事attach到一个容器中的时候,所有的窗口都会同步显示,当某个窗口的应用阻塞是,所有的终端也都会阻塞。
nsenter命令
通过-d参数启动容器后,根据容器id查询容器信息,容器信息中包含容器的进程ID
|
通过这个进程id就可以连接到容器中去
|
导入导出容器
导出容器
使用docker export命令导出容器到本地文件系统,导出的文件称为容器的快照
|
导入容器快照
使用docker import命令导入本地快照为镜像,并制定镜像标签
|
使用docker load,docker import,docker save,docker load命令的区别:
- docker import可以重新指定镜像的名字,docker load不可以
- docker export是保存容器的当前状态,会丢失历史数据和元数据
- docker save用于持久化镜像,不会丢失历史数据和元数据
- docker load用于导入镜像,不能指定镜像的名称
删除容器
可以使用docker rm来删除一个处于终止状态的容器,但是不能删除运行状态的容器,如
[root@legaoyun10514 lot]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6e8941b320c4 centos:7.2.1511 "/bin/bash" 11 minutes ago Up 11 minutes zen_mirzakhani ebc3700aa8b1 centos:7.2.1511 "/bin/bash" 21 minutes ago Exited (0) 11 seconds ago eager_roentgen [root@legaoyun10514 lot]# docker rm zen_mirzakhani Error response from daemon: You cannot remove a running container 6e8941b320c4d8a833944888bf421b07deba49d6dc8cdac0293cc7f1d7e91895. Stop the container before attempting removal or force remove [root@legaoyun10514 lot]# docker rm eager_roentgen eager_roentgen [root@legaoyun10514 lot]# |
如果要删除运行状态的容器,需要使用docker rm -f 命令来删除
清理所有处于终止状态的容器
删除所有终止状态的容器
docker rm $(docker ps -a -q)
删除所有容器
docker rm -f $(docker ps -a -q)
(完)