Podman和Docker的安装、部署和设置.docx
11.inux容器介绍clljjn<.lno。1.inux容器是与系统其他部分隰离开的一系列进程。运行这些进程所需的所有文件都由另一个镜像提供,这意味着从开发到测试再到生产的整个过程中,1.inux容器都具有可移植性和一致性。因而,相对于依赖里宣传统测试环境的开发柒道,容器的运行速度要快得多.容器比较普遍也易于使用,因此也成了IT安全方面的重要组成部分.APP/SERVICESSUPPORTINGFI1.ES/RUNTIMEHOSTOPERATINGSYSTEM容器可以确保您的应用拥有必需的库、依籁项和文件,让您可以在生产中自如地迁移这些应用,无需担心会出现任何负面影响.实际上,您可以将容器镜像中的内容,视为1.inux发行版的一个安装实例,因为其中完整包含RPM软件包、配臂文件等内容.容器从出现开始,迅速成为现代数据中心的必要组成部分.目前流行的容器引擎包括DoCker以及下一代符合OPenContainerInitiative(OCI)标准的容器。Docker是一个开源的应用容器引孥,属于1.inux容器的一种封装,Docker提供简单的容器使用接口,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到1.inux机器上,但DoCker也有两个主要缺点:Docker需要在你的系统上运行一个守沪进程;Docker是以root身份在你的系统上运行该守护程序。这些缺点的存在可能有一定的安全隐患,为了解决这些问题,下一代容器化工具Podman出现了.卷podmanPodman是一个开源的容器管理工具,其可在大多数UnUX平台上使用.它是一种无守护程序的容器引擎,用于在1.inux系统上开发,管理和运行任何符合OPenContainerInitiative(OCI)标准的容器和容器镜像,提供了一个与Docker兼容的命令行前端.Podman控制下的容器既可以由root用户运行,也可以由非特权用户运行.使用Podman.Skopeo和Buildah的新一代容器架构工具后,可以解决由于docker守护程序导致的启动和安全问题.2Podman和docker主要不同之处docker翕要在我们的系统上运行一个守护进程(dockerdaemon),而podman不需要.启动容器的方式不同:d。CkerCli命令通过APl跟D。CkerEngine(引擎)交互告诉它我想创建一ZTwcontainer,然后dockerEngine才会调用OQcontainerruntime(runc)来启动一个container.这代表container的process(进程)不会是DockerC1.I的childProCeSS(子进程)而是DockerEngine的childprocess.Podman是直接给OQContainnerruntime(runc)进行交互来创建container的,所以containerprocess直接是podman的childprocess.d。Cker需要使用root用户来创建容器,但是POdman不需要。3Podman部署和常见操作Podman的安装部署非常简便,参考如下:1. Arch1.inux&Manjaro1.inuxsudopacman-Spodman2. Fedora,Centos,RHE1.sudoyum-yinstallpodman3. Gentoosudoemergeapp-emulation/libpod4. MacOSbrewcaskinstallpodman基本常用命令:podmaninfopodmanversionpodmanimagespodmanrmipodmanpsPodmanC1.I里面很多指令都和DockerC1.I相同,官方给出了这么个例子aliasdocker=podman所以说经常使用DOCkerC1.I的人使用Podman上手非常快.运行一个容器podmanOJnYt-P8080namengi11xTdatadata-eNGINXeVERSION=I.1611girc1.16.0列出当前所有的容器#POdmanPS-aCONTAINER©MkGeCOMuANDSEATEDSTATUSPORTSNWES19tl06d5dc¼doctortob11wygtnx:1.160ngjnxgCtoemcnq.2mrmeo090Up211*mtagoO.O.O,OO->8O!cpng11x查看一个镜像信息*podmainspectngiIgrep-I"Ipaddress”"SCondaryPAddrsss":null.-IPAddress":"10.88.0.110-,查看容器运行的日志podmantogsginx查看运行中容器资源使用情况<podntopngnxUSERRDPPOCPUE1.APSH)TTYT)MECOMMANDroot100.0005m2642C9043spts/OOsngnxmasterprocessng>nx-gdaemonoff.ngm610000m26421086502spts/OOsBrBWOrtgrPrOossttpodmanstatsngnxIDNAMECPU%MEMUSAGE/1.MTMEM%NET0B1.OCKIOPOS19f105d5dc1engin2.036MB/193GB0.11%978810.55k8/24DOCker部署4.1 部署准备工作DockerCERPttE)®(CommunityEdition),免费使用.这里以CentOS为例来介绍D。Cker的部署流程.在部署前,需要具备以下环境:CentOS7及以上版本的操作系统1.inux内核版本不低于3.10(CentOS7满足最低内核的要求)已启用centos-extras仓库(默认情况此仓库是启用的,使用yumrepolist可以直看是否存在.如未启用,可安装yum-utils后执行yum-config-managerenableextras进行启用)若安装了旧版本D。Cker相关内容,需进行卸载,旧版本的D。Cker称为docker或者docker-engine,卸载命令如下:(若未做说明,后续命令均以root用户执行)yumromovodockerdockerVientdockerYlientWestdocker-commondockef-tetes!docke-at6t-logrotacdocker-togrotatdocRer-nne若服务器能够连接到互联网,可参考在线部署步骤进行Docker安装,如无法连接到互联网,可参考离线部署步既进行Docker安装.4.2 在线部署步班安装必要的软件包先安装如下的软件包:yum-utils,方便后续配置yum仓库yminstall-yyum-utils配置docker-ce和定仓库vum-co11f)g-manager-add-repohtu»/downto«ldockfif«com/inux/oentos/docker-8.repo注意,docker-ce.repo中也包含了nightly及test仓库,默认没有启用,可以使用sudoyum-con-fig-managerenabledocker-ce-nightly进行启用,一般无需启用.安装最新版本的docker-ceyuminstalldocker-cedker-ce-clicontainerd.io-y该命令默认安装了最新版本的docker-ce,安装过程中如需校验GPGkey,输入"y确认即可。执行完成后,Docker已经成功安装,但是还未启动,建议先不要启动,完成后续"部罟完成后相关设省”后再启动Docker.安装指定版本的docker-ce首先使用如下命令查看docker-ce.repo中有哪些docker-ce版本.yumUstdocker-ce-ShowdupfccatesIsortT第二列的部分字符串(冒号之后连接号之前)是版本号例如可以使用如下命令安装指定版本:安W18.09.1版本:yuminstalldocker-ce-1809.1docker-ce-di-1809.1Containerdio-y安装18.06.3版本:yuminstalldocker-co-18063.ce-y该命令会安装指定版本的docker-Ce,安装中如需校验GPGkey,输入,y”确认即可.执行完成后,Docker已经成功安装,但是还未启动,建议先不要启动,完成后续"部署完成后相关设置"后再启动Docker.4.3 离线部署步螺执行完成后,Docker已经成功安装,但是还未启动,建议先不要启动,完成后续"部罟完成后相关设置”后再启动Docker.官方步骤及存在的坑安装18.09.1版本:官方给的文档说明是,到Docker官网下载指定版本的rpm包https:这种方式会存在一个问题,在完全离线的环境中,直接安装docker官网下载的rpm包会缺少很多依赖,这些依赖需要手动去下载相应的rpm包进行升级或者安装,非常麻烦.因此这里推荐以下方法迸行黑线安装.下载所有的rpm包到本地(1)在可以上网的环境(例如个人电脑),安装一台与离线环境机器相同操作系统的虚拟机,确保该虚拟机能够访问互联网,在安装虚拟机操作系统时最好选择最小化安装.假设操作系统为CentOSe(2)安装完毕后,配2三机器的yum源(建议配置阿里云的镜像),先备份etcyum.repos.d.Eicyumf(d/e<c/yunrepc».dbafc&&mkdr-Petcyumrep05Xl(3)然后配首CentOS-Base.repo及docker-ce.repowgo<-o(cmre“Ce11tOS-B.rpohttpmrrorsalu.co11reoCet-7epowg<-Oe<cymrepos<Vdocker-crepohttpmirrof3iuacorndockaliruoetoxier-cerepo(也可集成日网51.:httpsCkwMowldockoroomli11uxoontodocfccr-cerepo)ymdeanall&&yunmkecacefast(4)下载docker-ce相关的rpm包.r¼lr-ptmprpm.downioadVUrninstall-dowrtowlo(-downtooddir三tf11prpm.dwk>ddocker-cedockr-ce-ciContanerdlo创建repo仓库在以上能联网的虚机上安装Createrepo创建仓库.yuminstall-yCreaterepoCreateroPotmprpm-dwcfoad此时会在/tmp/rpm_dOWnlOad下生成repodata仓库数据文件夹.在离线环境进行安装拷贝以上文件到阁线环境的机器上,配置本地yum源进行安装。将以上文件夹拷贝到离线环境的机器上,假设目录也为/tmp/rpm_d。WnIoad配置海线环境机器的本地yum源。netcym.reosdetcyreps.dbak&&rMt-petcmreos-dcat«EOF>etcyunreps.ddockerrepodocker】namerdocicerbaser1三t11pDm.dovitodgpgcck=Oenabied«lEOFyvmdeanall&&YlJnmekecachefastVvminstall-ydockerydocker-oe-cf100ntainerd.io至此,完成了离线环境下d。Cker的安装.4.4 部署完成后相关设置配亘非root用户使用Docker命令Dockerdaemon默认监听一个Unix套接字(varrundOCker.soCk),这个Unix芸接字默认属于用户root其他用户如果要使用docker命令行与daemon通信.则必须使用sudo.非root用户每次都使用sudo比较麻烦,可以创建一个名为"docker”的组(安装完docker后默认就有),然后把非root用户加入到docker组里面,就可以直接访问DOCkerdaemon了。USerniod-aGdockerSUSER注意,如果已经使用了SUdo,然后再把该用户加入到docker组,可能会因为目录权限的问题导致报错,使用以下命令修且即可.ch*n,SUSERSSER/home/"SUSERdodw-Rchmodg*rwx-SHOME.dockr"-R配置D。Cker开机自启动CentOS7中使用Systemd管理服务,执行以下命令即可。Systemctlenabledocker«取消开机自U的SySJomctl<Ssabedodr配置默认的日志驱动Dockerdaemon的默认日志驱动是json-file,可以把docker容器的标注输出、标准错误输出到json文件中,也可以支持其他日志驱动,例如local,journald,通过在etcdockerdaemon.json中配首。togSer:3Vg,tog-cots-:,max-si»e:MOm*.rmx-ftto-:3J也可以在创建容器时,指定容器使用的日志驱动,例如:docketrun-IOgdivGrjson-te-log-optmax-size=IOmalpireechoh<loworld配置Dockerdaemon监听TCP端口默认情况下,Dockerdaemon监听一个本地的Unixsocket,接收来自本地docker客户端的请求。如果要从远程访问,比如docker-comose,docker-swarm之类的工具需要与DOCkerdaemon通信,可以让DOCkerdaemon监听一个本地的tcp端口.CentOS系统下,修改文件usrlibsystemdSyStemdocker.service,修改如下内容:ERCStarWusrTbnZdoOerd-HwWwrfndockersock-HtcOCQOc2375然后亚启docker.9vncvdMvcn*M&A9yswnctflffa11OOobef使用netstat-tnlpgrep2375可以看到dockerd进程监听了2375端口.配置镣像下栽加速默认情况下Docker会从国外的镜像仓库pull/像,可以使用国内的仓库潢像服务器以加快pullimage的速度,同时增加下载的并发数.CentoS系统下,修改docker配置文件etcdockerdaemon.json.("registry-mirrors-:Tttpsdker.11wofs.ustc.edu.c","hnphut>-rnl,l"max-concurrent-downloads”:10)然后重启docker.Systemctldaemon-reload&&systemctlrestartdocker配置Docker的默认网桥Docker服务启动后默认会创建一个dockerO网桥,它使用的默认网段是172.xx.xx.xx,假设部署docker的机器也是用这个网段,则可能会有冲突,可以修改d。Cker默认的网段.CentOS系统下,修改docker配置文件etcdockerdaemon.json(-b>ri92ieaoo.24-然后重启docker,systemctldaemon-reload&&systemctlrestartdocker4.5 功能验证启动DoCkerSystemctlstartdocker查看docker状态信息Systemctlstatusdockerdkerinfo运行hello-world容器dockerrunhello-world首次运行会从远程镜像仓库下载hello-world袋像,并启动一个容器,当容器运行时会输出一段信息,然后自动退出,通过dockerps-a可以看.Dockerdaemon的日志systemd使用journalctl命令统一管理所有Unit的启动日志,使用以下命令可以直看Dockerdaemon日志。)oruc-qoc0,2GtCGDocker卸格#IDttDockeryumremovedocker-ce力制捡所有的道像、容昌.故娓卷等故据rm-rfvarltodocker5本章小结本文介绍了容器的部署过程和简单的容器操作,分别说明了Docker和下一代容器工具Podman的区别.目前,D。Cker容器引擎还被很妥的工程师广泛使用,但是由于其本身的局限性,未来符合OQ标准的Podman还是会逐渐成为社区主流,而被广大的开发人员、运维人员所接受.技术在不断发展,新的工具在涌现,我们可以根据相应的新的容器工具链,构建一个与Docker完全兼容,然而却更加轻最、灵活和安全的容器环境.