zoukankan      html  css  js  c++  java
  • Docker 简介与安装

    1 Docker 简介

    1.1 简介

    Docker是开发,运行和部署应用程序的开放管理平台。

    开发人员能利用docker 开发和运行应用程序
    运维人员能利用docker 部署和管理应用程序

    image-20200328155705687

    1.2 Docker平台介绍

    • Docker提供了在一个完全隔离的环境中打包和运行应用程序的能力,这个隔离的环境被称为容器。
    • 由于容器的隔离性和安全性,因此可以在一个主机(宿主机)上同时运行多个相互隔离的容器,互不干预。
    • Docker已经提供工具和组件(Docker Client、Docker Daemon等)来管理容器的生命周期:

    •使用容器来开发应用程序及其支持组件。
    •容器成为分发和测试你的应用程序的单元。
    •准备好后,将您的应用程序部署到生产环境中,作为容器或协调服务。无论您的生产环境是本地数据中心,云提供商还是两者的混合,这都是一样的。

    1.3 为什么使用Docker

    • Docker使您能够将应用程序与基础架构分开,以便您可以快速交付软件。
    • 借助Docker,您可以像管理应用程序一样管理基础架构。
    • 通过利用Docker的方法快速进行运输,测试和部署代码,您可以显着缩短编写代码和在生产环境中运行代码之间的延迟

    •开发人员在本地编写代码,可以使用Docker同事进行共享,实现协同工作。

    •使用Docker开发完成程序,可以直接对应用程序执行自动和手动测试。

    •当开发人员发现错误或BUG时,可以直接在开发环境中修复后,并迅速将它们重新部署到测试环境进行测试和验证。

    •利用Docker开发完成后,交付时,直接交付Docker,也就意味着交付完成。后续如果有提供修补程序或更新,需要推送到生成环境运行起来,也是一样的简单。

    • Docker主要解决的问题:

    •保证程序运行环境的一致性;

    •降低配置开发环境、生产环境的复杂度和成本;

    •实现程序的快速部署和分发

    2 Docker 整体结构(了解)

    2.1 Docker引擎介绍 (Docker Engine)

    • Docker Engine是一个包含以下组件的客户端-服务端(C/S)应用程序

    •服务端 — 一个长时间运行的守护进程(Docker Daemon)

    •REST API — 一套用于与Docker Daemon通信并指示其执行操作的接口

    •客户端 — 命令行接口CLI( Command Line Interface)

    image-20200328160957922

    • CLI利用Docker命令通过REST API直接操控Docker Daemon执行操作

    • Docker Daemon负责创建并管理Docker的对象(镜像、容器、网络、数据卷)

    2.2 Docker结构概览介绍

    image-20200328161437278

    • Docker客户端(Docker Client)

    •Docker客户端(Docker Client)是用户与Docker进行交互的最主要方式。当在终端输入docker命令时,对应的就会在服务端产生对应的作用,并把结果返回给客户端。Docker Client除了连接本地服务端,通过更改或指定DOCKER_HOST连接远程服务端。

    • Docker服务端(Docker Server)

    •Docker Daemon其实就是Docker 的服务端。它负责监听Docker API请求(如Docker Client)并管理Docker对象(Docker Objects),如镜像、容器、网络、数据卷等

    • Docker Registries

    •俗称Docker仓库,专门用于存储镜像的云服务环境.

    •Docker Hub就是一个公有的存放镜像的地方,类似Github存储代码文件。同样的也可以类似Github那样搭建私有的仓库。

    • Docker 对象(Docker Objects)

    •镜像:一个Docker的可执行文件,其中包括运行应用程序所需的所有代码内容、依赖库、环境变量和配置文件等。

    •容器:镜像被运行起来后的实例。

    •网络:外部或者容器间如何互相访问的网络方式,如host模式、bridge模式。

    •数据卷:容器与宿主机之间、容器与容器之间共享存储方式,类似虚拟机与主机之间的共享文件目录。

    3 Docker 底层技术(了解)

    • Docker使用Go语言实现。

    • Docker利用linux内核的几个特性来实现功能:

    •利用linux的命名空间(Namespaces)

    •利用linux控制组(Control Groups)

    •利用linux的联合文件系统(Union File Systems)

    这也就意味着Docker只能在linux上运行。

    在windows、MacOS上运行Docker,其实本质上是借助了虚拟化技术,然后在linux虚拟机上运行的Docker程序。

    • 容器格式( Container Format ):

    •Docker Engine将namespace、cgroups、UnionFS进行组合后的一个package,就是一个容器格式(Container Format)。Docker通过对这个package中的namespace、cgroups、UnionFS进行管理控制实现容器的创建和生命周期管理。

    •容器格式(Container Format)有多种,其中Docker目前使用的容器格式被称为libcontainer

    • Namespaces(命名空间):为Docker容器提供操作系统层面的隔离

    •进程号隔离:每一个容器内运行的第一个进程,进程号总是从1开始起算

    •网络隔离:容器的网络与宿主机或其他容器的网络是隔离的、分开的,也就是相当于两个网络

    •进程间通隔离:容器中的进程与宿主机或其他容器中的进程是互相不可见的,通信需要借助网络

    •文件系统挂载隔离: 容器拥有自己单独的工作目录

    •内核以及系统版本号隔离:容器查看内核版本号或者系统版本号时,查看的是容器的,而非宿主机的

    • Control Groups(控制组-cgroups):为Docker容器提供硬件层面的隔离

    •控制组能控制应用程序所使用的硬件资源。

    •基于该性质,控制组帮助docker引擎将硬件资源共享给容器使用,并且加以约束和限制。如控制容器所使用的内存大小。

    • Union File Systems(联合文件系统–UnionFS):利用分层(layer)思想管理镜像和容器

    一 Docker-CE 和 Docker-EE介绍版本介绍

    •Docker-CE指Docker社区版,由社区维护和提供技术支持,为免费版本,适合个人开发人员和小团队使用。

    •Docker-EE指Docker企业版,为收费版本,由售后团队和技术团队提供技术支持,专为企业开发和IT团队而设计。

    •相比Docker-EE,增加一些额外功能,更重要的是提供了更安全的保障。

    •此外,Docker的发布版本分为Stable(稳定)版和Edge(测试)版,区别在于前者是按季度发布的稳定版(发布慢),后者是按月发布的边缘版(发布快)。

    •通常情况下,Docker-CE足以满足我们的需求。主要针对Docker-CE进行学习。

    1.1 版本情况

    注意:自从区分docker-ce和docker-ee之后,docker最初始的版本是17.03,也就是17年发布的,所有17是老版本和新版本的分水岭

    image-20200328163029517

    1.2 系统支持情况

    image-20200328163106682

    二 Centos 上安装 Docker-CE

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    # 0 卸载老版本(新机器不用操作)
    sudo yum remove docker
    docker-client
    docker-client-latest
    docker-common
    docker-latest
    docker-latest-logrotate
    docker-logrotate
    docker-engine
    # yum list installed | grep docker
    # yum remove docker-ce.x86_64 docker-ce-cli.x86_64
    # rm -rf /var/lib/docker
    # sudo yum update

    # 1 安装必要的系统工具
    sudo yum install -y yum-utils device-mapper-persistent-data lvm2
    # 2 添加源信息
    -官方:地址在国外,很慢
    sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    -阿里云:(推荐)
    sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    # 3 检查一下/etc/yum.repos.d/docker-ce.repo 中的url地址是不是都是阿里云
    cat /etc/yum.repos.d/docker-ce.repo
    # 4 安装
    sudo yum -y install docker-ce
    # 5 开启docker服务
    systemctl start docker

    # 6 docker info 查看docker信息
    • 安装成功后,使用 docker version 命令查看

      image-20200328162355621

    三 Ubuntu 上安装 Docker-CE

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    # 0 卸载
    sudo apt-get remove docker docker-engine docker.io containerd runc
    # 1 安装必要工具
    sudo apt-get update
    sudo apt-get install
    apt-transport-https
    ca-certificates
    curl
    gnupg-agent
    software-properties-common
    # 2 安装GPG证书
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
    #换成阿里云
    curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
    # 2 写入软件源信息
    #官方
    sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
    #换成阿里云
    sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"

    # 3 更新并安装docker-ce
    sudo apt-get -y install docker-ce
    # 4 开启docker服务
    systemctl status docker
    • 安装成功后,使用 docker version查看

      如果出现权限禁止,需要切换到root用户执行

      su

      输入密码

      docker version

    四 Windows /MacOS 上安装 Docker-CE

    五 加速配置

    • 为什么使用加速器:

    配置Docker加速器,将会提升在国内获取Docker官方镜像的速度,否则后面下载镜像(docker pull)的过程会很慢,甚至有可能无法下载镜像

    • 配置阿里云/清华源加速器(docker 17以上版本)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    # 方式1(仅对当次有效)
    docker run centos:7 --registry-mirror=https://docker.mirrors.ustc.edu.cn
    #修改 /etc/default/docker,加入 DOCKER_OPTS=”镜像地址”,可以有多个
    DOCKER_OPTS="--registry-mirror=https://docker.mirrors.ustc.edu.cn"
    # 方式2(json 配置文件的方式)(严格的json格式,不符合格式会报错)
    vi /etc/docker/daemon.json
    {
    "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
    }
    '''
    几个速度比较快的镜像地址
    Docker 官方中国区: https://registry.docker-cn.com
    网易: http://hub-mirror.c.163.com
    中科大: https://docker.mirrors.ustc.edu.cn
    '''
    # 方式3(阿里云方式,同方式2,只是阿里云分配的私有地址,自己用自己的)
    参考教程:https://help.aliyun.com/document_detail/60750.html?spm=a2c4g.11186623.6.545.OY7haW
    vi /etc/docker/daemon.json
    {
    "registry-mirrors": ["https://x1566319.mirror.aliyuncs.com"]
    }

    image-20200328172916452

  • 相关阅读:
    php使用cookie来保存用户登录信息
    Linux下进程操作
    TortoiseSVN无法编辑日志信息的解决方法
    用DIV布局制作公告板
    HashMap的遍历
    实现文本滚动
    子DIV块中设置margintop时影响父DIV块位置的解决办法
    php使用session来保存用户登录信息
    javascript jquery ajax动态提交多个参数 api测试 拂晓风起
    javascript 处理返回json中的\u中文乱码问题(也不是乱码了,就是\u编码) 拂晓风起
  • 原文地址:https://www.cnblogs.com/bubu99/p/13763349.html
Copyright © 2011-2022 走看看