1. 首页
  2. Docker

Docker虚拟化技术

虚拟化就是把物理资源转变为逻辑上可以管理的资源,以打破物理结构间的壁垒,计算元件运行在虚拟的基础上而不是真实的基础上,可以扩大硬件的容量,简化软件的重新配置过程。
允许一个平台同时运行多个操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率,是一个为了简化管理,优化资源的解决方案。
Docker 是一个开源的应用容器引擎,基于 Go 语言 ,是一个轻量级虚拟化技术。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口,更重要的是容器性能开销极低。
要掌握Docker虚拟化技术,首先要了解3个Docker虚拟化相关的概念
镜像是 Docker 运行容器的前提,仓库是存放镜像的场所,镜像是Docker的核心。
Docker镜像 Docker镜像类似Linux ISO镜像文件,主要是存储了各种应用程序、软件服务、 各种数据等,为Docker虚拟化的产物(虚拟机)提供数据支撑的,后续的虚拟 机所需的文件、数据都是从镜像文件中获取的,而且Docker镜像内容只读的、 不能被修改的、模板数据。
Docker容器(虚拟机) Docker容器(虚拟机)是基于Docker镜像运行之后的实例,类似进程和程序的 关系(进程是程序运行之后的实例),Docker容器是可读、可写的,不能直接 修改镜像的数据内容,镜像是持续为容器提供服务,没有镜像就没有容器,容器 永远离不开镜像。
Docker仓库 Docker仓库是用于存储镜像的地方,仓库通常分为两类:公共仓库、私有仓库, 企业测试环境、生产环境推荐自建私有仓库,私有仓库:安全、稳定、高效、管 理、定制性。
Docker采用的是Client/Server 架构。客户端向服务器发送请求,服务器负责构建、运行和分发容器。客户端和服务器可以运行在同一个 Host 上,客户端也可以通过 socket 或 REST API 与远程的服务器通信。

Docker虚拟化技术


Docker虚拟化特点:
跟传统VM比较具有如下优点
1、操作启动快
运行时的性能可以获取极大提升,管理操作(启动,停止,开始,重启等等) 都是以秒或毫秒为单位的。
2、轻量级虚拟化
你会拥有足够的“操作系统”,仅需添加或减小镜像即可。在一台服务器上可以布署100~1000个Containers容器。但是传统虚拟化,你虚拟10-20个虚拟机就不错了。
3、开源免费
开源的,免费的,低成本的。由现代Linux内核支持并驱动。轻量的Container必定可以在一个物理机上开启更多“容器”,相比更加节省成本。
4、前景及云支持
正在越来越受欢迎,包括各大主流公司都在推动和应用docker,性能有很大的优势。
为什么使用docker
Docker 在如下几个方面具有较大的优势:
1、更快速的交付和部署
Docker在整个开发周期都可以完美的辅助你实现快速交付。Docker允许开发者在装有应用和服务本地容器做开发。可以直接集成到可持续开发流程中。
开发者可以使用一个标准的镜像来构建一套开发容器,开发完成之后,运维人员可以直接使用这个容器来部署代码。 Docker 可以快速创建容器,快速迭代应用程序,并让整个过程全程可见,使团队中的其他成员更容易理解应用程序是如何创建和工作的。 Docker 容器很轻很快!容器的启动时间是秒级的,大量地节约开发、测试、部署的时间。
2、高效的部署和扩容
Docker容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。 这种兼容性可以让用户把一个应用程序从一个平台直接迁移到另外一个。
Docker的兼容性和轻量特性可以很轻松的实现负载的动态管理。可以快速扩容或方便的下线应用和服务,这种速度趋近实时。
3、更高的资源利用率
Docker 对系统资源的利用率很高,一台主机上可以同时运行数千个 Docker 容器。容器除了运行其中应用外,基本不消耗额外的系统资源,使得应用的性能很高,同时系统的开销尽量小。传统虚拟机方式运行 10 个不同的应用就要起 10 个虚拟机,而Docker 只需要启动 10 个隔离的应用即可。
4、更简单的管理
使用 Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理。
Docker镜像原理
一个完整的Docker镜像可以支撑一个Docker容器的运行,在Docker容器运行过程中主要提供文件系统数据支撑。
Docker镜像作为docker中最基本的概念,有以下几个特性:
1、镜像分层,每个镜像都由一个或多个镜像层组成;
2、可通过在某个镜像加上一定的镜像层得到新镜像(此过程可通过编写dockerfile或基于容器Commit实现);
3、每个镜像层拥有唯一镜像ID;
4、镜像在存储和使用时共享相同的镜像层(根据ID),所以在pull镜像时,已有的镜像层会自动跳过下载;
5、每个镜像层都是只读,即使启动成容器,也无法对其真正的修改,修改只会作用于最上层的容器层;
Docker虚拟化技术
Docker容器,可以理解为一个或多个运行进程,而这些运行进程将占有相应的内存,相应的CPU计算资源,相应的虚拟网络设备以及相应的文件系统资源。而Docker容器所占用的文件系统资源,则通过Docker镜像的镜像层文件来提供。
基于每个镜像的json文件,Docker可以通过解析Docker镜像的json的文件,获知应该在这个镜像之上运行什么样的进程,应该为进程配置怎么样的环境变量,Docker守护进程实现了静态向动态的转变。

centos7 yum方式构建docker:
sed -i ‘/SELINUX/s/enforcing/disabled/g’ /etc/selinux/config      #安装前关闭selinu
uname -r   3.10.0-514.el7.x86_64          #查看内核版本
1、配置centos7yum源:
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum clean all ; yum makecache
#安装扩展源:
yum -y install epel-release
2、安装工具包:
yum install -y yum-utils device-mapper-persistent-data lvm2
3、安装docker:
yum -y remove docker docker-common     #卸载之前的旧版本:
yum-config-manager –add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum list docker-ce  –showduplicates | sort -r    #从高到低列出Docker-ce的版本
yum install -y docker-ce-xxx       #你可以指定具体版本
yum install -y docker-ce           #这里安装最新版;但是报错了,提示如下:
安装的docker-ce软件包需要container-selinux >= 2:2.74
排错:yum install container-selinux -y    #安装最新的contain-selinux,即可解决。
4、启动docker
systemctl start docker
systemctl enable docker         #开机自启
ps -ef |grep docker             #查看docker进程  
docker version                  #查看Docker版本信息

Docker仓库源更新:
Docker默认连接的国外官方镜像,有时下载镜像的速度很慢,为了提高效率可以自建仓库或者修改为国内仓库源,提升拉取镜像的速度。自建Harbor私有仓库可以查看 https://www.wzstyle.cn/205.html
修改方法:vim /etc/docker/daemon.json ;加入以下内容:
cat>/etc/docker/daemon.json<<EOF
{
“registry-mirrors”:[“https://registry.docker-cn.com”]
}
EOF
systemctl restart docker      #重启docker
#也可以使用阿里云配置镜像加速器:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

docker常用命令:
docker  version                     #查看版本
docker  search centos         #搜索可用docker镜像
docker  images                      #查看当前docker所有镜像
docker  pull  centos             #下载镜像
cat   centos.tar | docker import  –  centos6_newname        #Docker导入镜像
docker  export  容器_id  > cenos6.tar                     #Docker导出镜像
docker  run  centos  echo “hello word”                    #在docker容器中运行hello world!
docker  run  centos  yum install ntpdate                   #在容器中安装ntpdate的程序
docker  ps -l                         #命令获得最后一个容器的id
docker   ps -a                        #查看所有的容器。
运行docker commit 提交刚修改的容器,例如:
docker  commit  2313132  centos:v1
docker run -i -t -d centos /bin/bash 在容器里启动一个/bin/bash shell环境,可以登录进入操作,其中-t tty,表示打开一个终端的意思,-i interactive,表示可以交互输入,-d表示在后台启动,以daemon方式启动。  
docker  run  -d  centos:v1  /bin/bash
Docker  stop  id              #关闭容器
Docker  start  id              #启动某个容器
docker  rm  id                  #删除容器,
docker  rmi  images            #删除镜像
docker  run  -d  -p  80:80  -p 8022:22   centos:v2,解析:-p指定容器启动后docker上运行的端口映射及容器里运行的端口,80:80,第一个80表示docker系统上的80,第二个80表示docker虚拟机里面的端口。用户默认访问本机80端口,自动映射到容器里面的80端口。
docker  exec   -it  id  /bin/bash             #进入容器终端
docker  exec  id ifconfig                        #查看容器的IP地址;
docker  inspect id |grep -i ipaddress             #查看容器IP地址;
docker  exec  df -h                          #查看容器的磁盘分区信息;
更多如下:
docker
search
在docker hub中搜索镜像;
docker
pull
从docker镜像源服务器拉取指定镜像或者库镜像;
docker
push
推送指定镜像或者库镜像至docker源服务器;
docker
history
展示一个镜像形成历史;
docker
images
列出系统当前镜像;
docker
run
创建一个新的容器并运行一个命令;
docker
start
启动容器;
docker
stop
停止容器;
docker
attach
当前shell下attach连接指定运行镜像;
docker
build
通过Dockerfile定制镜像;
docker
commit
提交当前容器为新的镜像;
docker
cp
从容器中拷贝指定文件或者目录到宿主机中;
docker
create
创建一个新的容器,同run,但不启动容器;
docker
diff
查看docker容器变化;
docker
events
从docker服务获取容器实时事件;
docker
exec
在已存在的容器上运行命令;
docker
export
导出容器的内容流作为一个tar归档文件[对应import];
docker
import
从tar包中的内容创建一个新的文件系统映像[对应export];
docker
info
显示系统相关信息;
docker
inspect
查看容器详细信息;
docker
kill
指定docker容器;
docker
load
从一个tar包中加载一个镜像[对应save];
docker
login
注册或者登陆一个docker源服务器;
docker
logout
Docker registry退出;
docker
logs
输出当前容器日志信息;
docker
port
查看映射端口对应的容器内部源端口;
docker
pause
暂停容器;
docker
ps
列出容器列表;
docker
restart
重启运行的容器;
docker
rm
移除一个或者多个容器;
docker
rmi
移除一个或多个镜像;
docker
save
保存一个镜像为一个tar包[对应load];
docker
tag
给源中镜像打标签;
docker
top
查看容器中运行的进程信息;
docker
unpause
取消暂停容器;
docker
version
查看docker版本号;
docker
wait
截取容器停止时的退出状态值。

操作案例:
docker run -itd -p 80:80 docker.io/nginx        #以80端口开启nginx容器,浏览器访问宿主机ip可以访问nginx首页欢迎页面。
操作案例:
基于Docker构建Tomcat WEB平台
docker search tomcat
docker pull docker.io/tomcat
docker run -itd -p 8080:8080 docker.io/tomcat
docker run -itd -p 8081:8080 docker.io/tomcat
docker ps | grep tomcat
docker inspect a55686c499bc | grep -i ipaddress
最后访问 http://docker宿主机ip:8080/  或者8081   看到tomcat神兽页面即可。。。

原创文章,作者:wz,如若转载,请注明出处:https://www.wzstyle.cn/503.html

发表评论

邮箱地址不会被公开。 必填项已用*标注

评论列表(1条)