您好,欢迎来到华佗小知识。
搜索
您的当前位置:首页浅析Docker虚拟化技术

浅析Docker虚拟化技术

来源:华佗小知识
系统维护与管理SysteCmo mMamneangetment浅析Docker虚拟化技术■ 河南 刘景云和传统的虚拟化技术(例如KVM,VMware,Hyper-V等)不同,Docker 是一个开源的应用容器引擎,让开发者可以打包其应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上来实现虚拟化。容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统方式则是在硬件的基础上,虚拟出自己的系统,再在系统上部署相关的APP应用。容器是完全使用沙箱机制,相互之间不会有任何接口,几乎没有性能开销,可以很容易地在其他机器和数据中心中运行。最重要的是,Docker不依赖于任何语言、框架或包括系统。www.365master.com 2019.0173System Management系统维护与管理责任编辑:季莹 投稿信箱:netadmin@365master.comDocker虚拟化的特点通俗地讲,Docker技操作变得更为简单。用户操费以及发展前景广阔等特术就是将各种程序进行打作Docker的容器,就如同操点。例如,其启动、停止、开包,并放置到一个容器中,作一个快速轻量级的虚拟机始或者重启等等管理操作的并将其部署在另外的主机一样。因此,也可以将不同速度是以秒或毫秒为单位上,之后启动该容器即可,而的Docker容器理解为不同的,可以大大提高系统的性无需进行任何额外的配置。的虚拟机。能。Docker可以实现轻量级的Docker就是基于本机利用轻量级虚拟化特性,操作系统虚拟化解决方案,的物理系统,通过Docker 可以很轻松地在一台服务Docker的基础是Linux容Engine去部署各种应用,应器上部署成百上千个容器,器(LXC),Cgroup等技术,在用之间是彼此隔离的,而无使您拥有数量巨大的虚拟系Linux中已经包含了LXC技需去安装更上层的虚拟系统,而传统的虚拟化一般只术。统。这和传统的虚拟技术是能拥有几十个虚拟机。所谓的Linux容器,指的完全不同的,例如对于KVMDocker是开源的,免费是可以将各种对象模拟成自来说,需要先在自身硬件和的,低成本的虚拟化技术,由己的进程,然后在系统中启Linux系统上再虚拟出一个主流的Linux内核支持并驱动,各个进程之间相互不影系统,并在该系统上来部署动。响。应用。Docker日益受到用户的Cgroup是Control 对于Docker虚拟化来欢迎,包括各大主流公司都Group的简称,它为Linux内说,涉及到镜像、容器、仓库在推动Docker的快速发展。核提供了一种任务聚集和划等关键要素。Docker的镜像当然,Docker使用的容分的机制,通过一组参数集即模板,类似于ISO镜像文器和VMware等使用的虚拟合将一些任务组织成一个或件。容器就是使用镜像来启机是存在差别的,虚拟机是多个子系统。子系统是根据动常见的应用或者系统,在一个完整的系统,而容器只Cgroup对任务的划分功能,当前系统上安装所需的容器需要是一个最基本的镜像而将任务按照一种指定的属性即可,而无需构建新的系统。已,例如在Docke中虚拟一划分成的一个组,主要用来仓库是存放镜像的地方,包个Linux系统,可能只需要实现资源的控制。括公开仓库和私有仓库两种一二百兆大小的镜像。如果Docker在LXC的基础上形式。想虚拟一个应用程序(例如进行了进一步的封装,使用Docker虚拟机具有操作TomCat等),需要的镜像体积户无需关心容器的管理,让启动快,轻量级虚拟,开源免会更小。742019.01 www.365master.com 责任编辑:季莹 投稿信箱:netadmin@365master.com系统维护与管理System Management安装和启动Docker默认情况下,在CentOS 执行“sestatus”命执行“yum install lcx 7或者Ubuntu中才可以使用令,查看其中的“current libcgroup”命令,来安装YUM方式来安装Docker,因mode”的值,如果其为LCX容器和和Cgroup资源限为Docker需要运行在Linux “permssive”,就需要执行制工具。执行“yum install Kernerl 3.8版本以上。在“reboot”命令,来重启系统。Docker-io”命令。在出现的CentOS 6.X中,必须先安装执行“wget http://ftp.“IS this ok”栏中输入“y”,CentOS扩展源epel,为了riken.jp/Linux/fedora/执行Docker安装操作。安摆脱不必要的,应该把epel/6/x86_/epel-装完毕后,执行“/etc/init.SELinx关闭。release-6-8.noarch.rpm”d/docker start”命令,来启执行“vi /etc/命令,来下载所需的RPM包。动过Docker。执行“ps –selinux/config”命令,将下载完毕后,执行“rpm ef | grep docker”命令,可其中的“SELINUX=”的内容-ivh epel-release-6-8.以查看Docker的进程信息。修改为“disabled”,来禁用noarch.rpm”命令,来安如果出现“grep docker”字SELinux。装CentOS扩展源epel。样,说明Docker启动成功。了解常用的Docker命令Docker的最大特点是可用。容器即应用级别的程序,的容器,因此彼此之间互不以启动特定的容器,例如执可以快速部署到不同的主机影响。行“docker pull tomcat”,上,而无需进行任何多余的执行“docker images”“docker pull centos”等安装和配置操作。只要将打命令,可以查看当前Docker命令,可以下载Tomcat,包好的容器放置到任何支持的所有镜像,例如Nginx,CentOS等镜像。当然,也可Docker虚拟化的系统中,就MySQL,CentOS等,返回列表以利用“wget”命令,从网上可以快速灵活的启动,对外中的“TAG”列表示不同镜像下载所需的镜像,之后利用提供不同的服务。的版本信息,例如“latest”Docker进行启动。由此看出,这样,可以快速部署很表示最新版本等。使用Docker容器不是在当前的物多台虚拟机,彼此之间隔“docker pull 镜像名”命理机器上安装新的系统,而离。例如可以同时启动多个令,可以下载指定的镜像。是Docker通过启动指定的TomCat虚拟机,虽然其都使执行“docker version”命容器,就可以使用所需的应用80端口,因此其属于不同令,可以查看Docker的详细www.365master.com 2019.0175System Management系统维护与管理责任编辑:季莹 投稿信箱:netadmin@365master.com的版本信息。执行“docker centos:latest ip addr 命令,来安装Openssl组件。search centos”命令,可以list”命令,可以在该最新执行“exit”命令,退出该虚搜索公网仓库中的可用的和的CentOS虚拟机中运行“ip 拟机。“centos”相关的Docker镜addr list”命令,查看其IP如果执行“ctrl +p +q”像。根据返回信息,可以选地址信息。命令,可以离开容器,但是其择下载的目标。执行“docker run 依然在后台运行。例如,执行“dock pull centos:latest cat /etc/执行“docker ps -l”命java-centos”命令,可以下password”命令,可以查看该令,可以查看最近一个虚拟载名为“java-centos”的虚拟机中的密码信息。机的状态,包括其名称,ID,镜像。当然,也可以手工除了查看该虚拟机中的运行的命令等信息。从网上搜索所需的镜像,信息外,还可以进入其内部执行“docker rm 然后将其导入,执行“cat 进行操作。xxxxxxxxxxxx”命令,来centos.tar|docker import 执行“docker run–i–删除指定的容器,其中的– cent6”命令,将下载的t centos:latest/bin/bash”“xxxxxxxxxxxx”为容器的“centos.tar”导入名称为命令,就进入到该虚拟机中,ID(以下与之相同)。“centos6”的镜像。其中的“i”参数表示允许交执行“cat centos6-执行“docker images 互输入,“-t”参数用来打开ssh.tar |docker import |grep centos”命令,可以过一个终端。centos-ssh”之类的命滤所有的CentOS镜像,可以执行“cat/etc/redhat-令,来导入镜像,这里是将显示其名称,版本,ID,大小release”命令,可以查看当“centos6-ssh.tar”的压缩等信息。前虚拟机的系统版本。执包导入为名称是“centos-执行“dock run 行“yum install openssh”ssh”的镜像。配置和管理Docker容器的网络连接Docker默认提供了172.17.0.0网段。信息,这和宿主机的IP并不一个隔离的内网环境,启在宿主机上执行在一个网段中。动Docker后会建立名为“ifconfig |more”命令,可“docker0”即虚拟网卡,Docker0的虚拟网卡,所有以显示当前的网络配置信其处于桥接模式,造成宿主的容器都连接到该虚拟网息,其中的“docker0”栏中机和虚拟机无法通讯。卡上,该虚拟网卡的IP为显示所启动的虚拟机的IP虽然通过内置NAT地址762019.01 www.365master.com 责任编辑:季莹 投稿信箱:netadmin@365master.com系统维护与管理System Management转换,在启动Docker时将特标目录,执行“vi ifcfg-执行“/etc/init.d/定的端口映射到宿主机的对eth0”命令,将其内容修docker restart”命令,重启应端口上,但是使用内置的改为“DEVICE=eth0”,Docker服务。桥接模式,存在很多问题,例“BOOTPROTO=none”,执行“ps –ef | grep 如在分配主机端口时比较困“ONBOOT=yes”,docker”命令,可以查看难容易冲突,每个容器暴露“TYPE=Ethernet”,Docker的进程信息,其中显的端口都不一致,造成前端“BOOTPROTO=static”,示上述桥接网卡信息。路由层Nginx配置中无法使“BRIDGE=\"br0\"等内容,表示执行“docker images”用DNS的方式。将“br0\"桥接到“eth0”网命令,查看可用的镜像信息。端口映射要在容器启卡上。例如执行“docker run–动时就指定好,之后无法执行“vi ifcfg-br0”命d–I–t xxxxxx/centos/对其变更,而且NAT不支持令,创建名为“br0”的网卡,bin/bash -d”命令,在后WebSocket。其内容为“DEVICE=\"br0\"”,台启动对应的容器,其中的相比之下,利用自建桥接“ONBOOT=yes”,“NM_“xxxxxx/centos”表示可用网络的方式,可以让每个容CONTROLLED=no”,的镜像。器都拥有的IP,便于对“BOOTPROTO=static”,执行“docker ps”命令,外界提供服务,即使每台容“TYPE=Bridge”,可以查看当前运行的容器。器都使用相同的端口,因为“IPADDR=192.168.1.97”,执行“docker attah 彼此的IP不同,所以不会发“NETMASK=255.255.255.0”,xxxxxxxxxxxxx”命令,进入生冲突,可以很好的解决以“GATEWAY=192.168.1.1”。指定的容器。上难题。配置好所需的网卡后,执行“ifconfig |more”执行“/etc/init.d/执行“/etc/init.d/network 命令,显示当前容器的IP和docker stop”命令,停止restart”命令,来重启网络。和宿主机处于同样的网段Docker服务。执行“ifconfig |more”中。执行“ifconfig docker0 命令,可以看到原来的执行PING命令,对宿down”命令,将Docker的桥“docker0”虚拟网卡消失,上主机进行探测,是可以连接网络关闭。面配置的“br0”桥接网卡出通的。因为宿主机连接在执行“brctl dclbr 现了。Internet,所以该在容器内docker0”命令,删除Docker0执行“vi /etc/是可以访问的。桥接网络。sysconfig/docker”命令,例如,执行“yum install 执行“cd /etc/在其中添加“other_args= wget”命令,来安装Wget工sysconfig/network-\"-b=br0\"”一行,表示使用具,之后利用该工具来下载scripts/”命令,进入目“br0”桥接网络。所需的文件。www.365master.com 2019.0177System Management系统维护与管理责任编辑:季莹 投稿信箱:netadmin@365master.com在CentOS 7中管理Docker容器网络如果是CentOS7的话,addr del 192.168.1.101/24 来下载pipework,使用该工实现Docker容器桥接网dev eth0”命令,清除宿主机具,可以很方便的配置网络。络的话,采取的方式是不的eth0网卡的IP清空。执行“cp ~/pipework/同的。例如宿主机的IP执行“brctl addif br0 pipework /usr/local/bin/”为192.168.1.101,网关为eth0”命令,将宿主机的网卡命令,将其复制到系统路径192.168.1.1。挂载到br0网卡上。下,之后就可以直接使用执行“yum install 执行“ip route del pipework了。docker -y”命令,来安装default”命令,清除原来的执行“docker images”Docker。路由信息。命令,来查看可用的镜像,选执行“service docker 执行“route -n”命令,择所需的镜像,利用其名称restart”命令,来启动会发现没有网关信息。和版本号就可以将其启动。Docker。执行“ip route add 例如执行“docker 当需要停止Docker服务default via 192.168.1.1 run -itd --net=none 的话,执行“service docker dev br0”命令,为br0设置--name=lamp02 centos_7:v1 stop”命令即可。路由信息,使其获得网关地/bin/bash”命令,启动目标执行“ip link set dev 址。容器“lamp02”。docker0 down”,“brctl 为了使Docker顺利使执行“pipework br0lamdelbr docker0”命令,来删用桥接网络,主要执行“vi p02 192.168.1.109/24@192除Docker0网络。“brctl /etc/sysconfig/docker-.168.1.101”命令,为其配置addbr br0”,“ip link set network”命令,在该文件IP地址。dev br0 up”,“ip addr add 中添加“DOCKER_NETWORK_执行“docker attch 192.168.1.109/24 dev br0”OPTIONS= \"-b=br0\"”一行内lamp02”命令,进入该容器。命令,创建“br0”桥接网卡,容。之后在该容器中就可以执行为其分配与宿主机同网段的执行“service docker 安装软件,下载数据等操作IP。restart”命令,来重启了。执行“ifconfig”命令,Docker。例如执行“service 可以看到新建的“br0”网卡。执行“git clone sshd restart”命令,来启动完成桥接之后,会出现网络https://github.com/后SSH。执行“yum install 不通的情况,为此执行“ip jpetazzo/pipework”命令,httpd https-devel -y”命782019.01 www.365master.com 责任编辑:季莹 投稿信箱:netadmin@365master.com系统维护与管理System Management令,安装Apache组件。之Linux中使用的广泛,在容器利用“create databases”,后执行“/etc/init.d/中执行“yum install mysql “create table”等指令,来httpd restart”命令,来启mysql-server mysql-devel 创建数据库,数据表等操作。动Apache。执行“netstat -y”命令,来安装MySQL组执行“netstat -tnl”命令,-tnl”命令,可以看到 TCP 件。执行“/etc/init.d/显示MySQL开启的TCP 30680端口已经打开。在其它主mysqld restart”命令,来启端口。 注意,当执行“exit”机上打开浏览器,访问该容动MySQL。执行“mysql”命命令退出,或者重启Docker器的地址,可以显示测试页令,就可以进入MySQL控制服务后,该容器的IP会消面。台,执行“show databases;”失,需要按照上述方法为其例如,MySQL数据库在命令,来查看数据库信息。重新设置IP。在Docker容器中安装应用程序当按照上述方法进入一执行“tar xzf jdk-etc/profile”命令,刷新上个CentOS容器后,就可以在8u91-linux-x.tar.gz”,述配置文件。其中安装各种软件了。对其进行解压在根目录下创执行“wget http://例如,TomCat是一个建名为“/usr/java”的目录。mirror.bit.edu.cn/Servlet容器,可以实现针执行“mv jdk1.8.0_91/ /apache/tomcat/tomcat-6/对Servlet和JavaServer usr/java/”命令,将其移动v6.0.45/bin/apache-Page的支持,本身就是一个到指定目录。tomcat-6.0.45.tar.gz”命HTTP服务器,可以单独使用。执行“vi/etc/profile”令,来下载TomCat。使用Docker构建TomCat 命令,添加“export 执行“tar xzf apache-Web服务器,需要先安装JDKJAVA_HOME=/usr/java/tomcat-6.0.45.tar.gz”,对组件,安装方法很简单,执jdk1.8.0_91”,“export 其解压。行“wget http://download.CLASSPATH=$CLASS执行“mv apache-oracle.com/otn-pub/java/PATH:$JAVA_HOME/tomcat-6.0.45 /usr/jdk/8u91-b14/jdk-8u91-lib:$JAVA_HOME/jre/local/tomcat/”命令,将其linux-x.tar.gz?AuthParlib”,“export PATH=$JAVA_移动到指定目录。am=1461849175_25182524c8bHOME/bin:$JAVA_HOME/jre/执行“/usr/local/f0feeec4afc7221bc15a4”命bin:$PATH:$HOMR/bin”等行tomcat/bin/startip.sh”命令,来下载所需的JDK安装内容。令,启动TomCat。包。保存后执行“source /在其它主机上打开浏览www.365master.com 2019.0179System Management系统维护与管理责任编辑:季莹 投稿信箱:netadmin@365master.com器,访问该容器的地址(例conf/”目录,执行“vi 行中的前一个端口号进行如“192.168.1.109:8080”),server.xml”命令,对其中修改,例如改为“8010”。就可以看到TomCat的启的“”tomcat01/bin/startip.sh”TomCat实例,可以进入“/行中的端口号进行修改,命令,启动第一个TomCatusr/local/”目录,执行例如修改为“8006”。将实例,执行“/usr/local/“mv tomcat/ tomcat01”,将“Connector port=\"8080\" tomcat02/bin/startip.sh”其更名为“tomcat01”。执protocol=\"HTTP/1.1\"”命令,启动第二个TomCat实行“pkill java”命令,关行中端口号进行修改,例,以此类推,可以启动多个闭java进程。执行“cp 例如修改为“8081”,将TomCat实例。当然,不同实tomcat01/ tomcat02 -a”“”可以看到开启的不同端口。使用DockerFile灵活管理容器按照上述方法,虽然可以琐。改当前账户密码。因为当前进入目标容器,并在其中安例如,执行“docker 账户为Root,为了允许其登装各种软件。但是,如果退iages”命令,来查看可用的录SSH服务,需要出之后,重新进入的话,这些镜像信息。执行“vi /etc/安装的程序就会消失,这主执行“docker run –d ssh/sshd_config”命要是因为没有执行保存的缘centos:v1 /bin/bash”命令,令,将该文件中的将故。在后台启动选定的镜像。“PermitRootLogin”的值修为了解决该问题,可以执行“/etc/init.d/sshd 改为“yes”。使用Dockerfile这一工具,restart”命令,来启动SSH执行“cd .ssh/”,“cp 对Docker容器进行有效管服务。id_rsa.pub authorized_理。使用Dockerfile,可以执行“rpm -e cracklib-keys”,“chmod 600 .ssh\\ 制作自己的镜像。通过将容dicts”命令,卸载指定的包。authorized_keys”命令,就器的各种配置信息写入到执行“yum install 可以实现无密码登录SSH服Dockerfile文件中,之后就cracklib-dicts pam”命令,务。当然,这是在本机测试可以据此启动目标镜像,这安装最新的cracklib-dicts之用。样就省去了每次进入容器都包。执行“ifconfig”命令,需要重置配置相关参数的繁执行“passwd”命令,更来查看当前的IP。例如为802019.01 www.365master.com 责任编辑:季莹 投稿信箱:netadmin@365master.com系统维护与管理System Management192.168.1.30。passwd--stdin root”一镜像。执行“docker image 执行“ssh–l root 行,表示为Root账户设置|grep none |awk '{print 192.168.1.30”或者“ssh 密码,密码为“qwe123”。添$3 |xargs docker rmi}'”–l root localhost”命令,加“RUN mkdir-p/root/.ssh 命令,可以删除失效的镜像。可以登录到本机的SSH中。&& chown root.root/root 执行“docker images”当然,这里只是进行了简单&& chmod 700/root/.ssh”命令,可以看到新生成的镜的例子,之后需要将这些配一行,表示创建所需的目录,像。如何启动这个新的镜像置信息写入到Dockerfile以及为其设置合适的权限。呢?方法是运行“docker 文件中。添加“Run mkdir /var/run/run –d –p 22:2201 –执行“docker ps –a-q”sshd”一行,来创建所需的目name=newimage centos-new”命令,可以查看当前容器的录。添加“RUN yum install 命令,就启动了该镜像,其中ID。pcre-devel -y”,“RUN yum 的“newimage”表示其名执行“docker ps–a–q install httpd httpd-devel 称.“-p”参数执行端口映射,|xargs docker rm”命令,可-y”,“mysql mysql-server 将容器的TCP 22端口映射以删除当前的容器。php php-devel -y”等行,可到宿主机的TCP 2201端口。执行“vi Dockerfile”以安装Apache,MySQL模块。这样,其他主机通过访问宿命令,创建一个Dockerfile添加“EXPOSE 22”命主机的TCP 2201端口,就可文件。在其中添加“FROM 令,来开放TCP 22端口。添以连接该容器。之后执行centos:v1”一行,表示以加“EXPOSE 80”一行,来开“docker ps -a”命令,可以“centos:v1”这个镜像文件放80端口。添加“CMD [\"/看到其中的TCP 20端口已基础进行编辑,来创建新的usr/sbin/sshd\" \"-D\"]”一经处于打开状态,还可以查镜像。行,表示在启动容器时,以后看其ID,启动命令,创建时间添加“MAINTAINER 台方式启动ssh服务,这相等内容。执行“docker User01”一行,表示开发者当于自启动命令。inspect xxxxxxxxxxxx 名称。添加“yum install 注意:在一个Dockerfile|grep \"IPA\"”命令,可以查passwd openssl openssh-文件中可以使用多个“RUN”命看对应容器的的IP信息。server -y”一行,表示安令行,但是只能使用一个“CMD”因为该容器的SSH服务已经装“passwd”,“openssl”,命令行。打开,因此执行“ssh –l “openssh-server”等模块,创建好Dockerfile文root xxx.xxx.xxx.xxx”,连如果容器中已经存在这些模件后,执行“dicker build 接该容器,输入密码(即上述块,可以在最前面添加“#”–t centos-new.”命令,可Dockerfile中的预设密码符号,将本行注释掉。添以在当前目录下生成一个“qwe123”),就可以利用SSH加“RUN echo 'qwe123'| 名为“centos-new”的新的通道连接到该容器中。Nwww.365master.com 2019.0181

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务