容器是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. Sea.js创始人玉伯的前端开发之路

    在Web应用程序的用户体验越来越被重视的今天,前端开发的地位也上升到了前所未有的高度,而随之而来的也有更多的挑战. 为了将前端开发者繁重的工作变得简单,框架应运而生.国内也不乏一些非常优秀的前端开发框 ...

  2. 运行时(iOS)

    运行时(iOS)   一.什么是运行时(Runtime)? 运行时是苹果提供的纯C语言的开发库(运行时是一种非常牛逼.开发中经常用到的底层技术) 二.运行时的作用? 能获得某个类的所有成员变量 能获得 ...

  3. JAVA String.format 方法使用介绍

    1.对整数进行格式化:%[index$][标识][最小宽度]转换方式        我们可以看到,格式化字符串由4部分组成,其中%[index$]的含义我们上面已经讲过,[最小宽度]的含义也很好理解, ...

  4. 3. PHP

    安装: apt-get install php5-fpm php5-mysql   配置: vi /etc/php5/fpm/php.ini cgi.fix_pathinfo=0   vi /etc/ ...

  5. nginx配置相关

    一.autoindex on; 能解决无端端的403问题. 二.NGINX配置超时时间 1.啥时候用到 用来设置请求资源和服务器返回的时间,保证一个请求占用固定时间,超出后报504超时!这样可以保证一 ...

  6. phpcms v9 模板调用代码大全

    另:每个栏目会对应当前所选模型的三个模板文件:  这些模板文件所在位置:phpcms/templates/default/content/ 目录下,如果想修改模板文件,只需要到此目录下找到对应的模板文 ...

  7. spring容器IOC创建对象<三>

    问题?Spring的DI讲解.DI有几种注入方式.一.spring的DI:依赖注入给属性赋值DI定义:一个对象类的属性可以使用springDI(依赖注入)来进行赋值,但是并不是所有的类属性都适合spr ...

  8. Cloudera CDH 、Impala本地通过Parcel安装配置详解及什么是Parcel

    本文引用自:Cloudera CDH .Impala本地通过Parcel安装配置详解及什么是Parcelhttp://www.aboutyun.com/forum.php?mod=viewthread ...

  9. Java高级之内存模型分析

    博客出自:http://blog.csdn.net/liuxian13183,转载注明出处! All Rights Reserved ! 下文是博主感悟,请带着怀疑性的态度阅读! 需要了解基本变量所占 ...

  10. 理解tornado

    计算密集型:多进程 IO密集型:多线程   能产生IO阻塞的情况很多,比如网络通讯.磁盘读写.当发生阻塞时,CPU是闲置的,此时如果就一个线程就没法处理其他事情了. 所以对于含有IO阻塞的环境,多线程 ...