Docker虚拟化简介及两种平台的构建流程

Stella981
• 阅读 401

文章目录

一、Docker虚拟化的简介

1、虚拟化技术的概念
1)虚拟化技术主要是将物理的资源转变为逻辑上可以管理的资源,以打破物理资源结构之间的壁垒,让计算的元件运行在虚拟的基础上,而不是直接运行在物理的资源上。
2)虚拟化技术的底层是要进行虚拟的硬件设备物理机资源,通过虚拟化技术软件可以将物理机虚拟生成N台虚拟机,应用程序、软件服务(Nginx、MYSQL、Zabbix、Redis、Tomcat、Ansible)运行在虚拟机上,而不是直接运行在物理机资源上。

2、虚拟化技术的种类?

  • 完全虚拟化技术实际上是通过软件实现对操作系统的资源再分配,比较成熟,例如我们的KVM、VirtualBOX;

  • 半虚拟化技术则是通过代码修改已有的系统,形成一种新的可虚拟化的系统,调用硬件资源去安装多个系统,整体速度上相对高一点,代表产品有Xen。

  • 轻量级虚拟化,Docker虚拟化(介于完全虚拟化、半虚拟化之间),轻量级虚拟化;

现在存在的虚拟化技术有:

  • VMware ESXI;
  • XEN;
  • KVM;
  • Open-vz;
  • Hyper-v;
  • Docker。

3、Docker虚拟化的认识

  • Docker是众多虚拟化技术中的一种,是目前互联网IT企业使用最广泛的一种虚拟化技术,其特点:轻量级、高性能、安全、稳定、高效等,主要是用于解决企业级轻量级操作系统和应用容器资源而诞生的。
  • Docker虚拟化技术的产物是虚拟机,轻量级的虚拟机没有传统虚拟化-虚拟机的体积大,没有过多没有用的文件和数据,比较简洁、实用。
  • 在Docker虚拟化技术学习中,Docker虚拟机也被称为Docker容器,Docker容器跟集装箱机制是类似的,Docker容器中可以打包开发者软件包、依赖环境、库文件,可以轻松将容器移植到各个不同的Linux平台,而且在迁移过程中软件包、依赖环境、库文件不会有任何丢失,整体迁移。

4、Docker中的镜像、仓库、容器的辨析
辨析图解:
Docker虚拟化简介及两种平台的构建流程
1、Docker镜像(Image)类似于虚拟机的镜像,可以将他理解为一个面向Docker引擎的只读模板,包含了文件系统。

例如:一个镜像可以完全包含了Ubuntu操作系统环境,可以把它称作一个Ubuntu镜像。镜像也可以安装了Apache应用程序(或其他软件),可以把它称为一个Apache镜像。
2、Docker容器(Container)类似于一个轻量级的沙箱子(因为Docker是基于Linux内核的虚拟技术,所以消耗资源十分少),Docker利用容器来运行和隔离应用。

(1)容器是从镜像创建的应用运行实例,可以将其启动、开始、停止、删除,而这些容器都是相互隔离、互不可见的。

(2)可以把每个容器看作一个简易版的Linux系统环境(包括了root用户权限、进程空间、用户空间和网络空间),以及与运行在其中的应用程序打包而成的应用盒子。

(3)镜像自身是只读的。容器从镜像启动的时候,Docker会在镜像的最上层创建一个可写层,镜像本身将保持不变。就像用ISO装系统之后,ISO并没有什么变化一样。

3、Docker仓库(Repository)类似与代码仓库,是Docker集中存放镜像文件的场所。
例如:像yum源仓库一样,Docker的仓库就是存储大量镜像的一个地方,安装了docker会有各种镜像到仓库索取的下载连接。通过连接到仓库我们就可以获取镜像了!

二、Docker虚拟化应用方式:启动应用容器

1、原理图

Docker虚拟化简介及两种平台的构建流程 注:启动服务容器这种方式,一个docker实例只能是一个服务,相当于说这个docker容器里面只能有一个服务(应用),可以说这个容器就是这个服务,这个服务就是这个容器,服务停,该docker实例也会停下来!

因此大家应该也能看出来这种方式是不可取的,这个方法企业用的也并不多!

2、实战步骤

(1)yum安装docker

yum install docker -y
systemctl restart docker
ps -ef|grep docker
docker version

(2)从docker仓库下载Nginx镜像

docker search nginx            #在Docker仓库中搜索Nginx镜像;
docker pull docker.io/nginx #从Docker仓库中下载Nginx镜像;
docker images                #查看已下载Nginx镜像和文件路径;

Docker虚拟化简介及两种平台的构建流程 注:STARS值越大,表示下载的次数越多,我们一般选择下载次数最多的下载。

Docker虚拟化简介及两种平台的构建流程
(3)基于Nginx镜像启动Nginx应用容器

docker run -itd -p 80:80 docker.io/nginx

命令参数详解:

Run,创建一台新容器(虚拟机);
-i,interactive交互模式;
-t,tty打开终端;
-d,daemon后台启动;
-p,开启DNAT端口映射,将宿主机80端口(第一个)映射至容器的80端口;

(4)查看已启动的Nginx容器(虚拟机)

docker ps

Docker虚拟化简介及两种平台的构建流程 (5)查看该docker实例的ip

docker inspect 11b96939d2ff|grep -i ipaddr|tail -1|awk -F\" '{print $4}'
ifconfig

(6)进入Nginx容器终端

docker exec -it 11b96939d2ff /bin/bash
                容器ID(主机名)

(7)从宿主机上,重启Nginx容器中Nginx WEB服务

#将宿主机上index.html文件更新至Docker Nginx容器中;
docker cp index.html 430cf15e57d4:/usr/share/nginx/html/

docker exec 430cf15e57d4 nginx -s reload
#注意不能把nginx停止,停了nginx服务,该docker实例也会停!

三、Docker虚拟化应用方式:启动Guest OS(企业推荐)

1、原理图

Docker虚拟化简介及两种平台的构建流程 上面的图中有错,把Hypervisor改成docker Engine即可!
注:在云中,每个容器即是一个用户,这种方式下每个用户都有自己独立的操作系统,每个用户的服务都运行在自己的容器的Guest OS中!这种方式是当前的主流!

2、实战步骤

注:实现ssh可以连接docker Guest OS。

(1)安装、启动docker略
(2)查找centos,并下载
docker search centos
docker pull docker.io/jdeathe/centos-ssh

Docker虚拟化简介及两种平台的构建流程

(3)启动docker容器
docker run -itd -p 6022:22 --privileged --name aliyun docker.io/jdeathe/centos-ssh 
--privileged  容器以特权模式(root)运行    
--name 指定主机名

_重点: -p 这个参数必须指定,在启动应用容器方式中我们映射的是服务的端口(例如:-p 80:80),在用Guest OS方式中我们映射的ssh服务的端口;之所以必须指定-p,因为一般来说一台服务器都要虚拟很多个容器出来,容器之间端口不能冲突,也就是说映射的要是服务器的不同端口_!

–name的作用:
Docker虚拟化简介及两种平台的构建流程 –privileged的作用:
Docker虚拟化简介及两种平台的构建流程 注:提示没有root权限,我们在创建运行容器时,必须指定–privileged,才能解决这个报错

docker常用命令须知:

docker ps #可以看现在正在运行的容器有哪些
docker ps -a #列出所有已创建的容器(包括停止的和正在运行的)
docker ps -aq #列出所有已创建容器的容器ID
docker ps -aq|xargs docker rm -f {} #删除容器
docker rmi +镜像名称 #删除docker镜像
docker start|restart|stop +容器ID #启动、重启、停止一个docker容器
(4)安装ssh

注:若你下载的centos镜像有ssh这个服务,可忽略这一步

yum install openssh openssh-server -y
(5)修改ssh配置文件、root用户密码

修改ssh配置文件:

vim /etc/ssh/sshd_config 
#把下面参数改成下面的值:
GSSAPIAuthentication no 
UseDNS no
PermitRootLogin yes
PasswordAuthentication yes

修改root用户密码:

echo "1"|passwd --stdin root

查看改容器的Guest OS的IP地址:

yum install net-tools -y
ifconfig #如果不安装net-tools软件包,就没有这个命令

注:这个IP是拿来ssh用的。

(6)将容器重启即可,解决systemctl启动报错

注:按理来说重启ssh服务就行了,但是我的ssh服务,重启会报错!
Docker虚拟化简介及两种平台的构建流程 这个是因为D-Bus服务没起,我们只能用/usr/sbin/sshd这种风格去启动ssh,如果想用systemctl这种风格去启动的话,启动容器时需要加下面这个参数:

docker run -itd --privileged c432b9da999c /usr/sbin/init
#把容器启动的入口命令变成/usr/sbin/init即可!

如果不想这么麻烦,那我们这里把容器重启也可以的!

docker restart +容器ID
(7)在宿主机上ssh即可

注意:在宿主机上ifconfig看到的docker0网卡的ip并不是docker容器的IP,而是对应docker容器的网关ip,要看docker容器的ip需要在docker容器中ifconfig
Docker虚拟化简介及两种平台的构建流程 ssh连接成功!

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
Opencv中Mat矩阵相乘——点乘、dot、mul运算详解
Opencv中Mat矩阵相乘——点乘、dot、mul运算详解2016年09月02日00:00:36 \牧野(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fme.csdn.net%2Fdcrmg) 阅读数:59593
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
9个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这