原文:5.容器管理【Docker每天5分钟】

Docker给PaaS世界带来的“降维打击”,其实是提供了一种非常便利的打包机制。该机制打包了应用运行所需要的整个操作系统,从而保证了本地环境和云端环境的高度一致,避免了用户通过“试错”来匹配不同运行环境间差异的痛苦。

  接下来来讲解Docker三大组件之一的容器,如果说镜像是静态的只读文件,那么容器就是带有运行时需要的可写文件层。也可以这样理解,镜像是对象的模板——类,容器是类生成的对象,镜像只有一个,对象可以有很多个。

创建容器

1.新建容器

docker create -it ubuntu:lastest

该命令创建的容器处于停止状态,可以使用docker start启动。

2.启动容器

docker start 容器id

3.创建并启动容器

等价于docker create,再执行docker run

下面的指令,输出一个hello world后,自动终止。

docker run ubuntu /bin/echo 'hello'

该指令背后一系列别隐藏操作,包括:

  • 检查本地是否存在指定的镜像,不存在就从公有仓库下载;
  • 利用镜像创建一个容器,并启启动该容器;
  • 分配一个文件系统给容器,并在只读的镜像层外面挂载一层可读写层;
  • 从宿主主机配置的的网桥接口中,桥接一个虚拟接口口到容器中;
  • 从网桥的地址池配置一个IP地址给容器, 口执行用户指定的应用程序;
  • 执行完后,容器被自动终止。

下面的命令启动一个bash终端,允许用户进行交互:

docker run-it ubuntu:14.04 /bin/bash

其中,-t 选项让docker分配一个伪终端并绑定到容器的标准输入上,-i 则让容器的标准输入保持打开。 更多的命令选项可以通过 man docker - run命令来查看。

在容器内用ps命令查看进程,可以看到只运行了bash应用,并没有运行其的进程。

用户可以按ctrl+d或输入exit命令来退出容器。

4.守护态运行

更多的时候,需要让docker容器在后台以守护态形式运行。此时通过添加 -d 参数来实现。

下面的命令会在后台运行容器:

docker ubuntu /bin/sh -c "while true; do echo hello world; sleep 1;done"

ce554267d7a4c34eefc92c5517051dc37b918b588736d0823e4c846596b04d83

容器启动后会返回一个唯一的id。

此时,要获取容器的输出信息,可以用docker logs ce5

终止容器

docker stop ce5

终止的容器通过 docker start重新启动

docker restart 会将运行容器先终止,然后重新启动

进入容器

在使用-d参数时,容器启动后会进人后台,用户无法看到容器中的信息,也无法进行操作。

这个时候如果需要进入容器进行操作,有多种方法,包括使用官方的 attach或exec命令,以及第三方的 nsenter工具等。

1.attach

docker run -it ubuntu

docker ps

docker attach 容器id

2.exec[推荐]

例如,进人到刚创建的容器中,并启动bash

docker exec -it 453698741 /bin/bash

root @453698741: /#

可以看到,一个 bash终端打开了,在不影响容器内其他应用的前提下,用户户可以很容易与容器进行交互。

过指定 -it 参数来保持标准输入打开,并且分配一个伪终端。

该操作是最为推荐的方式!

删除容器

可以使用docker rm命令来删除处于终止或退出状态的容器,但不能删除处于运行状态的容器,

如果要直接删除一个运行中的容器,可以添加 -f,终止运用后,强行删除。

导入导出容器

某些时候,需要将容器从一个系统迁移到另外一个系统,此日时可以使用docker的导入和导出功能。

1.导出容器

导出容器是指导出一个已经创建的容器到一个文件,不管此时这个容器是否处于运行状态,可以使用docker export命令,该命令的格式为docker export [-o | output [=""]] 容器id。其中,可以通过-o选项来指定导出的tar文件名,也可以通过重定向来实现。

docker export -o demo.tar e12

docker export r78 > demo2.tar

2.导入容器

docker import demo.tar - test/ubuntu:v1.0

该命令和docker load导入镜像十分相似,这两者的区别在于容器快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态)而镜像存储文件将保存完整记录,体积也更大。

小结

容器是直接提供应用服务的组件,也是docker实现快速启停和高效服务性能的基础。在生产环境中,因为容器自身的轻量级特性,笔者推荐使用容器时,在一组容器前引高可靠性机制。

例如使用Haproxy工具来代理容器访问,这样在容器出现故障时,可以快速切换到功能正常的容器。此外,建议通过指定合适的容器重启策略,来自动重启退出的容器。

如果对Docker有更深的洞察,欢迎补充和讨论,感谢您的捧场。

5.容器管理【Docker每天5分钟】的更多相关文章

  1. Docker容器管理——Docker容器常用命令

    1.查看所有的容器 docker ps 2.查看运行的容器 docker ps -a 3.启动.停止.重启docker容器 docker start ... docker stop ... docke ...

  2. docker 容器管理常用命令

    Docker 容器管理: docker create -it centos //这样可以创建一个容器,但该容器并没有启动: create Create a new container 创建一个容器: ...

  3. docker 容器管理上

    Docker 容器管理: docker create -it centos //这样可以创建一个容器,但该容器并没有启动: docker start container_id //启动容器后,可以使用 ...

  4. docker简单介绍----镜像和容器管理

    docker可以分为三部分:docker镜像   docker仓库  docker容器 docker镜像:一个image可以包含一个镜像,也可以理解为一个系统模板,里面安装了相关应用,也可以是纯净版的 ...

  5. docker容器管理及网络管理

    防火墙规则—— INPUT 主要用于主机防火墙,设置规则屏蔽处理进入本机的数据包示例:禁止10.180.100.141这个机器访问我本机的web服务iptables -t filter -A INPU ...

  6. Docker 容器管理:rancher

    Rancher:https://www.cnrancher.com/ 是一个开源的企业级全栈化容器部署及管理平台. 定位上和 K8s 比较接近,都是通过 web 界面赋予完全的 docker 服务编排 ...

  7. 不止Docker:8款容器管理开源方案

    Docker诞生于2013年,并普及了容器的概念,以至于大多数人仍然将容器的概念等同于"Docker容器". 作为第一个吃螃蟹的人,Docker设置了新加入者必须遵守的标准.例如, ...

  8. [CoreOS 转载] CoreOS实践指南(七):Docker容器管理服务

    转载:http://www.csdn.net/article/2015-02-11/2823925 摘要:当Docker还名不见经传的时候,CoreOS创始人Alex就预见了这个项目的价值,并将其做为 ...

  9. [docker] 管理docker容器中的数据

    之前我们介绍了Docker的基本概念(前面的没翻译...),了解了如何使用Docker镜像进行工作,并且学习了网 络和容器之间的链接.这一节我们将讨论如何管理容器中及容器之间的数据. 我们将查看下面两 ...

随机推荐

  1. 洛谷—— P1629 邮递员送信

    https://www.luogu.org/problem/show?pid=1629 题目描述 有一个邮递员要送东西,邮局在节点1.他总共要送N-1样东西,其目的地分别是2~N.由于这个城市的交通比 ...

  2. Silverlight 应用程序中未处理的错误

    Silverlight 开发中遇到个错误: SCRIPT5022: Silverlight 应用程序中未处理的错误 代码: 2108 类别: InitializeError 消息: 无法下载初始屏幕或 ...

  3. 关于cocos2dx之lua使用TableView

    在手机游戏的开发中,滚动是一项很重要的操作,而cocos2dx中使用的最广泛的就属于TableView了,只是由于cocos2dx的接口比較晦涩,所以须要一个熟悉的过程.本文主要解说怎样使用Table ...

  4. js插件---10个免费开源的JS音乐播放器插件

    js插件---10个免费开源的JS音乐播放器插件 一.总结 一句话总结:各种插件都有很多,多去找. 二.js插件---10个免费开源的JS音乐播放器插件 亲测可用 音乐播放器在网页设计中有时候会用到, ...

  5. js深拷贝的实现方式

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. JeeSite信息化快速开发平台

     平台简介 JeeSite是基于多个优秀的开源项目,高度整合封装而成的高效,高性能,强安全性的开源Java EE快速开发平台. JeeSite是您快速完成项目的最佳基础平台解决方案,JeeSite是您 ...

  7. 深入了解"网上邻居"原理

    说到“网上邻居”,相信很多人都很熟悉.但是说起“网上邻居”的工作机制,可能大家就不太清楚了. 要说“网上邻居”的工作机制,不妨联系一下生活中的例子:比如我(A),要拜访一个远方的朋友(B),我要去他的 ...

  8. js数组详解:

    一. 数组的浅复制与深复制: 数组之间的复制,由于数组是引用类型,如果是字面量式复制,导致只要是改变其中一个数组的值两者都会发生变化,这种复制叫做浅复制.如果要想复制后不收影响,则需要深复制.深复制就 ...

  9. django模型系统二

    常用查询及表关系的实现 1.常用查询 每一个django模型类,都有一个默认的管理器 objects QuerySet表示数据库中对象的列表,它可以有0到多个过滤器.过滤器通过给定参数,缩小查询范围. ...

  10. git把本地文件上传到github上的步骤

    1.清除clean 2.返回上一级cd .. 3.克隆仓库地址git clone+地址 4.添加忽悠文件vim .gitignore 5查看cat .gitignore 6.进入到test,并且添加所 ...