虚拟化技术
通俗的讲:就是一个为了简化管理,优化资源的解决方案。就是把物理资源转变为逻辑上可以管理的资源,可以扩大硬件的容器,简化软件的重新配置过程。
虚拟化与虚拟机最大的区别:
虚拟化技术计算元件,资源申请调度到其他硬件服务器。
腾讯云、阿里云就是虚拟化,申请时只需要提交CPU、内存、硬件、网卡带宽需求,提交到后端硬件服务器,通过计算机原件实现资源调度。
Docker最早为LXC(LXC为Linux Container的简写。可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制以及全虚拟化的其他复杂性)+AUFS组合,docker0.9.0版本开始引入libcontainer,可视为LXC的代替品。其中LXC负责资源管理,AUFS负责镜像管理;而LXC包括 cgroup、namespace、chroot等组件,并通过cgroup进行资源管理。
从资源管理来看
docker、lXC、Cgroup三者关系:Cgroup在最底层落实资源管理,LXC在Cgroup上封装了一层,docker又在LXC上封装了一层
*Cgroup:(限制系统资源的)control group的缩写,是Linux内核提供的一种可以限制、记录、隔离进程组(process groups)所使用的资源。
docker不是新兴技术,它是基于LinuxContain(Linux自带软件),作用可以做资源隔离。
为什么还需要docker:
因为可以更好的隔离和管理
Docker是什么
docker 一个新兴的虚拟技术,是一个开源的应用容器引擎,基于谷歌Go语言开发实现,属于系统层面的虚拟化技术
为什么又叫容器呢?
就相当于货轮上的集装箱,集装箱里存不同的货物。
而docker:容器是docker重要概念,一个容器就是一个App,容器里可以是Python,Java,PHP。最重要的是容器之间是隔离的,也就是说容器之间是不受任何影响的,这是docker的核心所在
一句话来说:
docker是一个平台,平台上面可以装很多容器,容器里面再放各种应用
Docker优点
可以让开发者打包他们的应用以及依赖包到一个轻量级,可移植的容器中,然后发布到任何安装docker的电脑上
Docker能做什么
docker可以解决虚拟机能够解决的问题,同时也能够解决虚拟机由于电脑资源要求过高无法解决的问题,可以直接基于这个系统启动App。可以将Web/App系统打包成镜像,类似ISO镜像,将镜像文件移植到其他系统上。
虚拟机缺点:
传统的虚拟机是在硬件的基础上,虚拟出的系统,再在系统上部署相关的App应用,传统的虚拟机想要实现nginx,需要先安装一个虚拟机,然后在虚拟机上安装nginx。如果想开多个应用 就需要安装多个操作系统,大家都知道操作系统是很浪费资源的
虚拟机
docker
docker 基于宿主机,docker安装好想要运行php应用,就建立一个php环境,环境安装完在安装PHP应用,docker引擎就相当于一个货轮,货轮里装的是容器,容器里装的是应用和应用环境
docker
不同点
docker引擎相当于虚拟机管理程序,省去了虚拟操作系统,之所以说dock二是轻量级的,原因就在这。因为操作系统的硬件资源是非常非常多的
为什么要使用docker
1.更快速的交付和部署
对开发和运维人员来说,最希望就是一次创建或配置,可以在任意地方正常使用
例如:开发者可以使用一个标准的镜像构建一套开发容器,开发完成之后,运维人员可以直接使用这个容器部署代码。
2.更轻松的迁移和扩展
Docker 容器几乎在任意的平台上运行,包括物理机,虚拟机,公有云,私有云,个人电脑,服务器等等,这种兼容性可以让用户把一个应用程序从一个平台直接迁移到另外一个。前提是:必须安装docker
3.更高的资源利用率
一台主机可以同时运行数千个docker容器,容器除了运行其应用外,基本不消耗系统资源,使得应用的性能很高,同时系统的开销尽量小。
传统的虚拟机方式运行10个不同的应用就要起10个虚拟机,而docker只需要启动10个隔离的应用容器即可。
实现docker虚拟化技术需要具备三个条件:
镜像:模板,Dock二虚拟化基于系统、程序、静态,不能修改,ISO文件也不能直接修改
容器:称为docker虚拟机,基于镜像运行的实体,也就是说把镜像跑起来,就变成了容器。
镜像就像面向对象中的类一样,而容器就是实例
仓库:存放镜像的地方,共有,所有。与git架构类似
总结
docker背后的想法是创建软件程序可移植的轻量级容器,让其可以在任何安装了docker的机器上运行,并不关心底层操作系统,就像造船者创建的集装箱而不需要考虑在那种船上一样。
简化部署流程,提高生产力
Docker项目架构
docker使用c/s架构,通过docker客户端连接到Docker服务器上从而管理Docker服务器里面的镜像和容器,类似git的架构
docker基本命令
查看版本
docker version
测试镜像
docker run hello-world
如果出现下图信息则安装成功
设置加速器
作用:让下载速度更快
加速器有阿里云,163等。我用的阿里云镜像
http://dev.aliyun.com
点击>>>管理中心>>>镜像加速器
这是下载镜像的地址(mac)
然后点击docker图标,preferences >>> deamon
下载镜像可以通过https://hub.docker.com
eg:下载通过python写的Webapp
docker pull training/webapp
busybox
busybox:是一个集成了三百多个最常用的Linux命令和 工具的软件,减缓版的Linux。
docker pull busybox
下载Ubuntu
docker pull ubuntu:16.04
查看本地镜像
docker images ls
docker images
依次为:镜像的名字、版本、ID号、创建时间、大小
查看CPU
free -m
top
查看磁盘分区
df -h
df -i
删除一个或多个镜像
docker images rm ID号或者镜像名字 ID号或者镜像名字 ...
Docker 容器操作
/bin/bash是Linux的命令行工具,类似window的cmd进入dos系统
查看已经启动的容器
docker ps
查看所有容器(包含没有启动的容器)
docker ps -al
启动容器
启动容器有两种方式,一种是基于镜像新建一个容器启动,另外是将终止的容器重新启动
因为Docker的容器实在是太轻了,很多时候用户都是随时删除和新建容器
docker run 镜像ID或名字
是不可以访问的
原因容器(是一个简易的Linux操作系统)是隔离的集装箱,和自己电脑浏览器是隔离 的,默认的情况下是不能的 ,因为容器里没有浏览器 。将容器端口和自己电脑做映射就可以了
在后台运行
docker run -itd -p 8888:5000 id号
-d 后台运行
-t 打开一个终端
-i 允许交互输入
交互运行
启动一个bash,允许用户进行交互。
docker run -t -i CONTAINER [CONTAINER...] /bin/bash
eg:
创建centos容器并且进入centos容器中,加上/bin/bash 就是进入命令行
docker run -it centos /bin/bash
重启一个容器
docker restart CONTAINER [CONTAINER]
eg:
docker restart web
停止容器
docker stop CONTAINER ID
删除一个容器
docker rm r容器ID
查看容器信息
docker logs 容器ID
进入容器
docker exec -i -t CONTAINER /bin/bash
进入容器就是一个简易的Linux,通过操作Linux命令来操作容器
主机和容器间 的拷贝
docker cp cp是源 :是目标路径
# 将edof8bb24e容器opt/webapp/app.py 拷贝到D盘下的www目录
docker cp edof8bb24e:/opt/webapp/app.py D:/www
数据卷
什么是数据卷?
是一个可供一个或多个容器使用的特殊目录,它绕过USF,可以提供很多有用的特性:
1.数据卷可以在容器之间共享和重用
2.对数据卷的修改会立马生效
3.对数据卷 的更新,不会影响镜像
4.数据卷默认会一直存在,即使容器被删除
注意:
数据卷的使用,类似于Linux下的目录或文件进行mount(挂载),镜像中的被指定为挂载点的目录中的文件会隐藏掉,能显示看的是挂载的数据卷
为什么要使用数据卷
将本地中的代码运行在docker容器中
将本地目录映射到容器目录
挂载的前提
授权本地磁盘
容器要想访问本地文件需要在docker settings 》》》file Sharing 添加 然后自动重启
语法
docker run -d -p --name web -v D:www/webapp:/opt/webapp training/webapp
这样在本地创建一个文件就会同时在容器中存在
下载镜像
可以使用阿里云的 http://dev.aliyun.com
如果点搜索不行,那就随便乱点点,再点搜索就可以了
下载
docker pull 地址 :版本
创建lamp容器并且运行
--privileged=true
/usr/sbin/init
获取root权限
docker run -itd -p 80:80 -p 3306:3306 --name lamp --privileged=true -v D:/www/default:/data/wwwroot/default ec258725b54b /usr/sbin/init
制作阿里云镜像
制作本地镜像
意思是从网上拉下来一个镜像,自己修修改改,再上传上去,就是自己制作的镜像了
docker commit -a 'haha.com' -m 'this is images' 容器ID 镜像的名字:版本
# -a 提交镜像的作者
# -m 提交时的说明
#-p 在commit时,将容器暂停
利用centos创建镜像
首先启动镜像,变成容器并进入,起名字叫mycentos2
对容器进行修改
制作镜像
my-contos:v2 是镜像的名字
上传到阿里云
http://dev.aliyun.com 阿里云>>>管理中心>>>镜像列表>>>创建镜像库>>>公开>>>本地仓库
点进去之后就有对应指南
导出镜像到本地
docker save d2b9sda76l -o D:/www/centos-lamp-v2.tar
加载本地镜像文件
docker load -i D:www/centos-lamp-v2.tar
下载MySQL
docker pull mysql:5.6
安装MySQL容器
docker run --name mysql -e MYSQL_ROOT_PASSWORD=admin -p 3306:3306 -d mysql:5.6
转自:https://www.iqiyi.com/v_19rr0mbefk.html#curid=1076954300_2a5ed74efbaf3af70a9f9ff2666f98a9