文章目录
一、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中的镜像、仓库、容器的辨析
辨析图解:
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实例也会停下来!
因此大家应该也能看出来这种方式是不可取的,这个方法企业用的也并不多!
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镜像和文件路径;
注:STARS值越大,表示下载的次数越多,我们一般选择下载次数最多的下载。
(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
(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、原理图
上面的图中有错,把Hypervisor改成docker Engine即可!
注:在云中,每个容器即是一个用户,这种方式下每个用户都有自己独立的操作系统,每个用户的服务都运行在自己的容器的Guest OS中!这种方式是当前的主流!
2、实战步骤
注:实现ssh可以连接docker Guest OS。
(1)安装、启动docker略
(2)查找centos,并下载
docker search centos
docker pull docker.io/jdeathe/centos-ssh
(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的作用:
–privileged的作用:
注:提示没有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服务,重启会报错!
这个是因为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
ssh连接成功!