容器是Docker第二个核心概念,简单的的说容器是镜像的一个运行实例,所不同的是,它带有额外的可写文件层。

如果说虚拟机是模拟运行了一整套操作系统(提供运行态环境和其他系统环境)和跑在上面的应用。那么Docker容器就是独立运行的一个或一组应用,以及他们的必须运行环境。

新建容器

Docker的容器十分轻量,用户可以随意的创建或删除容器。

可以使用docler create创建一个容器,比如创建一个Mysql的容器:

 docker create –it mysql:latest

然后使用ps命令就可以查看所有的容器,不过要加上-a参数,因为create后的容器默认是不开启的。

docker ps –a
CONTAINER ID        IMAGE              COMMAND                CREATED              STATUS                   PORTS               NAMES
5f660cfdf9b1        mysql:latest        “/entrypoint.sh —na   About a minuteago                                                goofy_newton        
d8990fec2141        ubuntu:latest       “/bin/bash”            3 hours ago          Exited (0) 3hours ago                       serene_payne

如果要开启这个容器,就需要docker start

 docker start 5f660cfdf9b1

在start可以加ID,也可以加容器的名字,可以用–name在创建的时候为容器起名字,如果不起名的话,docker会自动为它分配一个。

新建并启动容器

启动容器的方式有两种,一是创建一个容器并启动这个容器,另一种就是一个将一个处于终止状态的容器重新启动。

如果是创建一个容器并立即启动,就是使用的docker run命令,这个命令等价与docker create 加 docker start。

当用docker run来创建一个容器时,操作包括:

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

比如使用ubuntu镜像执行bash终端,允许用户进行交互:

 docker run –t –i ubuntu:14.04 /bin/bash

 root@ce5e7fe50200:/#

其中-t参数是让docker分配一个伪终端并绑定到容器的标准输入上,-i则让容器的标准输入保持打开。(相当于让docker可以和使用其他系统一样使用命令行进行交互)

exit或ctrl+D退出之后,容器也就处于了终止状态,因为bash程序结束了。

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

比如:

docker run –d ubuntu:14.04

终止容器

可以使用docker stop终止一个正在运行的容器,命令格式为:

 docker stop [–t|—time[=10]]

它会首先想容器发送SIGTERM信号,然后等待一段时间(默认10s),再发送SIGKILL信号终止容器。

当然,可以使用docker kill命令直接发送SIGKILL信号强行终止容器。

如果想重新启动一个容器只需要docker restart

进入容器

因为在使用-d参数之后,容器启动之后便会进入后台,用户无法看到容器中的信息。某些时候需要进入容器进行操作,有多种方法进入容器,包括docker attach命令、docker exec命令,以及nsenter工具。

attach命令

docker attach是docker自带的命令,使用简单docker attach 后面跟ID或容器名就可以,不过attach命令有时候并不方便,当多个窗口同时attach到同一个容器的时候,所有的窗口都会同步显示,当某个窗口因命令阻塞时,其他窗口也就没法进行别的操作了。

exec命令

exec是docker 1.3版本提供的工具,可以直接在容器内运行命令,例如进入一个容器并启动一个bash:

 docker exec –ti [ID|NAME] /bin/bash

nsenter工具

nsenter是util-linux包2.23版本后包含的工具,并不是docker的自带工具,需要安装util-linux包,使用起来稍麻烦,不打算尝试。

删除容器

使用docker rm指令便可以删除指定容器,语法格式:

 docker rm [OPTIONS] CONTAINER[CONTAINER..]

支持的选项包括:

  • -f,–force=false 强行终止并删除一个运行中的容器
  • -l,–link=false 删除容器链接,但保留容器
  • -v,–columes=false删除容器挂载的数据卷

导出容器

导出容器是指导出一个已经创建好的容器到一个文件,不管这个容器是否处于运行状态都可以导出。

使用导出命令docker export命令,该命令使用格式为:

 docker export CONTAINER

比如:

 docker export boring_galileo > dbserver.tar

可以将这些文件传输到其他机器上,在其他机器通过导入命令实现容器的迁移。

导入容器

导出的文件又可以使用docker import命令导入,成为镜像,例如:

把刚才导出的文件再导入:

 cat dbserver.tar | docker import – dbserver:lastest

这个效果和镜像的创建中的基于本地模板导入非常一致。

实际上,既可以通过docker load导出镜像存储文件到本地镜像库,又可以使用docker import命令导入一个容器快照到本地镜像库。这两者的区别在于容器快照文件将丢失所有的历史记录和元数据信息(即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积也要大。此外,从容器快照文件导入时可以重新指定标签等元数据信息。

Docker容器管理的更多相关文章

  1. docker 容器管理常用命令

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

  2. docker 容器管理上

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

  3. Docker-compose 多个Docker容器管理:以MYSQL和Wordpress为例

    搬砖的陈大师版权所有,转载请注明:http://www.lenggirl.com/tool/docker-compose.html Docker-compose 多个Docker容器管理:以MYSQL ...

  4. Docker系列三:Docker容器管理

    Docker容器管理 1. 单一容器管理 1) 容器的启动 $ docker run --name gitlab-redis -d --volume /srv/docker/gitlab/redis: ...

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

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

  6. docker容器管理-含静态Ip(10)

    docker run命令详解 docker run -t #表示分配一个伪终端 -i #表示让容器的标准输入打开,不跟这个参数容器启不来 -d #后台运行 -P #dockerfile中EXPOSE ...

  7. Docker学习第二天(Docker容器管理)

    简介 emmmm Docker 容器管理 推荐文章:容器技术概述 run里面的子选项 1.使用run命令创建容器 docker container run -it ubuntu /bin/bash / ...

  8. 四、docker容器管理

    一.docker容器管理 1.1 容器查看-ps命令 显示本地容器列表,但是默认不显示关闭的容器,只显示运行中的容器,除非加上命令选项 -a 用法:docker ps [-a 显示所有容器,默认只显示 ...

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

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

  10. Docker 容器管理

    单一容器管理 容器的标识符 每个容器被创建后都会分配一个CONTAINER_ID作为容器的唯一标识符,后续的启动.停止等操作都通过CONTAINER_ID来完成的. CONTAINER_ID很难记忆, ...

随机推荐

  1. 【C语言】10-字符和字符串常用处理函数

    一.字符处理函数 下面介绍的两个字符处理函数都是在stdio.h头文件中声明的. 1.字符输出函数putchar putchar(65); // A putchar('A'); // A int a ...

  2. [HihoCoder] Highway 高速公路问题

    Description In the city, there is a one-way straight highway starts from the northern end, traverses ...

  3. iOS - AVAudioPlayer 音频播放

    前言 NS_CLASS_AVAILABLE(10_7, 2_2) @interface AVAudioPlayer : NSObject @available(iOS 2.2, *) public c ...

  4. 利用onekeyup即可实现验证码的点击刷新功能

    显示验证码 首先在Home/Controller下创建一个公共控制器PublicController 1 <php2 namespace Home\Controller;3 4 use Thin ...

  5. c#String的不变特性,可读但不可写性

    谈到字符串,大家自然觉得简单,但是总是有一些小的问题隐约出现,下面我就系统的说一下字符串的问题,有说不到日后再予补充. 1,首先String是一个类,string只是String类的一个别名,别名的意 ...

  6. 【转载】存储scale-up和scalce-out架构

    转自:存储scale-up和scalce-out架构 存储scale-up和scalce-out架构 Scale-up,即纵向扩展架构.从下面的拓扑图我们可见,纵向扩展是利用现有的存储系统,通过不断增 ...

  7. PHP json_decode 函数解析 json 结果为 NULL 的解决方法

    在做网站 CMS 模块时,对于模块内容 content 字段,保存的是 json 格式的字符串,所以在后台进行模块内容的编辑操作 ( 取出保存的数据 ) 时,需要用到 json_decode() 函数 ...

  8. 【Objective-C】Windows下Objective-C开发环境配置

    [Objective-C]Windows下Objective-C开发环境配置 ftp://ftpmain.gnustep.org/pub/gnustep/binaries/windows/   最近打 ...

  9. 批量清除BOM头

    批量清除BOM头 (2012-03-05 13:28:30) 转载▼ 标签: 杂谈   有些php文件由于不小心保存成了含bom头的格式而导致出现一系列的问题.以下是批量清除bom头的代码,复制代码, ...

  10. 状态模式 java && php

    状态模式 java && php     状态模式 输入信号是事件:输出是状态结果,状态模式状态机就是一个黑盒子.状态模式主要突出了两个字:”改变”,对象的状态决定了状态的行为,事物的 ...