从今天开始学习docker container

1.docker run

之前我们在学习制作镜像以及制作私有仓库的时候已经用到docker run -it以及docker run -d来临时运行一个容器和在后台运行一个容器了,

我们可以通过docker ps 和docker ps -a 来查看运行中的容器,和所有容器(包括状态为up和exited)

或者可以使用docker container ls以及docker container ls -a来查看docker container ,效果和docker ps 或docker ps -a一致

无论是docker ps -a还是docker container ls -a,我们都是通过-a这个参数来查看所有container 的,一般这种exited状态的容器并不是我们想要的结果,我们希望容器能一直时running的状态,这样才能被使用。

如何使容器长期保持运行状态呢?

1.首先我们运行一个容器:docker run -it <image>   -i:获得一个交互式连接,获取container的输入  -t:进入一个终端;这两个参数通常连用

打开另一个终端:docker ps

可以通过container ID 来判断我们在另一个终端打开的同一个容器的状态时运行中的(也可以通过ctrl+p,ctrl+q退出而不终止容器运行,可以使容器在后台保持运行)

2.可以通过执行一个长期运行的命令来保持容器的运行状态,例如执行一下命令:

while语句让bash不会退出,我们打开另外一个终端,可以看到容器为运行的状态

3.通过 :docker run -d <image>在后台运行一个容器

docker ps查看运行中的容器,可以看到容器为运行状态

在做docker run -d在后台运行的状态时,我发现了一个问题:当我使用base 镜像在后台运行容器的时候

通过docker ps发现这个容器并没有在后台运行,

实际是Exited状态的

为什么会出现docker run -d闪退的情况呢?

我们可以观察到运行中的容器中COMMAND都没有结束,而Exited状态的容器COMMAND都已经执行完结束了,所以说如果想要通过docker run -d的方法使容器在后台一直保持运行的状态:容器里就必须有一个前台的进程,容器运行的命令如果不是那些一直挂起的命令(比如运行top,tail),就是会自动退出的,这个是docker的机制问题,如果容器里面没有前台运行的进程,这样的容器,后台启动后,会立即自杀,因为他觉得他没事可做了.【这句话借鉴:http://blog.csdn.net/meegomeego/article/details/50707532】

总结:一开始的想法只是想让docker run -it的容器始终保持运行,因为我每次退出一个新建的容器之后他都会变为Exited的状态,如果让他保持运行的话,就要再打开一个终端;

          后来发现第二种方法,执行一个始终运行的命令,可以保持容器运行,但依然要占用另一个终端

          原本以为docker run -d的方法可以使任何容器都可以在后台保持运行的状态,但是在试验的过程中,又发现一些容器也不能在后台保持运行的状态,通过查资料等了解到:docker run -d在后台运行容器,并使其保持运行状态的话就必须有一个前台运行的进程。

          难道运行一个容器就必须运行个前台的进程吗,后来我又发现:通过docker run -it的方法运行一个容器,退出的时候不要使用ctrl+c,而是使用ctrl+p&ctrl+q可以保存退出,这个方法对docker run -d和命令法运行容器都不适用。

docker ps -a这个命令我们都知道是列出所有状态的容器

CONTAINER ID:容器的"短ID",我们使用docker run -d运行容器时会出现一行容器的“长ID”,短ID是长ID的前12个字符

可以通过容器的ID来启动或者停止容器;启动:docker start CONTAINER ID 停止:docker stop CONTAINER ID

IMAGE:容器使用的镜像

COMMAND:创建容器的时候使用的命令

CREATED:创建时间

STATUS:运行状态

PORTS:端口

NAME:容器名字,当我们没有指定容器名字的时候,会随机分配一个名字,我们可以通过--name来指定容器的名字,可以使用docker rename来更改容器的名字

容器按用途分类,可以分为:服务类容器和工具类容器

1.服务类的容器以进程daemon的形式运行,对外提供服务。比如web server,数据库等。适合通过docker run -d的方式在后台运行,如果要排查问题,可以通过docker exec -it的方式进入容器;

2.工具类的容器可以给我们提供一个临时的环境,可以通过docker run -it的方式运行,这种方式可以在容器创建完之后就进入容器,当然也可以使用docker exec -it的方式进入。工具类的容器通常使用base 镜像去创建:centos ,debian等。

centos7下安装docker(8.1运行容器)的更多相关文章

  1. centos7下安装docker(15.7容器跨主机网络---calico)

    Calico是一个纯三层的虚拟网络方案,Calico为每个容器分配一个IP,每个host都是router,把不同host的容器连接起来.与vxlan不同的是:calico不对数据包进行封装,不需要NA ...

  2. centos7下安装docker(13.4容器volume总结)

    最近我们学习了docker 存储,首先docker存储有两种:storage driver和data volume. storage driver是由镜像层和容器层组成的,可以通过docker ins ...

  3. centos7下安装docker(12.5容器在单个host上的网络总结)

    单个host上的容器的网络:通过本章的学习,我们知道docker默认有三种网络,可以通过docker network ls查看: none:封闭的网络,通过--network=none来指定: hos ...

  4. centos7下安装docker(12.3容器之间的连通性)

    我们接着盗图,如下: 在这张图上,可以看到,如果两个容器使用同一个bridge,那么两个容器之间是互相能通的 可以看到两个容器在同一个bridge下是可以互相ping通的 当两个容器在不同的bridg ...

  5. centos7下安装docker(8.3容器的常用操作)

    yu我们之前已经学习了如何运行容器docker run,也学习了如何进入容器docker attach和docker exec,下面我们来学习容器的其他操作: stop/start/restart 1 ...

  6. centos7下安装docker(9.1容器对资源的使用限制-CPU)

    默认情况下,所有容器可以平等的使用host上的CPU资源并没有限制 1.docker可以通过-c或者--cpu-shares设置容器使用的权重.如果不指定,默认值为1024. 与内存的限额不同,通过- ...

  7. centos7下安装docker(15.5容器跨主机网络--flanneld)

    flannel是由CoreOS研究的一种覆盖网络(overlay network)网络工具,目的是帮助每一个host主机有一个完整的子网: 功能是:让集群中不同节点的主机创建的容器都有一个唯一的虚拟I ...

  8. centos7下安装docker(13.2容器数据共享)

    回想一下我们学了两种存储方式:storage driver和data volume,其中又分为bind mount和docker managed volume,我们知道storage driver就是 ...

  9. centos7下安装docker(12.4容器如何与外部进行通信)

    1.容器如何访问外部 前面我们做了很多试验:只要host能连外网,使用默认bridge(docker0)创建得容器就能访问外网,那么容器是怎样访问外网的呢? 注:这里的外网不仅是internet,包括 ...

  10. centos7下安装docker(9.3容器对资源的使用限制-Block IO))

    Block IO:指的是磁盘的读写,docker 可以通过设置权重,限制bps和iops的方式控制容器读写磁盘的带宽 注:目前block IO限额只对direct IO(不使用文件缓存)有效. 1.B ...

随机推荐

  1. fiddler对Iphone6s进行抓包教程

    1.下载fiddler_4.6,点击下一步直接安装. 2.打开fiddler,选择tools-options,在https中勾选decrypt https traffic和ignore server ...

  2. springboot aop 自定义注解方式实现完善日志记录(完整源码)

    版权声明:本文为博主原创文章,欢迎转载,转载请注明作者.原文超链接 一:功能简介 本文主要记录如何使用aop切面的方式来实现日志记录功能. 主要记录的信息有: 操作人,方法名,参数,运行时间,操作类型 ...

  3. [译]WebAPI下的如何实现参数绑定

    本文将概述在WebAPI方式下将如何将参数绑定到一个action方法,包括参数是如何被读取,一系列规则决定特定环境采用的那种绑定方式,文章最后将给出一些实际的例子. Parameter binding ...

  4. webpack 学习总结demo

    github源码地址 https://github.com/ghshuo/webpack-demo webpack介绍 webpack 是一个现代 JavaScript 应用程序的静态模块打包器(mo ...

  5. PowerDesigner V16.5 安装教程以及汉化(数据库建模)

    一.power designer是什么以及是干什么的? power designer是能进行数据库设计的强大的软件,是一款开发人员常用的数据库建模工具.分别从概念数据模型(Conceptual Dat ...

  6. Http 概述

    Http是可靠的数据传输协议.   资源 Web服务器是Web资源(resource)的宿主.包括静态文件以及动态的内容.   媒体类型 Http对每种需要由web传输的对象都打上了名为MIME类型的 ...

  7. MEF 插件式开发之 小试牛刀

    MEF 简介 Managed Extensibility Framework 即 MEF 是用于创建轻量.可扩展应用程序的库. 它让应用程序开发人员得以发现和使用扩展且无需配置. 它还让扩展开发人员得 ...

  8. WindowsPhone8.1 开发技巧

    1.调用系统内置滤镜: Windows.ApplicationModel.CameraApplicationManager.ShowInstalledApplicationsUI(); 2.完全退出应 ...

  9. JavaScript复杂判断的更优雅写法

    摘要: 写代码是一门艺术. 原文:JavaScript 复杂判断的更优雅写法 作者:Think. 公众号:大转转fe Fundebug经授权转载,版权归原作者所有. 前提 我们编写js代码时经常遇到复 ...

  10. 【读书笔记】iOS-使用传感器

    和其他的高端智能机一样,iPhone携带了很多传感器:照相机,加速度计,GPS模块和数字指南针. 使用Core Motion框架,你的应用可以读取来自于加速度计,磁力计以及陀螺仪的运动数据. 近距离传 ...