Docker是一个能把开发的应用程序自动部署到容器的开源引擎。Docker是新的容器化技术,轻巧,易移植[Build Once, Configure Once And Run Anywhere]。Docker引擎的基础是Linux容器[LXC]技术,我们可以简单的将Docker容器理解为一种沙盒,每个容器内运行一个应用,不同容器相互隔离,容器间可以建立通信机制。

Docker具有速度快、隔离框架优雅、物美价廉、CPU/内存消耗低、快速开关机、跨云计算基础架构等特性,所以Docker具有以下几方面优势:

>> 缩短开发周期,实现快速的交付和部署

>> 高效的资源利用

>> 轻松的迁移和扩展

>> 简单的更新管理

直观参数对比传统的虚拟机,如下图

Docker有三个组件和三个基本元素

三个组件分别是:

Docker Client是用户界面,它支持用户与Docker Daemon之间的通信

Docker Daemon运行于主机上,处理服务请求。

Docker Index是中央registry[仓库] Hub,支持拥有共有与私有访问权限的Docker容器镜像的备份

三要素分别是:

Docker Containers负责应用程序的运行,包括操作系统、用户添加的文件以及元数据。

Docker Images是一个只读模板,用来运行Docker容器

DockerFile是文件指令集,用来说明如何自动创建Docker镜像

Docker是一个C/S架构的程序。Docker客户端只需向Docker服务器或者守护线程发出请求。服务器或守护进程将完成所有工作并返回结果。Docker提供了一个命令行工具以及一整套RESTful API。你可以在同一台宿主机上运行Docker守护进程和客户端,也可以用本地的Docker客户端连接远程Docker守护进程

Docker 镜像是一个构建容器的只读模板,它包含了容器启动所需的所有信息,包括运行程序和配置数据。Docker镜像是由文件系统叠加而成的。自低而上分别是:引导文件系统[bootfs] -> root文件系统[rootfs] -> 只读文件系统-> 读写文件系统

root文件系统+只读文件系统被称为镜像,镜像是可以叠放的,最下层的称为基础镜像[base image]、下面层的为父镜像,当docker容器启动时。docker会加载最顶层的读写文件系统,我们程序就是在读写层中执行的

Docker 容器类似于一个轻量级的沙盒,Docker利用容器来运行和隔离应用[容器间是线程隔离的]。容器是镜像创建的应用运行实例,容器中可以运行一个或多个进程。Docker容器可以将其启动、开始、停止、删除,而这些容器都是相互隔离、互不可见的。

Docker 仓库是Docker镜像文件存放的场所。Docker仓库分为共有和私有两种。Docker仓库和注册服务器[registry]的区别,如下图:

Docker API 在Docker生态系统中一共有三种API[RESTful风格]

>> RegistryAPI 提供了与来存储Docker镜像的DockerRegistry集成功能

>> DockerHub API 提供了与Docker Hub集成的功能

>> DockerRemote API 提供与Docker守护进程进行集成的功能

Docker 安装:

http://blog.csdn.net/mickjoust/article/details/51578629

http://www.cnblogs.com/zzcit/p/5845717.html

Docker 常用命令:

#####################################################################

Docker info -->查看docker系统信息

#####################################################################

Docker version--> 查看docker版本号

#####################################################################

Docker images <参数> <仓库>-->本地系统中有哪些镜像

参数:

-a 列出本地所有的镜像含中间映像层

--digests 显示镜像的摘要信息

-f 显示满足条件的镜像

例如:

显示仓库是nginx的镜像:

#####################################################################

Docker rmi <参数> <镜像>--> 删除某个镜像

参数:

-f 强制删除

#####################################################################

Docker build <参数> <容器> -->利用DockerFile创建镜像

参数:

-t 给镜像添加一个标签[tag]

-q 安装模式,直接输出结果

#####################################################################

Docker history <镜像> --> 查看docker 镜像的历史版本[或者说创建过程]

例如:

#####################################################################

Docker save -o<保存文件名> <镜像>--> 把镜像保存到打包文档中

参数:

-o = output 保存的文件名

例如:

#####################################################################

Docker load [-i 文件]|[< 文件] --> 从打包文件或者STDIN加载一个镜像

例如:

#####################################################################

Docker import <容器> --> 导入文件并创建镜像

#####################################################################

Docker pull <镜像> --> 从远端拉取一个镜像

#####################################################################

Docker push <镜像> --> 将镜像推送到DockerRepository[镜像仓库],需要注册账户才能上传自制镜像

#####################################################################

Docker search <参数> <镜像> -->在Docker Registry中查找镜像

参数:

-s 列出收藏次数不小于指定次数的镜像

#####################################################################

Docker login <参数> <仓库>--> 登陆到一个Docker镜像仓库[默认Docker Hub]

参数:

-u 用户名

-p 密码

#####################################################################

Docker logout 登出Docker镜像

#####################################################################

Docker commit <参数> <容器> -->提交一个新镜像

参数:

-a = --author

-c = --change

-m 提交的信息

-p 暂停容器在提交的时候

#####################################################################

Docker cp 宿主机目录 容器目录 --> 用于容器和宿主机之间的数据拷贝

例如:

#####################################################################

Docker diff <容器> --> 检查容器里文件结构的更改

#####################################################################

Docker ps <参数> --> 列出所有的容器

-a:列出所有的正在执行和停止的容器

-n:后面跟显示行数

-q:只输出容器ID

例如:

docker ps -n 10 列出前十个容器

#####################################################################

Docker inspect<参数> <容器>--> 查看容器信息

#####################################################################

Docker top <容器> --> 查看容器中运行的进程信息

#####################################################################

Docker attach <容器> --> 进入某个容器[Ctrl+ D 退出容器]

#####################################################################

Docker events <参数> --> 从服务器获取实时事件

参数:

-f  根据条件过滤事件

--since 指定时间戳后的所有事件

--until 显示到指定时间为止

#####################################################################

Docker logs <参数> <container name|container ID> --> 查看容器日志

参数:

-f 动态监控Docker日志

-tail 列出最新N条容器日志

#####################################################################

Docker export <参数> <容器>--> 导出容器到STDOUT

参数:

-o 将输入内容写到文件中

#####################################################################

Docker port <镜像> <端口号>--> 查看端口映射情况

#####################################################################

Docker run <参数> <镜像> <初始命令> --> 基于镜像创建启动一个容器

TIPS:

Docker create 也可以创建一个镜像,但是创建的容器是出于停止状态,也就是说docker create + docker start = docker run

参数:

-i:以交互模式运行容器

-t:容器启动后会进入其命令行[分配一个伪终端],Ctrl + d 退出容器

-v:需要将本地哪个目录挂载到容器中 | -v <宿主机目录>:<容器目录>

比如docker.cn/docker/centos:centos7

-p:端口映射

-P:对外公开dockerfile中EXPOSE指定的端口

-d:以后台方式运行容器[会创建一个守护线程]

-e:传递一个环境变量

--name 设置容器的名称

--restart 设置容器重启的标志[有always、on-failure等]

例如:

-p 2222:3333 指定docker虚拟机的2222端口,映射为container的3333  端口,要访问就需要xxx.xxx.xxx.xxxx:3333

镜像ID:可以用[仓库名:标签名]的形式代替

初始命令:一般进入命令行交互用 /bin/bash[bash shell 一般默认的linux默认的shell] shell是壳的意思,表明这个是操作系统和人的交互平台,windows的桌面也是一个shell

例如:

#####################################################################

Docker start <容器> --> 启动某个容器

Docker restart 的不同之处在与它会停止正在运行的某个容器并启动它

#####################################################################

Docker stop <容器> --> 停止某容器

它会首先向容器发送 SIGTREM 信号,等待一段时间后再发送SIGKILL 信号终止容器

Docker kill 是强制关闭容器没有Docker stop那么优雅

#####################################################################

Docker exec <参数> <容器> <命令> --> 在容器中执行命令

docker exec 的功能比docker attach强大很多,进入容器同时可以动态的加入新的命令执行

参数:

-d 分离模式:在后台运行

-i 即使没有附加也保持STDIN打开

-t 分配一个伪终端

比如:

#####################################################################

Docker rm <参数> <镜像> -->删除某个容器

参数:

-f 强力删除正在运行的容器

-l 移除容器间的链接

-v 移除与容器关联的空间

#####################################################################

Docker port <容器> --> 查看docker容器的端口映射

#####################################################################

Docker pause <容器> --> 暂停容器中所有进程

Docker unpause<容器> --> 恢复容器中所有进程

#####################################################################

Docker help -->查看所有的docker命令

#####################################################################

Docker-machine sshdefault[虚拟机名字] --> 进入toolbox中运行的虚拟机[仅限于Windows中]

Dockfile 是由一行行命令语句组成,并且支持#开头的注释行。Dockerfile分为以下四分部:

四部分

指令

基础镜像信息

FROM

维护者信息

MAINTAINER

镜像操作指令

RUN、COPY、ADD、EXPOSE等

容器启动时执行命令

CMD、ENTRYPOINT

FROM <imagename> --> 告诉Docker我们的镜像是基于哪一个镜像

MAINTAINER<author name> --> 设置镜像的作者

RUN <commad>--> 在指定镜像里执行命令,默认的是使用 /bin/sh -c来执行[也可以使用exec格式的RUN指令]

ADD <源文件> <目标路径>--> 复制文件 还有自动解压归档文件的功能

CMD --> 在容器运行时提供一些命令及参数[可被DockerRun覆盖]

ENTRYPOINT --> 在容器运行时提供一些命令及参数[不可被DockerRun覆盖]

EXPOSE --> 指定容器在运行时监听的端口

WORKDIR --> 指定RUN、CMD、ENTRYPOINT命令的工作目录

ENV <key><value> --> 设置环境变量[键值对]

USER --> 设置容器运行时的UID

VOLUME --> 用于让你的容器访问宿主主机上的目录

ONBUILD --> 为镜像添加触发器触发器会在build过程中插入新的指令

TIPS

>> 删除所有Docker ID和Tag为none的镜像

docker images | grep none | awk ‘{print $3}’| xargs docker rmi  ==> 可以引申到删除没用或者停止的Docker Container

>> Dockerfile中WORKDIR与RUN cd的区别

WORKDIR是切换当前的工作目录,所以对后面的语句也生效。RUN cd只是对当前这条语句生效,但是工作目录还是没有变[默认的工作目录是根目录/]

>> docker hub与docker registry的工作区别

docker hub: 复制保存集中的信息访问:用户账户、镜像的校验码、共有和私有镜像仓库的区别等。docker hub有以下几个组件:Web UI、Meta-data元数据存储、访问认证、token管理

参考资料:

《第一本Docker书》

《Docker技术入门与实战》

DockerOne翻译的Docker入门教程

runoob.com的Docker菜鸟教程

Docker 入门基础的更多相关文章

  1. Docker入门基础(一)

    Docker入门基础 Linux只存在文件目录,不存在“盘”的概念 Dockers优点:方便部署环境.资源占用少(微服务) Docker的三大概念 镜像:类似虚拟机的镜像.用俗话说就是安装文件.容器: ...

  2. docker入门 基础命令 docker安装

    docker入门   在学一门新知识的时候,超哥喜欢提问,why?what?how? wiki资料 什么是docker Docker 最初是 dotCloud 公司创始人 Solomon Hykes ...

  3. Docker | 入门 & 基础操作

    Dcoker 入门 确保docker 已经安装好了,如没有装好的可以参考:Docker | 安装 运行第一个容器 docker run -it ubuntu /bin/bash docker run ...

  4. docker入门、LXC、windows container 和 Hyper知识基础、实用情况

    虚拟机与容器 很明显可以看出两者在操作系统级别上的隔离和进程上的隔离的区别,VM因为隔离级别更高明显更重. linux容器主要技术特点: 文件系统隔离:每个容器都有自己的root文件系统 进程隔离:每 ...

  5. Docker入门篇(一)之docker基础

    1.Docker 架构 http://blog.csdn.net/u012562943/article/category/6048991/1Docker 使用客户端-服务器 (C/S) 架构模式,使用 ...

  6. 第三章 Docker 入门

    第三章 docker 入门 3.1 确保docker已经就绪 首先查看docker程序是否存在,功能是否正常 [#3#cloudsoar@cloudsoar-virtual-machine ~]$su ...

  7. Docker入门教程(三)Dockerfile

    Docker入门教程(三)Dockerfile [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第三篇,介绍了Dockerfile的语法,DockerOn ...

  8. Docker入门教程(二)命令

    Docker入门教程(二)命令 [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第二篇,介绍了Docker的基本命令以及命令的用法和功能. 在Docker ...

  9. Docker入门教程(一)介绍

    http://dockone.io/article/101 Docker入门教程(一)介绍 [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第一篇,介绍了 ...

随机推荐

  1. nginx启用https访问

    什么是https? https 全称:Hyper Text Transfer Protocol over Secure Socket Layer,是http的安全版.即http下加入SSL协议层,因此 ...

  2. 【BZOJ 3238】[Ahoi2013]差异

    [链接]h在这里写链接 [题意]     还有更简洁的题目描述吗/xk [题解]     对于lenti+lentj这一部分,比较好处理.     可以弄一个前缀和.     然后O(N)扫描一遍. ...

  3. UIActionSheet上加入UIPickerView iOS8替换方案

    此套替换方案採用"UIView+动画"方式实现(将UIActionSheet替换为UIView) 界面层级例如以下: 第一层:view(这一层充满整个屏幕,初始化时颜色为透明.us ...

  4. 25、写一个USB摄像头驱动程序(有ioctrl分析)

    videobuf2-core.h中的vb2_buffer,记录了v4l2_buffer ,驱动可以对vb2_buffer的v4l2_buffer进行操控, vb2_buffer是v4l2框架层的代码, ...

  5. thinkphp3.2二维码扩展

    //简易二维码 public function qrcode(){ Vendor('phpqrcode.phpqrcode'); //生成二维码图片 $object = new \QRcode(); ...

  6. Android中对手机文件进行读写 分类: H1_ANDROID 2013-10-23 22:48 512人阅读 评论(0) 收藏

    参考张泽华视频 (一)读写手机内存卡中的文件 对手机中的文件进行读写操作,或者新增一个文件时,可直接使用openFileOutput  /  openFileInput 得到文件的输出.输入流. Fi ...

  7. 调用另一个Activity 分类: H1_ANDROID 2013-09-22 14:11 2217人阅读 评论(0) 收藏

    参考自Google官方文档Traning/Getting Started/Building a simple user interface, Startinganother activity,http ...

  8. Android 输入框弹出样式

    在androidMainfest.xml文件里 在Activity中设置 [A]stateUnspecified:软键盘的状态并没有指定,系统将选择一个合适的状态或依赖于主题的设置 [B]stateU ...

  9. Android中动态设置GridView的列数、列宽和行高

    在使用GridView时我们知道,列数是可以通过设计时的属性来设置的,列的宽度则是根据列数和GridView的宽度计算出来的.但是有些时候我们想实现列数是动态改变的效果,即列的宽度保持某个值,列的数量 ...

  10. 【u215】河床

    问题描述 小明是一个地理学家,经常要对一段河流进行测量分析.他从上游开始向下游方向等距离地选择了N个点测量水位深度.得到一组数据d1,d2,--,dn,回到实验室后数据分析员根据需要对数据进行分析,发 ...