云原生&Docker基础篇第3篇详解Docker如何启动终止导入导出容器等操作

Posted 派 大 星.

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了云原生&Docker基础篇第3篇详解Docker如何启动终止导入导出容器等操作相关的知识,希望对你有一定的参考价值。

🏡  博客首页:派 大 星

⛳️  欢迎关注  ❤️ 点赞  🎒 收藏  ✏️ 留言

🎢  本文由派大星原创编撰

🚧  系列专栏: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]

🔔🔔🔔 E n d i n g 🔔🔔🔔 🔔 🔔 🔔 Ending 🔔 🔔 🔔 🔔🔔🔔Ending🔔🔔🔔

Python学习笔记——基础篇第七周———FTP作业(面向对象编程进阶 & Socket编程基础)

FTP作业

本节内容:

  • 面向对象高级语法部分
  • Socket开发基础
  • 作业:开发一个支持多用户在线的FTP程序

  

面向对象高级语法部分

参考:http://www.cnblogs.com/wupeiqi/p/4766801.html 

 metaclass 详解文章:http://stackoverflow.com/questions/100003/what-is-a-metaclass-in-python 得票最高那个答案写的非常好

Socket 编程

参考:http://www.cnblogs.com/wupeiqi/articles/5040823.html

 

作业:开发一个支持多用户在线的FTP程序

要求:

  1. 用户加密认证
  2. 允许同时多用户登录
  3. 每个用户有自己的家目录 ,且只能访问自己的家目录
  4. 对用户进行磁盘配额,每个用户的可用空间不同
  5. 允许用户在ftp server上随意切换目录
  6. 允许用户查看当前目录下文件
  7. 允许上传和下载文件,保证文件一致性
  8. 文件传输过程中显示进度条
  9. 附加功能:支持文件的断点续传

以上Alex原文链接:http://www.cnblogs.com/alex3714/articles/5213184.html

 

以上是关于云原生&Docker基础篇第3篇详解Docker如何启动终止导入导出容器等操作的主要内容,如果未能解决你的问题,请参考以下文章

Python学习笔记——基础篇第七周———FTP作业(面向对象编程进阶 & Socket编程基础)

云原生 | Docker篇Docker架构 & 中央仓库 & 安装

云原生基础 docker & harbor

云原生 | Kubernetes篇深入万物基础-容器

云原生渐进式交付,刷 Argo CD 技术文档之 Understand The Basics & Core Concepts 篇

Python学习笔记——基础篇第六周——PyYAML & configparser模块