🏡 博客首页:派 大 星
⛳️ 欢迎关注 ❤️ 点赞 🎒 收藏 ✏️ 留言
🎢 本文由派大星原创编撰
🚧 系列专栏:Docker—云原生
🎈 本系列记录容器化技术的初次探险与深入思考历程,如有描述有误的地方还望诸佬不吝赐教
详解Docker如何启动、终止、导入导出容器等操作
前言:什么是容器
容器(Container)
作为Docker
的核心组件之一,是独立运行的一个或一组应用,以及它们的运行态环境。对应的,虚拟机可以理解为模拟运行的一整套操作系统(提供了运行态环境和其他系统环境)和跑在上面的应用。其次容器和镜像之间的关系
,类似于面向编程中对象与类之间的关系`,因为容器是通过镜像来创建的,所以必须先有镜像才能创建容器,而生成的容器时一个独立于宿主机的隔离进程,并且有属于容器自己的网络和命名空间。
启动容器
启动容器有两种方式:
- 基于镜像新建一个容器并启动
- 将在终止状态
(stopped)
的容器重新启动
由于Docker 的容器实在太轻量级了,很多时候在实际操作时都是随时删除和新创建容器
①新建并启动
首先在启动一个容器时使用到的命令为docker run
在操作之前先通过一个简单地实例进行演示:使用命令输出一个Hello World
,之后终止容器
但是这和在本地直接执行/bin/echo 'Hello World'
有什么实际上的区别呢?
那么再使用命令启动一个bash
终端从而允许用户进行交互
在实际操作之前先来了解一下命令中的指令的含义:
-t
:让Docker分配一个伪终端并绑定到容器的标准输入上-i
:让容器的标准输入保持打开
在交互模式下,用户可以通过所创建的伪终端来输入命令从而使用
当使用docker run
来创建容器时,Docker在后台运行的标准操作包括:
- 检查本地是否存在指定的镜像,不存在就从公有仓库下载
- 利用镜像创建并启动一个容器
- 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
- 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
- 从地址池配置一个
ip
地址给容器 - 执行用户指定的应用程序
- 执行完毕后容器被终止
②启动已终止容器
启动已终止的容器可以使用docker start
命令将一个已经终止的容器启动运行
容器的核心为所执行的应用程序,所需要的资源都是应用程序运行所必须的,并且可以在启动的伪终端中利用ps
或者top
来查看进程信息
ps
:
top
:
从上述可见,容器中仅运行了指定的bash
应用,这种特点使得Docker
对资源的利用率极高
守护态运行
其实在更多的时候,需要让Docker
容器在后台以守护态(Daemonized)
形式运行,可以通过-d
参数来实现
例如执行下面的命令可以使容器在后台运行
[root@VM-4-14-centos /]# docker run -d ubuntu:12.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"
3011e07472795d12ee7fc029bdff7edb8b0f44510b275ea2341231e98541d26a
在容器启动后会返回一个唯一的id
,也可以通过docker ps
命令来查看容器信息
如果想要获取容器更多的输出信息,可以使用docker logs
命令来输出日志
[root@VM-4-14-centos /]# docker logs [容器ID]
hello world
hello world
hello world
hello world
...
终止容器
终止一个正在运行的容器可以使用docker stop
命令来实现
除此之外,当Docker
容器中指定的应用终结时,容器也自动终止
终止状态的容器可以使用docker ps -a
命令查看,如下:
并且处理终止状态的容器,可以通过docker start
命令来重新启动,或者可以使用docker restart
命令会将一个正在运行的容器终止,然后再重启该容器。
导出和导入容器
①导出容器
如果想要导出本地某个容器时,可以使用docker export
命令
通过以上的操作可以导出快照到本地文件
②导入容器快照
在导入本地容器快照可以使用docker import
从容器快照文件中再导入为镜像
注意📢:用户可以使用docker load
来导入镜像存储文件到本地镜像库,也可以使用docker import
来导入一个容器快照到本地镜像库,这两者的区别在于容器快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当前的快照状态),而镜像存储文件将保存完整的记录,体积也要大。
删除容器
可以使用docker rm
来删除一个处于终止状态的容器
[root@VM-4-14-centos /]# docker rm [容器ID]
[容器ID]