欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Docker学习第一课 -- docker简介和和学习路线

程序员文章站 2022-04-14 14:25:37
...

         Docker是一个用于开发,交付和运行应用程序的开放平台。Docker使您能够将应用程序与基础架构分开,从而可以快速交付软件。借助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简介和和学习路线

 

  看完上面的介绍之后,再去阅读官方对于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地址),如下图:

Docker学习第一课 -- docker简介和和学习路线

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

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

Docker学习第一课 -- docker简介和和学习路线

 

  复制密码粘贴到输入框,然后点击“继续”,然后进行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地址)

Docker学习第一课 -- docker简介和和学习路线

 

Docker学习第一课 -- docker简介和和学习路线

 

Docker学习第一课 -- docker简介和和学习路线

 

六、总结

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

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

Docker学习第一课 -- docker简介和和学习路线

 

七、常见问题


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

 

 

 

相关标签: 容器技术