《虚拟化与云计算技术应用实践项目化教程》 课件 项目7 Docker技术_第1页
《虚拟化与云计算技术应用实践项目化教程》 课件 项目7 Docker技术_第2页
《虚拟化与云计算技术应用实践项目化教程》 课件 项目7 Docker技术_第3页
《虚拟化与云计算技术应用实践项目化教程》 课件 项目7 Docker技术_第4页
《虚拟化与云计算技术应用实践项目化教程》 课件 项目7 Docker技术_第5页
已阅读5页,还剩23页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

虚拟化与云计算应用实践

项目化教程

项目7Docker技术

学习目标知识目标了解Docker技术的基本原理;了解Dockerfile的语法规则及通过Dockerfile制作镜像的方法;了解镜像的发布。技能目标掌握Docker的安装部署;掌握Docker基本命令的使用;掌握Dockerfile的编写;掌握镜像的发布。通过本课程的学习你将可以项目引导虚拟网络配置和管理Docker是一个开源的应用容器引擎,用于开发、发布和运行应用程序的开放平台。Docker让开发者可以打包他们的应用以及依赖包到一个可移植的容器中。然后测试通过的容器可以批量地发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化。通过Docker,可以像管理应用程序一样管理基础架构。Docker为开发者提供了快速发布、测试和部署代码的方法。本项目主要完成Docker部署及构建、发布镜像。Docker架构知识准备任务实施14Docker安装部署Docker命令行操作123Docker数据管理Dockerfile构建web镜像23Docker数据管理Dockerfile5Docker镜像发布1Docker架构Docker最初是基于dotCloud公司多年云服务技术的一次革新,于2013年3月以Apache2.0授权协议开源。Docker使用Go语言进行开发实现,从1.11开始,进一步演进为使用runC和containerd。Docker使用客户端-服务器架构。架构图如图7-1所示。图7-1Docker架构图1Docker架构1.Docker客户端(Client)2.Docker守护进程(Dockerdaemon)3.Container容器4.Image镜像5.镜像仓库(Registry)1Docker架构Docker命令功能systemctlstartdocker启动Docker服务systemctlstopdocker停止Docker服务systemctlenabledocker开机启动Dockersystemctldisabledocker禁用开机启动Dockerdockersearch镜像名称搜索指定名称的镜像dockerimages查看本地镜像列表dockerpull镜像名称下载指定名称的镜像dockerrmi镜像名称删除本地指定名称的镜像dockerbuild-t镜像名称context使用Dockerfile构建镜像context:构建的上下文dockerrun镜像名称通过镜像启动一个容器dockerrun-d镜像名称以后台运行的方式通过镜像启动一个容器docker--nametest镜像名称启动容器,并将容器命名为testdockerrun-i-t镜像名称/bin/bash通过镜像启动一个容器,然后以命令行模式进入该容器-i:交互式操作-t:终端/bin/bash:放在镜像名后的是命令,如/bin/bash,/bin/sh等dockerps-a查看所有容器状态dockerstop<容器ID>停止容器dockerrm<容器ID>删除容器,删除容器需要先停止容器dockerexec-it<容器ID>/bin/bash连接容器,以命令行模式进入容器表7-1Docker基本命令2Docker数据管理1.数据卷(Volumes):数据卷存储在宿主机的某个目录下(一般为/var/lib/docker/volumes/),由Docker进行管理。2.挂载主机目录(Bindmounts):当使用挂载主机目录时,宿主机上的文件或目录会挂载到容器中,文件或目录为宿主机上该目录的绝对路径。3DockerfileDockerfile是一个基于文本的指令脚本,用于创建容器映像。Docker通过读取Dockerfile中的指令自动构建镜像。Dockerfile常用指令有FROM、COPY、ADD、CMD、RUN、WORKDIR、ENV等。项目实施任务7-1Docker安装部署任务7-2Docker命令行操作任务7-3Docker数据管理任务7-4Dockerfile构建web镜像任务7-5Docker镜像发布需要完成的任务:项目实施包括5个具体任务。本项目包括Docker安装部署、

Docker命令行操作、

Docker数据管理、

Dockerfile构建web镜像、

Docker镜像发布。

Project任务实施1Docker安装部署本任务使用RHEL8进行Docker的安装和配置1,使用RHEL8本地镜像配置BaseOS和AppStream存储库(1)挂载镜像到本地操作系统。[root@RHEL8~]#mkdir/mnt/iso[root@RHEL8~]#mount-oro/dev/sr0/mnt/iso[root@RHEL8~]#ls/mnt/iso/BaseOS///列出如下内容说明仓库已准备好Packagesrepodata[root@RHEL8~]#ls/mnt//iso/AppStream///列出如下内容说明仓库已准备好Packagesrepodata(2)修改配置文件指定本地存储库。[root@RHEL8~]#cd/etc/yum.repos.d[root@RHEL8yum.repos.d]#vimlocal.repo[BaseOS]name=BaseOSbaseurl=file:///mnt/iso/BaseOSenabled=1gpgcheck=0[AppStream]name=AppStreambaseurl=file:///mnt/iso/AppStreamenabled=1gpgcheck=0任务实施1Docker安装部署2.配置docker-ceyum源仓库Docker的安装需要从docker-ceyum源仓库进行软件包的下载,这里采用阿里云的源仓库镜像地址。[root@rhel8~]#yumconfig-manager--add-repo\/docker-ce/linux/centos/docker-ce.repoUpdatingSubscriptionManagementrepositories.UnabletoreadconsumeridentityThissystemisnotregisteredtoRedHatSubscriptionManagement.Youcanusesubscription-managertoregister.添加仓库自:/docker-ce/linux/centos/docker-ce.repo3.生成yum缓存配置好两个仓库后,生成新的缓存。[root@rhel8~]#yummakecacheUpdatingSubscriptionManagementrepositories.UnabletoreadconsumeridentityThissystemisnotregisteredtoRedHatSubscriptionManagement.Youcanusesubscription-managertoregister.DockerCEStable-x86_6431kB/s|3.5kB00:00AppStream3.1MB/s|3.2kB00:00BaseOS2.7MB/s|2.7kB00:00元数据缓存已建立。如果未出现以上仓库列表,说明仓库并未配置成功,请检查yum源仓库的配置。任务实施1Docker安装部署4.清除旧的docker相关包和podman包自RHEL8起,RedHat用CRI-O/Podman取代了DockerDaemon,Podman是一种开源的Linux原生工具,根据开放容器倡议(OpenContainerInitiative,OCI)标准开发、管理和运行容器和Pod,是RHEL8和CentOS8默认的容器引擎。为更好的完成Docker任务,避免软件冲突,需要先卸载Podman。[root@rhel8~]#yumremovedocker\docker-client\docker-client-latest\docker-common\docker-latest\docker-latest-logrotate\docker-logrotate\docker-engine\podman\runc5.安装docker[root@rhel8~]#yuminstalldocker-cedocker-ce-clicontainerd.io--nobest6.启动Docker[root@rhel8~]#systemctlstartdocker[root@rhel8~]#systemctlstatusdocker●docker.service-DockerApplicationContainerEngineLoaded:loaded(/usr/lib/systemd/system/docker.service;disabled;vendorpreset:disabled)Active:active(running)sinceSun2022-05-2222:31:02EDT;9sagoDocs:MainPID:56842(dockerd)Tasks:8Memory:125.6MCGroup:/system.slice/docker.service└─56842/usr/bin/dockerd-Hfd://--containerd=/run/containerd/containerd.sock任务实施2Docker命令行操作在本任务中,通过运行几个容器来掌握Docker命令行的操作。1.运行hello-world镜像(1)搜索hello-world镜像。[root@rhel8~]#dockersearchhelloNAMEDESCRIPTIONSTARSOFFICIALAUTOMATEDhello-worldHelloWorld!(anexample…1725[OK]hello-seattleHellofromDockerCon2016(Seattle)!10[OK]ibmcom/helloworldAsampleusedbyIBMCloudCodeEngine2(2)下载hello-world镜像。[root@rhel8~]#dockerpullhello-world(3)查看下载到的镜像。[root@rhel8~]#dockerimages(4)运行hello-world。[root@rhel8~]#dockerrunhello-worldHellofromDocker!Thismessageshowsthatyourinstallationappearstobeworkingcorrectly.……启动docker容器时可能会遇到以下报错。[root@rhel8~]#dockerrunhello-worlddocker:Errorresponsefromdaemon:OCIruntimecreatefailed:unabletoretrieveOCIruntimeerror(open/run/containerd/io.containerd.runtime.v1.linux/moby/e4563631d7ed2be8d2e4b0520132b825543fe52deb1ebf18e9dd71747f9ca7eb/log.json:nosuchfileordirectory):runcdidnotterminatesuccessfully:exitstatus127:unknown.出现Error是因为缺少依赖包,可通过安装libseccomp-devel安装包解决。由于RHEL8的本地光盘镜像中不存在libseccomp-devel安装包,在这里配置了华为云开源yum源仓库后再安装libseccomp-devel。[root@rhel8~]#curl-o/etc/yum.repos.d/CentOS-Base.repo\/repository/conf/CentOS-8-reg.repo[root@rhel8~]#yuminstalllibseccomp-devel(5)查看docker中所有容器。[root@rhel8~]#dockerps-aCONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMESf407938a49a3hello-world"/hello"2minutesagoExited(0)2minutesagocharming_mclean任务实施2Docker命令行操作2.运行2048应用2048是一个流行的益智游戏,目的是通过组合匹配的滑块到数字2048。本任务通过运行2048应用,熟悉容器使用。(1)下载2048游戏镜像。[root@rhel8~]#dockerpullalexwhen/docker-2048(2)后台运行2048游戏镜像。[root@rhel8~]#dockerrun-d-p80:80alexwhen/docker-2048其中-p80:80表示映射容器服务的80端口到宿主机的80端口,外部主机可以直接通过宿主机ip:80访问到该服务。冒号前为宿主机的端口,冒号后为运行的容器的端口。如果遇到提示80端口已在使用,可切换其他未使用的端口,如切换绑定端口为81。[root@rhel8~]#dockerrun-d-p81:80alexwhen/docker-2048(3)测试及验证容器功能。打开浏览器,访问http://localhost:81。2048应用测试结果图如图7-3所示。图7-32048应用测试结果图任务实施2Docker命令行操作(4)进入容器。在使用-d参数运行容器时,容器会进入后台启动。如果想要进入容器,可以通过dockerexec命令。先通过dockerps查看要进入的容器的ID。[root@rhel8~]#dockerpsCONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES9fe02f240cdealexwhen/docker-2048"nginx-g'daemonof…"2weeksagoUp2weeks:81->80/tcp,:::81->80/tcpzealous_pasteur使用dockerexec进入对应的容器,并在容器中查看nginx的日志文件,查看完成后,退出容器。[root@rhel8~]#dockerexec-it9fe02f240cde/bin/sh/#/#tail-3/var/log/nginx/access.log……Gecko/20100101Firefox/60.0"/#exit[root@rhel8~]#(5)停止容器。使用dockerstop可停止指定的容器。[root@rhel8~]#dockerpsCONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES9fe02f240cdealexwhen/docker-2048"nginx-g'daemonof…"2weeksagoUp2weeks:81->80/tcp,:::81->80/tcpzealous_pasteur[root@rhel8~]#dockerstop9fe02f240cde(6)删除容器。[root@rhel8~]#dockerps-aCONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES9fe02f240cdealexwhen/docker-2048"nginx-g'daemonof…"2weeksagoExited(0)2minutesagozealous_pasteurf407938a49a3hello-world"/hello"2weeksagoExited(0)2weeksagocharming_mclean使用dockerps-a可查看到当前所有的容器,使用dockerrm可删除指定CONTAINERID的已停止运行容器。[root@rhel8~]#dockerrmf407938a49a3[root@rhel8~]#dockerrm9fe02f240cde任务实施2Docker命令行操作(7)删除镜像。[root@rhel8~]#dockerimagesREPOSITORYTAGIMAGEIDCREATEDSIZEhello-worldlatestfeb5d9fea6a58monthsago13.3kBalexwhen/docker-2048latest7929bcd70e476yearsago8.02MB[root@rhel8~]#dockerrmihello-world[root@rhel8~]#dockerrmialexwhen/docker-2048[root@rhel8~]#dockerimagesREPOSITORYTAGIMAGEIDCREATEDSIZE任务实施2Docker命令行操作3

运行MySQL应用使用Docker容器运行MySQL应用是一种广泛使用的机制。事实上,MySQL是与Docker容器一起使用的最流行的数据库之一。使用Docker在容器中运行数据库,就像它是远程服务器一样,可以测试应用程序如何与其交互。(1)下载MySQL镜像。[root@rhel8~]#dockerpullmysql(2)后台运行MySQL镜像。[root@rhel8~]#dockerrun-itd--namemysql-test-p3306:3306-e\MYSQL_ROOT_PASSWORD=123456mysql(3)查看容器状态。[root@rhel8~]#dockerps-aCONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES409ebe5ea38fmysql"docker-entrypoint.s…"2hoursagoUp2hours:3306-3306/tcp,:::3306->3306/tcp,33060/tcpmysql-test(4)进入MySQL容器,并访问MySQL。[root@rhel8~]#dockerexec-itmysql-test/bin/bashroot@409ebe5ea38f:/#mysql-hlocalhost-uroot-pEnterpassword:WelcometotheMySQLmonitor.Commandsendwith;or\g.YourMySQLconnectionidis11Serverversion:8.0.29MySQLCommunityServer-GPL......mysql>showdatabases;+--------------------+|Database|+--------------------+|information_schema||mysql||performance_schema||sys||test|+--------------------+5rowsinset(0.74sec)mysql>任务实施3Docker数据管理本任务通过数据卷和数据卷容器两种方式实现Docker容器中数据管理。1.在容器内创建一个数据卷(1)创建一个数据卷。[root@rhel8~]#dockervolumecreateweb-volweb-vol(2)查看所有数据卷。[root@rhel8~]#dockervolumelsDRIVERVOLUMENAMElocalweb-vol(3)查看指定数据卷信息。[root@rhel8~]#dockervolumeinspectweb-vol数据卷在宿主机的位置通过mountpoint参数可以得到。[root@rhel8~]#dockerrun-d–name=web-vol-p85:80\--mountsource=web-vol,target=/usr/share/nginx/htmlnginx:alpineUnabletofindimage'nginx:alpine'locallyalpine:Pullingfromlibrary/nginxdf9b9388f04a:Alreadyexistsa285f0f83eed:Pullcomplete[root@rhel8~]#dockerpsCONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES6f191ddd324anginx:alpine"/docker-entrypoint.…"12secondsagoUp10seconds:85->80/tcp,:::85->80/tcpweb-vol任务实施3Docker数据管理(5)查看容器挂载的数据卷。[root@rhel8~]#dockerinspect6f191ddd324a[{…"Mounts":[{"Type":"volume","Source":"web-vol","Target":"/usr/share/nginx/html"}],…}]数据卷在Mounts参数中。(6)查看数据卷的内容。[root@rhel8~]#ll/var/lib/docker/volumes/web-vol/_data总用量8-rw-r--r--.1rootroot4971月2510:2650x.html-rw-r--r--.1rootroot6151月2510:26index.html该数据卷的内容不会随着容器的停止或删除而自动被删除。任务实施3Docker数据管理2.挂载主机目录作为数据卷在Linux中,MySQL默认的数据文档存储目录为/var/lib/mysql。为了防止MySQL镜像或容器删除后,MySQL数据丢失,我们可以将容器内的/var/lib/mysql的数据绑定在宿主机目录/home/mysql/data。即使用-v方式挂载宿主机/home/mysql/data目录到容器的/var/lib/mysql目录。使用-v挂载时,冒号":"前面的目录是宿主机目录,后面的目录是容器内目录。[root@rhel8~]#dockerrun-itd--namemysql-vol\-v/home/mysql/data:/var/lib/mysql\-p3307:3306\-eMYSQL_ROOT_PASSWORD=123456mysql这样MySQL的数据文档可以在/home/mysql/data中找到并存储起来。使用-v参数时如果本地目录不存在,Docker会自动创建本地目录。查看/home/mysql/data中的文件。[root@rhel8~]#ll/home/mysql/data/总用量198056-rw-r-----.1systemd-coredumpinput13825月2703:37a7b60a3ea9b8.err-rw-r-----.1systemd-coredumpinput565月2703:36f-rw-r-----.1systemd-coredumpinput31169225月2703:37binlog.000001…查看容器使用的数据卷,数据卷在Mounts参数中。[root@rhel8~]#dockerinspectmysql-vol[{

...

"Mounts":[{"Type":"bind","Source":"/home/mysql/data","Destination":"/var/lib/mysql","Mode":"","RW":true,"Propagation":"rprivate"}],...}]任务实施4Dockerfile构建web镜像1.准备静态网页资源编写一个简单的html页面,页面显示hello,docker。[root@rhel8~]#mkdir/webdata[root@rhel8~]#cd/webdata[root@rhel8webdata]#vimindex.html<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>dockerweb</title></head><body><h1>hello,docker</h1></body></html>2.配置Dockerfile文件在/webdata/下新建Dockerfile文件。[root@rhel8webdata]#vimDockerfileFROMnginxCOPY./index.html/usr/share/nginx/html/其中FROM指令告诉Docker使用哪个镜像作为基础,这里以nginx镜像作为基础;COPY指令是用于指定把哪些文件复制到/usr/share/nginx/html/,在nginx镜像中配置的前端资源访问路径为/usr/share/nginx/html/,所以将我们的前端资源文件复制到该路径即可。3.使用dockerbuild命令来生成镜像[root@rhel8webdata]#dockerbuild-twebapp:v1.SendingbuildcontexttoDockerdaemon3.072kBStep1/2:FROMnginxlatest:Pullingfromlibrary/nginx214ca5fb9032:Pullcomplete任务实施4Dockerfile构建web镜像4.查看生成的镜像[root@rhel8webdata]#dockerimagesREPOSITORYTAGIMAGEIDCREATEDSIZEwebappv1f4d0975f50c440secondsago142MB5.运行生成的镜像[root@rhel8webdata]#dockerrun-d-p82:80webapp:v16.查看docker运行情况[root@rhel8webdata]#dockerpsCONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMESaa58f3a306dbwebapp:v1"/docker-entrypoint.…"AboutaminuteagoUpAboutaminute:82->80/tcpbusy_bose7.验证,网页访问http://localhost:82。Web应用测试结果如图7-4所示。图7-4Web应用测试结果图任务实施5Docker镜像发布本任务将构建好的一个webapp上传到dockerhub上。1.注册dockerhub账号要上传到Dockerhub,需要先在Dockerhub上注册一个账号,所示。2.在Dockerhub上新建仓库在注册账号后登录Dockerhub,如图7-6所示。创建一个名为webapp的仓库,用来上传镜像,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论