起因

  之前的几篇博客,需要一定的docker知识(虽然可以直接上手),但是对于没有docker基础的人来说是不知道为什么要这样做的。

  我把之前学习docker的步骤整理出来,希望可以帮助更多的人去学习docker。

目录:

  1. Docker 基础

    1.1 Docker 历史

    1.2 Docker 组成部分

    1.3 Docker 核心概念

    1.4 Docker 命令

    1.5 Dockerfile

  2. CI(持续集成)
    2.1 Jenkins
  3. CD(持续部署)
    3.1 Mesos
    3.2 Kubernetes(K8S)
  4. 服务发现
    4.1 etcd
    4.2 SkyDNS
    4.3 Consul
  5. 管理平台

  6. 总结

一、Docker 基础

1. Docker 历史

  摘自《Docker开发指南》

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

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

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

  官方介绍:查看

  个人理解:

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

1.2 Docker 组成部分

  Docker 逻辑上由三部分组成:Daemon(守护进程)、Rest API(API,所有客户端都通过API进行操作)、Client(客户端)

  官方介绍:查看

1.3 Docker 核心概念

  核心概念:层、镜像、容器。

  三者之间的关系:

  层可以理解为一些文件的集合,镜像由不同的层构成(只有最上面的层可以写,其他层都是只读的)

  镜像和容器之间的关系:

  个人理解:

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

  扩展阅读:

    docker 底层技术:cgroups(负责管理容器使用的资源,例如CPU、内存)、Namespaces(负责容器之间的隔离)、UFS(Union File System, 联合文件系统)

    如果想深入理解docker的原理,可以看一下UFS原理。

1.4 Docker 命令

  官方介绍:查看

  举例子:

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

docker search redis

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

docker pull redis:latest

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

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

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

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

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

1.5 Dockerfile

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

  官方介绍:查看

  说明:

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

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

二、CI(持续集成)

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

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

#下载Jenkins镜像,并运行容器
docker run -d -p : -p : -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 : -v /var/run/docker.sock:/var/run/docker.sock --name myportainer docker.io/portainer/portainer

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

六、总结

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

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

Docker 学习线路的更多相关文章

  1. Docker学习总结

    本文作为总结性文章,不会详细讲解Docker.但会把已学习的.了解的内容按照由易到难的顺序串起来,更多的是帮助Docker新手快速的了解Docker,知道目前处在哪个阶段,接下来该学些什么,避免碰太多 ...

  2. Docker学习笔记 — 配置国内免费registry mirror

    Docker学习笔记 — 配置国内免费registry mirror Docker学习笔记 — 配置国内免费registry mirror

  3. docker学习笔记1 -- 安装和配置

    技术资料 docker中文官网:http://www.docker.org.cn/ 中文入门课程:http://www.docker.org.cn/book/docker.html docker学习笔 ...

  4. JEE学习线路

    传智播客:javaEE学习线路以及需要掌握的知识点:http://java.itcast.cn/subject/javastudypath/index.shtml 最近在学JavaEE,没学Java ...

  5. docker学习资料整理(持续更新中..)

    docker最近可以说火得一踏糊涂,跟 51大神在交流技术的时候这个东西会多次被提到,当我们还玩vm+linux/freebsd的时候,人家已经上升到更高层次了,这就是差距,感觉好高大上的样子,技术之 ...

  6. PHP 初学者的学习线路和建议【1】

    先来看下PHP初学者的学习线路: (1) 熟悉HTML/CSS/JS等网页基本元素,完成阶段可自行制作简单的网页,对元素属性相对熟悉. (2) 理解动态语言的概念和运做机制,熟悉基本的PHP语法. ( ...

  7. Docker学习笔记之一,搭建一个JAVA Tomcat运行环境

    Docker学习笔记之一,搭建一个JAVA Tomcat运行环境 前言 Docker旨在提供一种应用程序的自动化部署解决方案,在 Linux 系统上迅速创建一个容器(轻量级虚拟机)并部署和运行应用程序 ...

  8. Docker学习总结之Run命令介绍

    Docker学习总结之Run命令介绍 本文由Vikings(http://www.cnblogs.com/vikings-blog/) 原创,转载请标明.谢谢! 在使用Docker时,执行最多的命令某 ...

  9. docker~学习笔记索引

    回到占占推荐博客索引 使用docker也有段时间了,写了不少文章与总结,下面把它整理个目录出来,方便大家去学习与检索! docker~学习笔记索引 docker~linux下的部署和基本命令(2017 ...

随机推荐

  1. JavaScript数据结构——队列的实现与应用

    队列与栈不同,它遵从先进先出(FIFO——First In First Out)原则,新添加的元素排在队列的尾部,元素只能从队列头部移除. 我们在前一篇文章中描述了如何用JavaScript来实现栈这 ...

  2. Notepad++编辑器——Verilog、代码片段、F6编译

    Notepad++是一款精致小巧的编辑器,自带Verilog语法识别功能,插件也挺好用的.这里陈列一下我的设置. 版本:Notepad++ 7.6.6 ,32位 //================= ...

  3. Go调度器介绍和容易忽视的问题

    本文记录了本人对Golang调度器的理解和跟踪调度器的方法,特别是一个容易忽略的goroutine执行顺序问题,看了很多篇Golang调度器的文章都没提到这个点,分享出来一起学习,欢迎交流指正. 什么 ...

  4. 帝国CMS(EmpireCMS) v7.5后台任意代码执行

    帝国CMS(EmpireCMS) v7.5后台任意代码执行 一.漏洞描述 EmpireCMS 7.5版本及之前版本在后台备份数据库时,未对数据库表名做验证,通过修改数据库表名可以实现任意代码执行. 二 ...

  5. 曹工杂谈:Java 类加载还会死锁?这是什么情况?

    一.前言 今天事不是很多,正好在Java交流群里,看到一个比较有意思的问题,于是花了点时间研究了一下,这里做个简单的分享. 先贴一份测试代码,大家可以先猜测一下,执行结果会是怎样的: import j ...

  6. REST 在 Java 中的使用

    REST是一种混合的架构风格,它的由来以及它的架构元素在笔者的前一篇文章<REST 架构风格的由来 & 元素>中已经描述了.本篇主要描述一下J2EE对REST的支持. Java是在 ...

  7. 微服务SpringCloud之Spring Cloud Config配置中心服务化

    在前面两篇Spring Cloud Config配置中心的博客中都是需要指定配置服务的地址url:spring.cloud.config.uri,客户端都是直接调用配置中心的server端来获取配置文 ...

  8. net core WebApi——文件分片下载

    目录 前言 开始 测试 小结 @ 前言 上一篇net core WebApi--文件分片上传与跨域请求处理介绍完文件的上传操作,本来是打算紧接着写文件下载,中间让形形色色的事给耽误的,今天还是抽个空整 ...

  9. odoo t标签用法

    在odoo中,通过QWeb来对模板进行渲染后加载到浏览器中,而模板中有许多的标签来定制各种需求变化,在这里记录学习过程中碰到的标签定义,以方便查询. 模板中的标签统一都是以"t-" ...

  10. cf 1102 B

    题意:求字符串中任意相邻两位是否可以可以由前一个加上任意个x或y屏蔽十位与后一位相等,如果可以需要添加的最少数字是多少,x值为0-9,y值也为0-9,求出任意x,y对应情形下字符串需要添加的最少数字, ...