Docker是一个用于开发,交付和运行应用程序的开放平台。Docker使您能够将应用程序与基础架构分开,从而可以快速交付软件。借助Docker,您可以以与管理应用程序相同的方式来管理基础架构。通过利用Docker的快速交付,测试和部署代码的方法,您可以大大减少编写代码和在生产环境中运行代码之间的延迟。

一、Docker 基础

1.1 Docker 描述

摘自《Docker开发指南》

航运的比喻     Docker 的哲学经常用航运集装箱的比喻来解释,这或许能解释Docker 名字的由来。这个比喻大概是这样的。运输货物时,要用到多种不同的运输工具,可能包括货车、叉车、起重机、火车和轮船。这意味着这些工具必须能够处理大小不一、
运输需求各异的货物(例如袋装的咖啡、桶装的有毒化学品、盒装的电子产品、成队的豪华轿车、冷冻羊排)。以往这是一道复杂且成本高
昂的工序,需要付出大量人力物力。如图1-3 所示,码头工人在每个中转站手动装卸货物。联运集装箱的诞生为运输产业带来了一场革命。集装箱的大小有了统一标准,并且设计的出发点是能以最少的人力在不同的运输方式之
间搬运。所有的运输机械,无论是叉车和起重机,还是货车、火车和轮船,都为搬运这些集装箱而设计。运输对温度敏感的货物(如食品和
药物)时,可以使用具有冷冻及保温功能的集装箱。标准化的好处甚至延伸到其他支撑体系,如集装箱的标签及铅封方式。因此,运输产业
只需专注于处理集装箱本身的搬运以及储存的问题,而集装箱内的东西则完全由货物生产商负责。Docker的目标是把集装箱的标准化流程运用到IT行业中去。近年来,软件系统的多样性激增。在单一机器中运行LAMP4组合的日子已
一去不复返。如今典型的系统可能包含JavaScript框架、NoSQL数据库、消息队列、REST API,以及由各种不同编程语言所写的后端。
而这个组合的全部或部分都需要能够在各种不同的硬件上运行——从开发者的笔记本电脑,到公司内部的测试集群,再到云端的生产环境。每
个环境都存在差异,它们在不一样的硬件上运行着不一样的操作系统和不同版本的程序库。简而言之,我们的问题与当时运输产业遇到的极
为相似——我们正不断付出巨大人力,在不同环境之间移动程序。Docker容器简化了移动应用程序的工作,好比联运集装箱简化了货物运输
一样。开发者只需专注于程序开发,再也不用担心测试与正式发布时环境及依赖关系的差异所带来的问题。运维部门则只需专心处理与运行
容器相关的核心问题,例如分配资源、启动和停止容器,以及在服务器间的迁移工作。

 docker(原本是指在船只停靠港口之后将商品移进或移出的工人)的工作内容(一图胜千言,摘自《Docker 实践》)

  看完上面的介绍之后,再去阅读官方对于Docker的介绍,会更容易理解。

  官方介绍:查看

  个人理解:

    Docker 可以理解为一个容器(当然本质是一个软件),将应用(要发布的网站程序文件)和应用的依赖打包,在任意环境(服务器、云等等)进行部署。

1.3 Docker 核心概念

   要理解 Docker 内部构建,需要理解以下三种部件:

  • Docker 镜像 - Docker images
  • Docker 仓库 - Docker registeries
  • Docker 容器 - Docker containers

Docker 镜像

Docker 镜像是 Docker 容器运行时的只读模板,每一个镜像由一系列的层 (layers) 组成。Docker 使用 UnionFS 来将这些层联合到单独的镜像中。UnionFS 允许独立文件系统中的文件和文件夹(称之为分支)被透明覆盖,形成一个单独连贯的文件系统。正因为有了这些层的存在,Docker 是如此的轻量。当你改变了一个 Docker 镜像,比如升级到某个程序到新的版本,一个新的层会被创建。因此,不用替换整个原先的镜像或者重新建立(在使用虚拟机的时候你可能会这么做),只是一个新 的层被添加或升级了。现在你不用重新发布整个镜像,只需要升级,层使得分发 Docker 镜像变得简单和快速。

Docker 仓库

Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。同样的,Docker 仓库也有公有和私有的概念。公有的 Docker 仓库名字是 Docker Hub。Docker Hub 提供了庞大的镜像集合供使用。这些镜像可以是自己创建,或者在别人的镜像基础上创建。Docker 仓库是 Docker 的分发部分。

Docker 容器

Docker 容器和文件夹很类似,一个Docker容器包含了所有的某个应用运行所需要的环境。每一个 Docker 容器都是从 Docker 镜像创建的。Docker 容器可以运行、开始、停止、移动和删除。每一个 Docker 容器都是独立和安全的应用平台,Docker 容器是 Docker 的运行部分。

个人理解:

面向对象理解方式:镜像可以比作类,容器可以比作类的对象(具体的一个实例),想要删除镜像,需要将所有使用镜像运行的容器停止并删除。

1.4 Docker 命令

  官方介绍:查看

  举例子:

  搜索镜像:docker search 要搜索的镜像

docker search redis

  下载镜像:doucker pull 要下载的镜像:标签(如果不写,默认为latest)

docker pull redis:latest

  运行容器:docker run 参数 redis(镜像名称),具体参数代表含义可以参考(查看)

docker run -d -p 6379:6379 --restart=on-failure:10 --name myredis redis 

  Docker 命令可以分为以下几类:

  run命令、镜像信息、镜像管理、容器信息、容器管理、docker信息

  说明:具体每一个分类有哪些命令,可以查看文章最后的总结

1.5 Dockerfile

  Dockerfile 一般用于创建镜像,具体使用请查看

  官方介绍:查看

  说明:

    Docker Compose、Docker Machine 之前已经写文章说明,这里就不再描述了。

    官网介绍:查看Compose命令 查看Machine命令

1.6、数据卷

数据卷是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特性:

数据卷可以在容器之间共享和重用

对数据卷的修改会立马生效

对数据卷的更新,不会影响镜像

数据卷默认会一直存在,即使容器被删除

注意:数据卷 的使用,类似于 Linux 下对目录或文件进行 mount,镜像中的被指定为挂载点的目录中的
文件会隐藏掉,能显示看的是挂载的 数据卷。

二、CI(持续集成)

  Jenkins是最流行的持续集成工具。Jenkins可以使用docker进行发布。

  Jenkins使用docker进行安装步骤,请查看。也可以直接执行以下命令下载镜像和运行容器

#下载Jenkins镜像,并运行容器
docker run -d -p 8090:8080 -p 50000:50000 -v jenkins:/var/jenkins_home -v /etc/localtime:/etc/localtime --name myjenkins docker.io/jenkins/jenkins

  然后在浏览器输入http://*:8090 (*为docker所在宿主机的ip地址),如下图:

  密码可以通过以下命令查看

#myredis 是容器的名称(docker run命令的--name参数)
docker logs myredis

  复制密码粘贴到输入框,然后点击“继续”,然后进行Jenkins的相关配置即可(很方便吧)。

三、CD(持续部署)

3.1 Mesos

  官网:查看

  目前国内有一些公司在使用,可以了解一下。

3.2 Kubernetes(K8S)

  官网文档:查看

  

四、服务发现

4.1 etcd

  etcd是一个分布式一致性键值存储系统,用于共享配置和服务发现。

  使用方式:查看

4.2 SkyDNS

  官网:查看

4.3 Consul

  Consul主要包含三部分功能:服务配置(类似于etcd和zookeeper)、服务发现(类似于SkyDNS)、服务监控。

  使用介绍:查看

五、管理平台

  用过几个平台(DockerUI、Portainer、Rancher等等),感觉还是Portainer更好用一些。

  Portainer 官网:查看

  使用以下命令下载和运行容器

docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock --name myportainer docker.io/portainer/portainer

使用以下地址访问:http://*:9000(*是docker所在宿主机的ip地址)

六、总结

  我的学习路线图,如下图(从左至右)。

  学习方法:精读(基础知识)、泛读(关联知识)

七、常见问题

1.什么是Docker?
Docker是一个容器化平台,它以容器的形式将您的应用程序及其所有依赖项打包在一起,以确保您的应用
程序在任何环境中无缝运行。

2.CI(持续集成)服务器的功能是什么?
持续集成指的是,频繁地(一天多次)将代码集成到主干。
好处有两个:
1)快速发现错误。每完成一点更新,就集成到主干,可以快速发现错误,定位错误也比较容易。
2)防止分支大幅偏离主干。如果不是经常集成,主干又在不断更新,会导致以后集成的难度变大,甚至难
以集成。

3.持续交付(Continuous delivery)指的是,频繁地将软件的新版本,交付给质量团队或者用户,以供评审
。如果评审通过,代码就进入生产阶段。
持续部署(continuous deployment)是持续交付的下一步,指的是代码通过评审以后,自动部署到生产环
境。

4.docker与虚拟机的不同:

VM(VMware)在宿主机器、宿主机器操作系统的基础上创建虚拟层、虚拟化的操作系统、虚拟化的仓库,
然后再安装应用;
Container(Docker容器),在宿主机器、宿主机器操作系统上创建Docker引擎,在引擎的基础上再安装应用直接在宿主主机的操作系统上调用硬件资源,而不是虚拟化操作系统和硬件资源,所以操作速度快。
虚拟机所占内存大,Docker占用内存小。
docker可移植性好,开源,轻量。
5.构建Docker镜像应该遵循哪些原则?
整体远侧上,尽量保持镜像功能的明确和内容的精简,要点包括:

尽量选取满足需求但较小的基础系统镜像,建议选择debian:wheezy镜像,仅有86MB大小 
 清理编译生成文件、安装包的缓存等临时文件 
安装各个软件时候要指定准确的版本号,并避免引入不需要的依赖 
从安全的角度考虑,应用尽量使用系统的库和依赖 
使用Dockerfile创建镜像时候要添加.dockerignore文件或使用干净的工作目录
6.容器退出后会处于终止(exited)状态,此时可以通过 docker ps -a 查看,其中数据不会丢失,还可以
通过docker start 来启动,只有删除容器才会清除数据。
在这里还要注意开启容器的时候是否添加了--rm参数

7.仓库(Repository)、注册服务器(Registry)、注册索引(Index)有何关系?
首先,仓库是存放一组关联镜像的集合,比如同一个应用的不同版本的镜像,注册服务器是存放实际的镜
像的地方,注册索引则负责维护用户的账号,权限,搜索,标签等管理。注册服务器利用注册索引来实现
认证等管理。

8.docker的配置文件在?
CentOS系统配置文件存放在/etc/sysconfig/docker

Docker学习第一课 -- docker简介和和学习路线相关推荐

  1. 0.0 目录-深度学习第一课《神经网络与深度学习》-Stanford吴恩达教授

    文章目录 第五课 第四课 第三课 第二课 第一课 第五课 <序列模型> 笔记列表 Week 1 循环序列模型 Week 1 传送门 -> 1.1 为什么选择序列模型 1.2 数学符号 ...

  2. 1.1 欢迎-深度学习第一课《神经网络与深度学习》-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 无 回到目录 1.2 什么是神经网络 欢迎 第一个视频主要讲了什么是深度学习,深度学习能做些什么事情.以下是吴恩达老师的原话: 深度学习改变了传统互联网业务,例如如网络搜索和 ...

  3. 1.2 什么是神经网络-深度学习第一课《神经网络与深度学习》-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 1.1 欢迎 回到目录 1.3 用神经网络进行监督学习 什么是神经网络 我们常常用深度学习这个术语来指训练神经网络的过程.有时它指的是特别大规模的神经网络训练.那么神经网络究 ...

  4. 4.9 总结-深度学习第一课《神经网络与深度学习》-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 4.8 这和大脑有什么关系 回到目录 1.1 训练/开发/测试集 (第二课) 总结 习题 第 31 题 在我们的前向传播和后向传播实现中使用的"缓存"是什 ...

  5. 4.8 这和大脑有什么关系-深度学习第一课《神经网络与深度学习》-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 4.7 参数 vs. 超参数 回到目录 4.9 总结习题 这和大脑有什么关系 (What does this have to do with the brain?) 深度学习 ...

  6. 第一课 Docker践行DevOps理念-导学和安装

    第一课 Docker践行DevOps理念-导学和安装 tags: Docker 慕课网 categories: Docker Devlop实践 Docker安装 文章目录 第一课 Docker践行De ...

  7. 微信SDK开发学习第一课

    1.为什么学习微信API开发? 微信注册用户6亿,把微信当做推广平台已经成为主流. 2.微信SDK主要功能有哪些? 主要功能:分享给朋友,分享到朋友圈 3.如何使用微信SDK? 3.1 打开微信SDK ...

  8. JavaScript学习 第一课(一)

    JavaScript学习 第一课(一) 学习内容 一.什么是JavaScript 二.如何引用JavaScript 三.JavaScript使用时注意的事项 四.JavaScript中的保留字与关键字 ...

  9. gb2818的学习第一课

    关于gb2818的学习第一课 一.说明 为什么写这一系列的文章,自己在做gb28181是的一下痛苦的经历,在经过了网上的大量资料终于有所进步,所以想回馈一下大神们. 二.安装 参考文章:Linux编译 ...

最新文章

  1. linux日期日增,Linux日期
  2. 如何高效的Code Review
  3. mysql 倒序 分页_nodeJS与MySQL实现分页数据以及倒序数据
  4. 利用btrace在线监控java程序状态
  5. 超小型php框架,MiniFramework
  6. [转]毕业5年决定你的命运 --------值得所有不甘平庸的人看看
  7. oracle数据库中基础知识,oracle数据库基础知识
  8. 英伟达发布迁移学习工具包,现在可以申请早期试用
  9. Android Gradle指南系列
  10. linux服务器学习笔记:linux忘记密码怎么办?
  11. F28335第一篇——看门狗的开断
  12. linux自己写摄像头驱动,详解linux 摄像头驱动编写
  13. 【学习】把自己的电脑创建成ftp服务器,用Cuteftp软件上传文件和下载文件。
  14. Java程序员技术书籍指南
  15. Tipask目录结构
  16. 金蝶云星辰和旺店通企业版奇门单据接口集成
  17. 曲线曲面的基本理论3之曲线的参数表示
  18. linux用户权限0666什么意思,linux 权限
  19. 【无人机】地面站QGC:软件架构
  20. linux下sar命令解析 (性能相关以及性能调试)

热门文章

  1. java使用iText导出pdf添加页眉,并设置图片
  2. 虚拟化管理平台的选择:开源软件 or 商业软件?
  3. 龙兵瑜伽健身排课约课v1.10.14 瑜伽约课/健身约课 课程排课
  4. 解决zsh: command not found问题
  5. mkv格式如何快速无损转换mp4 mkv转换成MP4格式教程分享
  6. 用 Python 爬了 10 万条软件测试工程师信息有这些发现!
  7. 具有自适应调整策略的混沌灰狼优化算法-附代码
  8. 数码相机CCD尺寸大小和感光面积与相片质量关系
  9. 计算机培训教案入门,非常详细的电脑基础入门培训教案-20210526001825.pdf-原创力文档...
  10. 变量命名常用方式camelCase,snake_case,spinal-case