当前位置: 首页 > Linux

企业级微服务实战(三)

时间:2023-04-07 01:09:57 Linux

Docker实战一、关于Docker镜像、容器、存储驱动官方文档1.1ImageandLayers而运行容器,即DockerContainer,必须基于镜像,即Docker镜像,当我们使用dockerpull拉取镜像时,经常会出现如下信息:Pullcompleteb0bbed1a78ca:PullcompleteDigest:sha256:77ebc94e0cec30b20f9056bac1066b09fbdc049401b71850922c63fc0cc1762eStatus:Downloadednewerimagefornginx:latest其中8d691f585fa8:Pullcomplete、047cb16c0ff6:Pullcomplete、b0bbed1a78ca:Pullcomplete是什么意思呢?ThisisthelayeredstructureoftheDockerimage,asshownin下图:那么使用分层技术有什么好处呢?最直观的是分层技术支持并发上传和下载。我们可以快速下载一个大的图片文件;还有一个很重要的原因是,如果我们要对图片进行修改,相当于在原图片的基础上又增加了一个图片文件。“一层”,我们不需要全部推送到仓库,只需要推送新添加的“那一层”数据即可。1.2容器和层(ContainerandLayers)镜像是容器启动的基础,但是一个镜像可以启动不同的容器,如下图所示:只有容器层是可读写的,镜像层是只读的,而容器运行时产生的所有数据都保存在容器中,一旦容器关闭,所有数据都会丢失。那么如果要保存这些数据怎么办呢?一种是将数据内容以镜像的方式存储在容器中,另一种是通过持久化存储来完成数据存储。后面会介绍这两种方法用来解决的问题。1.3Docker存储驱动(StorageDrivers)目前docker版本默认的存储驱动是overlay2,这也是docker官方推荐的驱动方式。不同Linux发行版请参考:官方文档Simple,efficient,andstableunionfilesystem,用于CentOS/RHEL系统,需保证系统内核不低于3.10.0-514,即“RHEL或使用3.10.0-514及以上版本的CentOS。”2.常见的Docker命令Docker命令有很多。可以参考官方文档,里面对每个用法都有很详细的介绍和例子。这里只介绍一些生产中经常用到的。2.1dockerpull:获取镜像的具体用法dockerpull[OPTIONS]NAME[:TAG|@DIGEST]最基本的用法很简单,我们只需要指定镜像名称和tag信息或者Digest就是加密摘要,一般我们使用tag来指定不同“版本”的图片,当然使用加密摘要更安全,但是操作相对复杂。如果我们什么都不指定,默认会使用latest标签,latest标签一般都是默认生成的,会一直指向最新的镜像。比如:【不指定tag信息】[root@docker-server~]#dockerpullbusyboxUsingdefaulttag:latestlatest:Pullingfromlibrary/busyboxDigest:sha256:fe301db49df08c384001ed752dff6d52b4305a73a7f608f21528048e8a08b51eStatus:Downloadednewerimageforbusybox:latest【指定tag信息】[root@docker-server~]#dockerpullbusybox:1.31.01.31.0:Pullingfromlibrary/busybox7c9d20b9b6cd:AlreadyexistsDigest:sha256:200659419fb0fa86380fec1802e3b4e7e792c06b5affddc04eba435e64504a88Status:Downloadednewerimageforbusybox:1.31.0【指定加密摘要信息】[root@docker-server~]#dockerpullbusybox@sha256:bbb143159af9eabdf45511fd5aab4fd2475d4c0e7fd4a5e154b98e838488e510sha256:bbb143159af9eabdf45511fd5aab4fd2475d4c0e7fd4a5e154b98e838488e510:Pullingfromlibrary/busybox57c14dd66db0:PullcompleteDigest:sha256:bbb143159af9eabdf45511fd5aab4fd2475d4c0e7fd4a5e154b98e838488e510Status:Downloadednewerimageforbusybox@sha256:bbb143159af9eabdf45511fd5aab4fd2475d4c0e7fd4a5e154b98e838488e510注意:默认我们都是从官方也就就是从DockerHub下载镜像,那么如果是从其他第三方仓库下载镜像怎么指定呢?其实dockerpull的完整语法应该是:dockerpull[][:]/[/]:其中registry默认为DockerHub仓库https://index.docker.io/v1/,命名空间可能不好理解,可以理解为项目名或者账户名,这样可能更接地气;而name指的是应用名或者仓库名(在docker仓库中,一般我们习惯用一个仓库来存放一个应用,即Nginx仓库只用来存放Nginx应用镜像,镜像版本为根据不同的tag信息区分),比如我们有一个电商项目shop,里面有两个应用叫nginx和httpd,那么你的image名称可以通过这种方式指定shop/nginx和shop/httpd。如果添加标签信息,可以shop/nginx:v1.14.1。如果我们有自己的私有镜像仓库https://docker.byte-edu.com:5000,那么我们可以这样指定docker.byte-edu.com:5000/shop/nginx:v1.14.1。注意,在使用dockerpull或者dockerpush的时候,虽然使用了https协议,但是不要写https://,即上面的命令可以这样写:$dockerpulldocker.byte-edu.com:5000/shop/nginx:v1.14.1我们在阿里云账号上申请了一个私有镜像仓库,一个账号namespace下最多可以设置5个namespace,但是下面可以设置多少个仓库或者应用没有限制一个命名空间去这个仓库下载镜像?这个需要根据仓库的性质,即公共仓库还是私有仓库。如果是公共仓库,任何人都可以下载。如果是私有仓库,上传或下载前需要登录认证。使用dockerlogin登录,如下:2.2dockerlogin/logout:登录/注销注册表语法很简单,指定登录地址即可,如下:$dockerloginmyregistry:5000输入正确的用户名和密码即可,这里是一个需要大家注意的知识点。如果我们在写脚本的时候需要登录仓库,可以使用--password-stdin,例如:$cat~/my_password.txt|dockerloginmyregistry:5000--usernamefoo--password-stdin这样我们就可以将密码写入~/my_password.txt文件。注意:我们登录后,默认会将用户名和密码写入配置文件。文件路径为~/.docker/config.json,这样下次使用仓库时就不用再输入用户名和密码了。如果要退出,使用$dockerlogoutmyregistry:5000退出成功后,配置文件~/.docker/config.json中关于仓库的认证信息会被删除。2.3dockersearch:searchimage该命令一般用于搜索下载官方镜像,因为该命令不支持查看镜像标签信息,所以我们一般通过DockerHub搜索,找到指定的标签并下载。如下:[root@docker-server~]#dockersearchbusyboxNAMEDESCRIPTIONSTARSOFFICIALAUTOMATEDbusyboxBusybox基础镜像。1700[OK]progrium/busybox71[OK]radial/busyboxplus全链,启用互联网,busybox由...25[OK]]arm32v7/busyboxBusybox基础映像。7......2.4dockerimages:查看本地镜像注:dockerimages==dockerimagels/list用于查看本地镜像。其实dockerimages也支持很多参数,比如过滤filter,查看加密摘要--digests等,但是一般用得不多。比较常见的是显示所有图片,不加任何参数;二是指定镜像名称,只显示某个镜像列表,如下:[root@docker-server~]#dockerimagesREPOSITORYTAGIMAGEIDCREATEDSIZEnginxlatest5a9061639d0a47hoursago126MBbusybox1.31.019485c79a9bb6weeksagolatest1.22MBbusy19485c79a9bb6周前1.22MBregistry.cn-beijing.aliyuncs.com/byte-edu/mydockerv0.119485c79a9bb6周前1.22MBhello-worldlatestfce289e99eb99个月前1.84kBbusybox3a093384ac309个月前nths前也1.2MB[root@docker-server~]#dockerimagesbusyboxREPOSITORYTAGIMAGEIDCREATEDSIZEbusybox1.31.019485c79a9bb6周前1.22MBbusyboxlatest19485c79a9bb6周前1.22MBbusybox3a093384ac309个月前,1.2MB当可只显示带有某个标签的镜像[root@docker-server~]#dockerimagesbusybox:latestREPOSITORYTAGIMAGEIDCREATEDSIZEbusyboxlatest19485c79a9bb6周前1.22MB2.5dockerrmi:deleteimage这个命令很简单,直接指定镜像name或mirrorID都可以删除,一次可以删除多个镜像。但是需要注意的是,如果有基于镜像运行的容器,默认是不能删除的。2.6dockerrun/create:启动/创建镜像这个命令需要介绍很多知识点,下面就用一篇文章来介绍一下。注:更多技术博客,请关注字节教育官网。如果您在学习或自己实验的过程中遇到问题,请及时与作者沟通。[QQ群374106486]