【Docker】Docker 概述和 Docker 安装

1 Docker 概述

1.1 Docker 为什么会出现?

一款产品:开发 - 上线,三套环境(开发,测试,生产),应用配置

开发人员,运维人员。问题:我在我的电脑上可以运行的!版本更新,导致服务不可用,对于运维来说,考验就十分大了?开发即运维!

环境配置是十分的麻烦,每一个机器都是要部署环境(集群 Redis,ES,Hadoop…)!费时费力

发布一个项目的 Jar (Redis,MySQL,JDK,ES)包。项目能不能带上环境安装打包!

之前在服务器配置一个应用的环境Redis MySQL jdk ES Hadoop,配置超麻烦了,不能够跨平台。Windows 最后分布到Linux!

  • 传统:开发 jar,运维来做!
  • 现在:开发打包部署上线,一套流程做完!

Java — Apk — 分布(应用商店)— 同学使用 Apk — 安装即可用!

Java — Jar(环境) — 打包项目带上环境(镜像)—( Docker仓库:商店)— 下载我们发布的就像 — 直接运行即可!

Docker 给以上的问题,提出了解决方案!

一款产品从开发到上线,从操作系统,到运行环境,再到应用配置。作为开发+运维之间的协作我们需要关心很多东西,这也是很多互联网公司都不得不面对的问题,特别是各种版本的迭代之后,不同版本环境的兼容,对运维人员是极大的考验!

环境配置如此麻烦,换一台机器,就要重来一次,费力费时。很多人想到,能不能从根本上解决问题,软件可以带环境安装?也就是说,安装的时候,把原始环境一模一样地复制过来。解决开发人员说的”在我的机器上可正常工作"的问题。

之前在服务器配置一个应用的运行环境,要安装各种软件,就拿一个基本的工程项目的环境来说吧,Java/Tomcat/MySQLJDBC驱动包等。安装和配置这些东西有多麻烦就不说了,它还不能跨平台。假如我们是在Windows上安装的这些环境,到了Linux又得重新装。况且就算不跨操作系统,换另一台同样操作系统的服务器,要移植应用也是非常麻烦的。

传统上认为,软件编码开发/恻试结束后,所产出的成果即是程序或是能够编译执行的二进制字节码文件等(Java为例)。而为了让这些程序可以顺利执行,开发团队也得准备完整的部署文件,让维运团队得以部署应用程式,开发需要清楚的告诉运维部署团队用的全部配置文件+所有软件环境。不过,即便如此,仍然常常发生部署失败的状况。

Docker之所以发展如此迅速,也是因为它对此给出了一个标准化的解决方案。

Docker镜像的设计,使得Docker得以打破过去「程序即应用」的观念。通过Docker镜像 ( images )将应用程序所需要的系统环境,由下而上打包,达到应用程序跨平台间的无缝接轨运作。

img

Docker 的思想就来自于集装箱!

JRE — 多个应用(端口冲突) — 原来都是交叉的!

隔离:Docker 核心思想!打包装箱!每个箱子都是相互隔离的。Docker 通过隔离机制,可以将服务器的性能利用到极致

本质:所有的技术都是因为出现了一些问题,我们需要去解决,才去学习!

1.2 Docker 的历史

2010年,几个搞IT的年轻人,在美国旧金山成立了一家名叫“dotCloud"的公司。

这家公司主要提供基于PaaS的云计算技术服务。具体来说,是和LXC有关的容器技术。后来,dotCloud公司将自己的容器技术进行了简化和标准化,并命名为——Docker。

Docker技术诞生之后,并没有引起行业的关注。而dotCloud公司,作为一家小型创业企业,在激烈的竞争之下,也步履维艰。正当他们快要坚持不下去的时候,脑子里蹦出了“开源"的想法。

什么是开源?开源,就是开放源代码。也就是将原来内部保密的程序源代码开放给所有人,然后让大家一起参与进来,贡献代码和意见。

有的软件是一开始就开源的。也有的软件,是混不下去,创造者又不想放弃,所以选择开源。自己养不活,就吃"百家饭"嘛。2013年3月,dotCloud公司的创始人之一,Docker之父,28岁的Solomon Hykes正式决定,将Docker项目开源。

不开则已,一开惊人。

越来越多的IT工程师发现了Docker的优点,然后蜂拥而至,加入Docker开源社区。Docker的人气迅速攀升,速度之快,令人瞠目结舌。

开源当月,Docker 0.1版本发布。此后的每一个月,Docker都会发布一个版本。到2014年6月9日,Docker 1.0版本正式发布

此时的Docker,已经成为行业里人气最火爆的开源技术,没有之一。甚至像Google、微软、Amazon、VMware这样的巨头,都对它青睐有加,表示将全力支持。I

Docker和容器技术为什么会这么火爆?说白了,就是因为它“轻"。

在容器技术之前,业界的网红是虚拟机。虚拟机技术的代表,是VMWare和Openstack。

相信很多人都用过虚拟机。虚拟机,就是在你的操作系统里面,装一个软件,然后通过这个软件,再模拟一台甚至多台"子电脑"出来。在"子电脑’里,你可以和正常电脑一样运行程序,例如开QQ。如果你愿意,你可以变出好几个"子电脑”,里面都开上QQ。"子电脑"和“子电脑"之间,是相互隔离的,互不影响。

虚拟机属于虚拟化技术。而Docker这样的容器技术,也是虚拟化技术,属于轻量级的虚拟化。

虚拟机虽然可以隔离出很多"子电脑",但占用空间更大,启动更慢,虚拟机软件可能还要花钱(例如VMWare)。而容器技术恰好没有这些缺点。它不需要虚拟出整个操作系统,只需要虚拟一个小规模的环境(类似"沙箱")。

它启动时间很快,几秒钟就能完成。而且,它对资源的利用率很高(一台主机可以同时运行几千个Docker容器)。此外,它占的空间很小,虚拟机一般要几GB到几十GB的空间,而容器只需要MB级甚至KB级。

正因为如此,容器技术受到了热烈的欢迎和追捧,发展迅速。

VMware:Linux CentOS原生镜像(一台电脑!)隔离:需要开启多个虚拟机!–> nG 几分钟

Docker:隔离,镜像(最核心的环境 4M + JDK + MySQL)十分的小巧,运行镜像就可以了!小巧!–> nM/KB 秒级启动

到现在,所有的开发人员和运维人员必须都要会 Docker!

Docker 三要素:容器,镜像,仓库

聊聊 Docker

Docker 是基于 Golang 语言开发的!开源项目!

官网:https://www.docker.com/

文档地址:https://docs.docker.com/ (Docker 的文档是非常详细的!)

仓库地址:https://docs.docker.com/

1.3 Docker 能干嘛

虚拟化技术分全虚拟、半虚拟、容器技术三大类

传统的虚拟化技术

虚拟机(virtual machine)就是带环境安装的一种解决方案。

它可以在一种操作系统里面运行另一种操作系统,比如在Windows系统里面运行Linux系统。应用程序对此毫无感知,因为虚拟机看上去跟真实系统一模一样,而对于底层系统来说,虚拟机就是一个普通文件,不需要了就删掉,对其他部分毫无影响。这类虚拟机完美的运行了另一套系统,能够使应用程序,操作系统和硬件三者之间的逻辑不变。

img

虚拟机技术缺点:

  1. 资源占用十分多
  2. 冗余步骤多
  3. 启动速度慢

容器化技术

由于前面虚拟机存在这些缺点,Linux发展出了另一种虚拟化技术: Linux容器(Linux Containers,缩写为LXC).

Linux容器不是模拟一个完整的操作系统,而是对进程进行隔离。有了容器,就可以将软件运行所需的所有资源打包到一个隔离的容器中。容器与虚拟机不同,不需要捆绑一整套操作系统,只需要软件工作所需的库资源和设置。系统因此而变得高效轻量并保证部署在任何环境中的软件都能妊终如一地运行。

容器化技术不是模拟的一个完整的操作系统。

img

img

比较Docker 和虚拟机技术的不同:

  • ·传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程
  • 而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。
  • 每个容器之间互相隔离,每个容器有自己的文件系统,容器之间进程不会相互影响,能区分计算资源。

开发/运维(DevOps)

更快速的应用交付和部署:

传统的应用开发完成后,需要提供一堆安装程序和配置说明文档,安装部署后需根据配置文档进行繁杂的配置才能正常运行。Docker化之后只需要交付少量容器镜像文件,在正式生产环境加载镜像并运行即可,应用安装配置在镜像里已经内置好,大大节省部署配置和测试验证时间。

更便捷的升级和扩缩容:

随着微服务架构和Docker的发展,大量的应用会通过微服务方式架构,应用的开发构建将变成搭乐高积木一样,每个Docker容器将变成一块"积木”,应用的升级将变得非常容易。当现有的容器不足以支撑业务处理时,可通过镜像运行新的容器进行快速扩容,使应用系统的扩容从原先的天级变成分钟级甚至秒级。

更简单的系统运维:

应用容器化运行后,生产环境运行的应用可与开发、测试环境的应用高度一致,容器会将应用程序相关的环境和状态完全封装起来,不会因为底层基础架构和操作系统的不一致性给应用带来影响,产生新的BUG。当出现程序异常时,也可以通过测试环境的相同容器进行快速定位和修复。

更高效的计算资源利用:

Docker是内核级虚拟化,其不像传统的虚拟化技术一样需要额外的Hypervisor [管理程序]支持,所以在一台物理机上可以运行很多个容器实例,可大大提升物理服务器的CPU和内存的利用率。

2 Docker 安装

2.1 Docker 的基本组成

img

  • 镜像(Image):

Docker 镜像就好比是一个模板,可以通过这个模板来创建容器服务,Tomcat 镜像 --> run --> tomcat01容器(提供服务)。通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器重的)。

  • 容器(Container):

Docker 利用容器技术,独立运行一个或者一个组应用,通过镜像来创建的。

启动、停止、删除、基本命令!

目前就可以把这个容器理解为就是一个简易的Linux系统项目

  • 仓库(Repository):

仓库就是存放镜像的地方。仓库分为公有仓库和私有仓库!

公有仓库:Docker Hub(默认是国外的)。阿里云、网易云都有容器服务器(配置镜像加速!)

2.2 安装 Docker

环境准备

  1. 需要会一部分Linux的基础
  2. CentOS 7
  3. 我们可以使用远程连接工具连接远程服务器进行操作!

环境查看

#系统内核是 3.10 以上的
$ uname -r 
3.10.0-1160.el7.x86_64
#系统版本
$ cat /etc/os-release 
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"

安装Docker

帮助文档:

#1.卸载旧的版本
$ sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

#2.需要的安装
$ sudo yum install -y yum-utils

#3.设置镜像的仓库
$ sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo #默认是国外的

$ sudo yum-config-manager \
  --add-repo \
  https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo #推荐使用阿里云的,速度快

#4.更新yum软件包的索引
$ yum makecache fast

#5.安装Docker相关的 Docker-ce社区版,ee则是企业版
$ sudo yum install -y \
  docker-ce docker-ce-cli containerd.io docker-compose-plugin

#6.启动Docker
$ systemctl start docker

#7.查看Docker的信息
$ docker version
#判断Docker是否安装成功

#8.运行helloworld
$ sudo docker run hello-world 

img

img

#9.查看镜像是否存在hello-world镜像
$ docker images 
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
hello-world   latest    feb5d9fea6a5   11 months ago   13.3kB

#10.卸载Docker
#卸载依赖
yum remove -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

#删除资源
sudo rm -rf /var/lib/docker
#/var/lib/docker是Docker默认的工作路径

#最新版
sudo rm -rf /var/lib/containerd

2.3 阿里云镜像加速

  1. 登录阿里云找到容器服务
  2. 找到镜像加速地址

img

  1. 配置使用
sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://po13h3y1.mirror.aliyuncs.com"]
}
EOF

sudo systemctl daemon-reload

sudo systemctl restart dockersudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://po13h3y1.mirror.aliyuncs.com"]
}
EOF

sudo systemctl daemon-reload

sudo systemctl restart docker

2.4 回顾HelloWorld流程

img

2.5 Docker 底层原理

2.5.1 Docker 是怎么工作的?

Docker 是一个 Client - Server 结构的系统,Docker 的守护进程运行在主机(Docker主机)上,通过 Socket 从客户端访问。

Docker Server 接受到 Docker-Client 的指令,就会执行这个命令!

img

Docker 为什么比 VM 快?

  1. Docker 有着比虚拟机更少的抽象层
  2. Docker 利用的是宿主机的内核,VM需要的是Guest OS

img

所以说,新建一个容器的时候,Docker 不需要像虚拟机一样重新加载一个操作系统内核,避免引导,虚拟机是加载 Guest OS,分钟级别的;而Docker 是利用宿主机的操作系统内核,省略了这个复杂的流程,秒级的。

img

猜你喜欢

转载自blog.csdn.net/weixin_40274679/article/details/131736412