网站地图提交,义乌网,广州网站建设网页设计,动漫设计专升本可以考哪些学校相关资源网站#xff1a; ● docker官网#xff1a;http://www.docker.com ● Docker Hub仓库官网: https://hub.docker.com/ 注意#xff0c;如果只是想看Docker的安装#xff0c;可以直接往下拉跳转到Docker架构与安装章节下的Docker具体安装步骤#xff0c;一步步带你安…相关资源网站 ● docker官网http://www.docker.com ● Docker Hub仓库官网: https://hub.docker.com/ 注意如果只是想看Docker的安装可以直接往下拉跳转到Docker架构与安装章节下的Docker具体安装步骤一步步带你安装自己的Docker
Docker简介概述
Docker对我来说是一种全新技术既然是全新的技术那么我就不禁要问了Docker它到底是什么东西它是基于什么场景下出现的解决了什么问题呢
Docker技术入门理解
首先什么是Docker Docker 是使用 Google 公司推出的 Go 语言 进行开发实现基于 Linux 内核的 cgroupnamespace以及 AUFS 类的 Union FS 等技术对进程进行封装隔离属于操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程因此也称其为容器。最初实现是基于 LXC从 0.7 版本以后开始去除 LXC转而使用自行开发的 libcontainer从 1.11 开始则进一步演进为使用 runC 和 containerd。Docker 在容器的基础上进行了进一步的封装从文件系统、网络互联到进程隔离等等极大的简化了容器的创建和维护使得 Docker 虚拟技术比虚拟机技术更为轻便、快捷。 以上是我在网上搜刮出来的定义很生硬但可以简单地将Docker理解为一种类似于Linux虚拟机的虚拟化技术 那么为什么会出现Docker这种虚拟化技术呢它解决了什么问题 我们来看一下下面这个场景 假如说在你入职一个公司后在公司参与开发了公司的一个项目你使用的电脑中具有特定配置的开发环境也就是说跟公司的其他开发人员的环境配置各有不同你正在开发的应用肯定是依赖于你当前的环境配置以及某些配置文件除此之外公司也有一套标准化的测试和生产环境、以及自身的配置和一系列的支持文件的你是不是遇到过自己在本地跑项目的时候是没有问题的一推到线上或者代码给到运维跑的时候就出现了奇奇怪怪的Bug各种令人头疼 这个时候一番扯皮推卸责任的免不了的那么问题来了你要如何确保你开发的应用能够在这些环境中运行和通过质量检测并且在部署过程中不出现令人头疼的版本、配置问题也无需重新编写代码和进行故障修复呢 这就是Docker所解决的问题它对此给出了一个标准化的解决方案即系统平滑移植容器虚拟化技术。 在没有Docker之前开发人员将系统源代码提交给运维之后运维就需要拿着这份源代码进行项目部署但是在进行部署的时候就有可能会遇到一些问题比如说环境不一致的问题就像上面说的开发环境跟运维环境不一致这就需要运维人员根据开发人员给的版本清单一步一步的进行手动安装环境异常麻烦而且更致命的是若果开发的项目是分布式集群项目每个集群中的每台机器都要安装一下环境要是此时有任何一台机器在安装过程中出现了差错都有可能导致项目部署失败 还有就是若果说开发的系统需要进行机器扩容增加某个集群的机器这对运维来说也是一个难题
上面一系列下来可以看出环境的配置过程相当麻烦换一台机器就要重来一次费力费时而引入了Docker之后假如说现在项目在开发环境下是完全百分百可以运行的不管是源码、配置、环境、版本等都没有问题这个时候Docker就可以将这一整套东西打包成一个镜像文件你可以将这个镜像文件发送到任何平台环境运行这个镜像文件时会开启一个容器不管你是在什么环境下运行都与你在开发时的环境一模一样相当于在开发环境中运行这个项目达到应用平台无缝衔接
为什么要选择Docker呢用虚拟机技术不是也能达到类似效果吗 首先Docker 容器的本质可以理解为通过容器虚拟技术利用宿主机的硬件资源来虚拟出的一台主机就像虚拟机一样可以将应用及其运行环境部署在这台虚拟出的“主机”容器上运行。但容器与传统的虚拟机技术VMware、VirtualBox等运行的虚拟机技术又有着本质的不同。 传统的虚拟机技术 传统的虚拟技术是在物理机的操作系统之上安装一个虚拟机管理程序例如 VMware、 VirtualBox 等在虚拟机管理程序的管理下使用者可以在同一个物理服务器上创建多个虚拟机每个虚拟机需要安装自己独立的操作系统而应用就是安装在虚拟机的操作系统之上的程序应用程序通过调用各种命令或库函数来使用其需要的各种系统资源。 在这种情况下对于完全相同的两个应用若它们需要运行在两个虚拟机中就需要两套完全相同的虚拟机操作系统与 bins/libs如上图左侧所示存在大量的资源占用冗余形成资源浪费。 Docker容器虚拟化技术 因为Docker 容器运行在 Docker 引擎之上是在宿主机服务器的操作系统层面实现的虚拟化可以直接复用本地物理主机的操作系统所有 Docker 容器都共享同一个 Docker 引擎所以不需要像传统虚拟机一样需要另外的虚拟硬件及虚拟操作系统 而是共享的宿主机的硬件与操作系统但它们的运行环境又是相互隔离、互不干扰的。并且所有 Docker 容器对于系统硬件资源的使用都是由 Docker 引擎统一进行管理所以对系统资源的占用很少其仅包含 运行时必须的一些资源利用率很高。无论是应用执行速度、内存损耗或者文件存储速度 都要比传统虚拟机技术更高效。
小结Docker解决的问题
1、 提供统一的运行环境 在生产环境中很多时候的开发、测试及上线环境都是不一样的从而导致项目war 或 jar在不同阶段出现很多其它阶段所不存在的奇怪的问题。 Docker 容器除了可以提供相同的应用外还提供了该应用的统一运行环境确保在任 何宿主机 HOST 上都可以跑出相同的结果。即 Docker jar/war 环境。 2、 便捷的应用迁移 由于 Docker 确保了统一的运行环境使得应用的迁移更加便捷。无论是物理机、虚拟 机、公有云、私有云Docker 镜像的运行结果都是相同的。用户可以很方便地将一个平台 上运行的应用迁移到另一个平台上而无需担心运行环境的变化导致应用无法正常运行。 3、 超快的启动时间 传统的虚拟机技术启动应用一般需要数分钟首先需要启动虚拟机然后再加载虚拟机 操作系统最后还需要再手工启动应用。而 Docker 容器应用由于直接运行于宿主机系统 中无需启动操作系统因此可以做到秒级、甚至毫秒级的启动。 4、 更轻松的维护和扩展 Docker 公司及各个开源项目团队一起维护了一大批高质量的官方镜像既可以直接在 生产环境使用又可以作为基础进一步定制大大的降低了应用服务的镜像制作成本。 Docker 使用的分层存储以及镜像的技术使得应用重复部分的复用更为容易也使得应 用的维护更新更加简单基于基础镜像进一步扩展镜像也变得非常简单。
Docker架构与安装
阅读docker官方的Guides文档可以发现Docker系统整体上主要包含客户端Client、宿主机DOCKER_HOST服务端和仓库Register三大部分。我们日常使用各种 docker 命令其实就是在使用Client 客户端工具 给 Docker 引擎服务端守护进程Docker daemon 提交请求进行交互如下图所示。
1、Client 客户端
Docker 是一个客户端-服务器C/S架构程序。Docker 客户端只需要向 Docker 服务器或者守护进程发出请求服务器或者守护进程将完成所有工作并返回结果。 Client 能够帮助我们使用命令行与 Docker 服务端进行交互包括本地服务端和远程服务端 通过-H参数可以指定客户端连接的服务端docker -H host
2、Registry 仓库
镜像构建完成后可以很容易的在当前宿主机上运行但是如果需要在其它服务器上使用这个镜像我们就需要一个集中的存储、分发镜像的服务Docker Registry 就是这样的服务。 Docker 用 Registry 来保存用户构建的镜像。Registry 分为公共和私有两种。一个 Docker Registry 中可以包含多个 仓库Repository每个仓库可以包含多个 标签Tag每个标签对应一个镜像。Docker 公司运营公共的 Registry 叫做 Docker Hub。用户可以在 Docker Hub 注册账号分享并保存自己的镜像。
3、Docker 引擎服务器端
服务端会启动一个守护进程 Docker Daemon 通过 socket 或者 RESTful API 监听来自客户端的请求并且处理这些请求实现对镜像和容器的操作。 守护进程可以 管理 Docker 对象例如镜像、容器、网络和卷还可以与其他守护进程通信以管理 Docker 服 务。
Docker的安装介绍
Docker 可以安装在 Windows、Linux、Mac 等系统中我们经常说的安装Docker其实主要就是安装Docker引擎只是为了简单直接说安装Docker而已在安装 Docker 之前需要先了解 Docker 官方对其版本的分类。Docker 的版本分为大版本 与小版本。 Docker 从大版本来说分为三类Moby、社区版 Docker-CECommunity Edition和企业版 Docker-EEEnterprise Edition。 从 v1.13.1 之后Docker 的发布计划发生了变更每个大版本下都出现了两个小版 本 Edge 月版与 Stable 季版。不过现在的官网中一般只能看到 Stable 版本。 由于生产环境下服务器使用 Linux 的居多所以下面就以 Docker 在 CentOS7 中的安装为例来学习 Docker 的安装 注意虽然Docker可以安装在 Windows、Linux、Mac 等系统中但Docker并非是一个通用的容器工具它需要依赖于已存在并运行的 Linux内核环境。Docker的实质上是在已经运行的Linux下制造了一个隔离的文件环境因此它执行的效率几乎等同于所部署的Linux主机。因此Docker必须部署在Linux内核的系统上如果其他系统想部署Docker就必须安装一个虚拟Linux环境 即在Windows上部署Docker的方法都是先安装一个虚拟机并在安装Linux系统的的虚拟机中运行Docker。注意目前CentOS 仅发行版本中的内核支持 Docker。Docker 运行在CentOS 7 (64-bit)上要求系统为64位、Linux系统内核版本为 3.8以上这里选用Centos7.x 。 官网 https://docs.docker.com/engine/install/centos/中可以看到具体安装方式与安装步骤。
Docker的具体安装步骤 前面啰嗦了一大堆现在开始正式安装Docker这里我们选择安装的是19.03.14版本当然你不指定版本就是最新版本 1、首先第一步配置yum工具 ● sudo yum install -y yum-utils 2、卸载系统之前的 docker
sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine3、安装 Docker 运行所需的依赖软件包 ● sudo yum install -y yum-utils device-mapper-persistent-data lvm2 4、配置docker的yum源为阿里云仓库告诉Linux从阿里云的镜像地址获取 Docker 相关软件包和更新
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo5、选择安装docker的版本 ● 默认安装最新版# sudo yum install -y docker-ce docker-ce-cli containerd.io ● 安装19.03.14版本sudo yum install -y docker-ce-19.03.14 docker-ce-cli-19.03.14 containerd.io-1.4.6
6、docker安装好之后需要给docker配置一下加速镜像源默认的镜像源是Docker官网的下载镜像的时候可能速度不是很快这个镜像地址可以到自己的阿里云中获取当然也可以随便找一个别人的 控制台—镜像容器服务----镜像中心镜像加速服务下获取 注意这里额外添加了docker的生产环境核心配置cgroup
# 创建一个docker的配置文件
sudo mkdir -p /etc/docker
# 添加阿里云的加速镜像源即registry-mirrors后面的地址
sudo tee /etc/docker/daemon.json -EOF
{registry-mirrors: [https://82m9ar63.mirror.aliyuncs.com],exec-opts: [native.cgroupdriversystemd],log-driver: json-file,log-opts: {max-size: 100m},storage-driver: overlay2
}
EOF
# 重启
sudo systemctl daemon-reload
sudo systemctl restart docker#启动 docker 设置 docker 开机自启
sudo systemctl enable docker
到这里Docker就安装完成了可以输入docker -v 验证一下