docker官网命令 地址Docker命令分类Docker环境信息docker〔infoversion〕容器生命周期管理docker〔createexecrunstartstoprestartkillrmpauseunpause〕容器操作管理docker〔psinspecttopattachwaitexportportrenamestat〕容器rootfs命令docker〔commitcpdiff〕镜像仓库docker〔loginpullpushsearch〕本地镜像管理docker〔buildimagesrmitagsaveimportload〕容器资源管理docker〔volumenetwork〕系统ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a信息docker〔eventshistorylogs〕 常用命令Docker安装阿里云开发者平台开发者平台官网地址:可以参考阿里云官网提供的docker安装教程进行安装。https:www。aliyun。com安装docker前置条件yuminstallyyumutilsdevicemapperpersistentdatalvm2添加源sudoyumconfigmanageraddrepohttp:mirrors。aliyun。comdockercelinuxcentosdockerce。repoyummakecachefast查看docker版本yumlistdockerceshowduplicatessortr安装最新版:推荐大家安装最新版本yumyinstalldockerce安装指定版本:语法规则:yuminstalldockerceVERSIONSTRINGdockercecliVERSIONSTRINGcontainerd。ioyumyinstalldockerce18。06。3。ce3。el7dockercecli。x8664yuminstallydockerce19。03。93。el7dockercecli19。03。93。el7docker降级操作,20。10降级到19。03版本yumdowngradesetoptobsoletes0ydockerce19。03。133。el7dockercecli19。03。133。el7containerd。io开启dock而服务systemctlstartdockersystemctlstatusdocker安装阿里云镜像加速器mkdirpetcdockerteeetcdockerdaemon。jsonEOF{registrymirrors:〔https:复制自己的加速器地址。mirror。aliyuncs。com〕}EOFsystemctldaemonreloadsystemctlrestartdocker镜像命令官网镜像地址https:hub。docker。com拉取镜像dockerpullcentos:7。8。2003常用参数a,alltagstruefalse:是否获取仓库中所有镜像,默认为否;disablecontenttrust:跳过镜像内容的校验,默认为true;images命令通过使用如下两个命令,列出本机已有的镜像:dockerimagesdockerimagels各个选项说明:REPOSITORY:表示镜像的仓库源TAG:镜像的标签IMAGEID:镜像IDCREATED:镜像创建时间SIZE:镜像大小save命令将镜像保存到虚拟机上,避免docker容器销毁后,再次下载镜像速度慢问题mkdirpdatacddatadockersavetomcat:9。0。20jre8alpineotomcat9。tardockersavetomcat:9。0。20jre8slimtomcat9。slim。tar常用参数o:输出到的文件多个镜像推荐开发岗的小伙伴使用idea开发工具中的列编辑模式制作dockersave命令mkdirpdatacddatadockersaveubuntu:20。04alpine:3。12。1debian:10。6slimcentos:7。8。2003olinux。tardockersavetomcat:9。0。20jre8alpinetomcat:9。0。20jre8slimtomcat:9。0。20jre8otomcat9。0。20。tar将tar包还原成镜像load命令mkdirpdatacddatadockerloadilinux。tardockerloadtomcat9。0。20。tar常用参数input,i:指定导入的文件。quiet,q:精简输出信息。inspect命令通过dockerinspect命令,我们可以获取镜像的详细信息,其中,包括创建者,各层的数字摘要等。dockerinspect返回的是JSON格式的信息,如果您想获取其中指定的一项内容,可以通过f来指定,如获取镜像大小dockerinspecttomcat:9。0。20jre8alpinedockerinspectf{{。Size}}tomcat:9。0。20jre8alpinetag命令标记本地镜像,将其归入某一仓库dockertagtomcat:9。0。20jre8alpinetesttomcat:9rmi删除镜像dockerrmitomcat:9。0。20jre8alpinedockerimagermtomcat:9。0。20jre8alpine常用参数f,force:强制删除镜像,即便有容器引用该镜像;noprune:不要删除未带标签的父镜像;通过ID删除镜像dockerrmiee7cbd482336容器命令新建并启动容器语法dockerrun〔OPTIONS〕IMAGE〔COMMAND〕〔ARG。。。〕dockerrunitrmp8080:8080tomcat:9。0。20jre8alpinedockerrunitdnametomcat9p8080:8080tomcat:9。0。20jre8alpine常用参数dockerrun命令常用参数比较多,这里仅仅列出开发岗常用参数,请自行查找资料获得更多参数信息d,detachfalse:后台运行容器,并返回容器IDi,interactivefalse:以交互模式运行容器,通常与t同时使用P,publishallfalse:随机端口映射,容器内部端口随机映射到主机的端口。不推荐各位小伙伴使用该参数p,publish〔〕:指定端口映射,格式为:主机(宿主)端口:容器端口,推荐各位小伙伴们使用t,ttyfalse:为容器重新分配一个伪输入终端,通常与i同时使用namenginxlb:为容器指定一个名称h,hostnamelaosiji:指定容器的hostnamee,env〔〕:设置环境变量,容器中可以使用该环境变量netbridge:指定容器的网络连接类型,支持bridgehostnonecontainer:四种类型link〔〕:添加链接到另一个容器;不推荐各位小伙伴使用该参数v,volume:绑定一个卷privilegedfalse:指定容器是否为特权容器,特权容器拥有所有的capabilitiesrestartno:指定容器停止后的重启策略no:容器退出时不重启onfailure:容器故障退出(返回值非零)时重启always:容器退出时总是重启,推荐各位小伙伴们使用rmfalse:指定容器停止后自动删除容器,不能以dockerrund启动的容器容器ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志alogs命令dockerlogsftomcat9常用参数f:跟踪ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a输出tail:仅列出最新N条容器ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a列出容器语法dockerps〔OPTIONS〕dockerrunitdnametomcat9p8080:8080tomcat:9。0。20jre8alpine查看运行中的容器dockerpstomcat9查看所有容器dockerpsatomcat9输出详情介绍:CONTAINERID:容器ID。IMAGE:使用的镜像。COMMAND:启动容器时运行的命令。CREATED:容器的创建时间。STATUS:容器状态。状态有7种:created(已创建)restarting(重启中)running(运行中)removing(迁移中)paused(暂停)exited(停止)dead(死亡)PORTS:容器的端口信息和使用的连接类型(tcpudp)。NAMES:自动分配的容器名称。常用参数a:显示所有的容器,包括未运行的。q:只显示容器编号。删除容器dockerrm:删除一个或多个容器。dockerrm命令只能删除处于终止或退出状态的容器,并不能删除还处于运行状态的容器语法dockerrm〔OPTIONS〕CONTAINER〔CONTAINER。。。〕dockerrunitdnametomcat9p8080:8080tomcat:9。0。20jre8alpine需要先停止运行中的容器再删除,否则无法删除容器dockerstoptomcat9按照容器名称删除dockerrmtomcat9按照容器ID删除dockerrm8dd95a95e687常用参数f:通过SIGKILL信号强制删除一个运行中的容器。l:移除容器间的网络连接,而非容器本身。v:删除与容器关联的卷。停止所有运行容器dockerstop(dockerpsqa)删除所有的容器dockerrm(dockerpsaq)dockerrm(dockerstop(dockerpsq))删除所有的镜像dockerrmi(dockerimagesq)创建容器dockercreate:创建一个新的容器但不启动它。用法同dockerrun命令。语法dockercreate〔OPTIONS〕IMAGE〔COMMAND〕〔ARG。。。〕dockercreateitnametomcat9p8080:80809。0。20jre8alpine常用参数大部分参数用法与dockerrun命令参数相同启动、重启、终止容器dockerstart:启动一个或多个已经被停止的容器dockerstop:停止一个运行中的容器dockerrestart:重启容器语法dockerstart〔OPTIONS〕CONTAINER〔CONTAINER。。。〕dockerstop〔OPTIONS〕CONTAINER〔CONTAINER。。。〕dockerrestart〔OPTIONS〕CONTAINER〔CONTAINER。。。〕实例dockerstarttomcat9dockerstoptomcat9dockerrestarttomcat9进入容器dockerexec:在运行的容器中执行命令。早期有attach命令,对于阻塞命令会等待,所以不方便。在Docker1。3。0后提供了exec可以在容器内直接执行任意命令语法dockerexec〔OPTIONS〕CONTAINERCOMMAND〔ARG。。。〕有bash命令的linux系统:例如centosdockerrunitnametomcat9。1p8080:8080tomcat:9。0。20jre8slimdockerexecittomcat9。1binbash没有bash命令的linux系统:例如alpine系统dockerrunitnametomcat9。2p8081:8080tomcat:9。0。20jre8alpinedockerexecittomcat9。2sh查看基础镜像linux版本catetcissue更新容器dockerupdate:可以动态地更新容器配置。可以更新一个或多个容器配置。多个容器名称或ID之间使用空格分隔。但update命令不是很成熟,有很多配置项不能动态更新。推荐大家还是rm容器后,再重新run一个新的镜像语法dockerupdate〔OPTIONS〕CONTAINER〔CONTAINER。。。〕dockerrunitnametomcat9p8081:8080tomcat:9。0。20jre8alpine更新容器restart策略dockerupdaterestartalwaystomcat9杀掉容器dockerkill:杀掉一个运行中的容器语法dockerkill〔OPTIONS〕CONTAINER〔CONTAINER。。。〕dockerrunitnametomcat9p8081:8080tomcat:9。0。20jre8alpinedockerkilltomcat9dockerpsdockerpsadockerstarttomcat9常用参数s:向容器发送一个信号cp命令用于容器与主机之间的数据拷贝容器内的文件拷贝到宿主机dockercp〔OPTIONS〕CONTAINER:SRCPATHDESTPATHdockercpnginx:etcnginxnginx。confdata宿主机文件复制到容器内dockercp〔OPTIONS〕SRCPATHCONTAINER:DESTPATHdockercpdataindex。htmlnginx:usrsharenginxhtmlindex。html常用参数L:保持源目标中的链接aarchiveArchivemode(copyalluidgidinformation)部分演示安装阿里云镜像加速器 inspect命令 tag命令 标记本地镜像,将其归入某一仓库 rmi命令 总结:推荐通过image的名称删除镜像image的ID在终端长度未完全显示,ID值会出现重复dockerps 容器创建、启动、停止 exec命令 Docker网络 docker安装后会自动创建3种网络:bridgehostnone dockernetworklsdocker网络理论部分 docker使用Linux桥接网卡,在宿主机虚拟一个docker容器网桥(docker0),docker启动一个容器时会根据docker网桥的网段分配给容器一个IP地址,称为ContainerIP,同时docker网桥是每个容器的默认网关。因为在同一宿主机内的容器都接入同一个网桥,这样容器之间就能够通过容器的ContainerIP直接通信。 docker网桥是宿主机虚拟出来的,并不是真实存在的网络设备,外部网络是无法寻址到的,这也意味着外部网络无法通过直接ContainerIP访问到容器。如果容器希望外部访问能够访问到,可以通过映射容器端口到宿主主机(端口映射),即dockerrun创建容器时候通过p或P参数来启用,访问容器的时候就通过〔宿主机IP〕:〔容器端口〕访问容器。 使用命令查看docker网络部分 dockerinfo bridge网络 bridge网络表现形式就是docker0这个网络接口。容器默认都是通过docker0这个接口进行通信。也可以通过docker0去和本机的以太网接口连接,这样容器内部才能访问互联网 查看docker0网络,在默认环境中,一个名为docker0的linuxbridge自动被创建好了,其上有一个 docker0内部接口,IP地址为172。17。0。116 ipa 查看docker网络 dockernetworkls 查看bridge网络详情。主要关注Containers节点信息。 dockernetworkinspectbridge 运行镜像 dockerrunitdnamenginx1nginx:1。19。3alpine 查看bridge网络详情。主要关注Containers节点信息。发现nginx1容器默认使用bridge网络 dockernetworkinspectbridge 容器创建时IP地址的分配 查看docker主机网络。发现多出一块网卡veth8890dffif8 ipa Docker创建一个容器的时候,会执行如下操作: 创建一对虚拟接口网卡,也就是vethpair,分别放到本地主机和新容器中; 本地主机一端桥接到默认的docker0或指定网桥上,并具有一个唯一的名字,如veth8890dff; 容器一端放到新容器中,并修改名字作为eth0,这个网卡接口只在容器的名字空间可见; 从网桥可用地址段中(也就是与该bridge对应的network)获取一个空闲地址分配给容器的eth0,并配置默认路由到桥接网卡veth8890dff。完成这些之后,容器就可以使用eth0虚拟网卡来连接其他容器和其他网络。如果不指定network,创建的容器默认都会挂到docker0上,使用本地主机上docker0接口的IP作为所有容器的默认网关。查看容器内的网络 第一种方式: dockerexecitnginx1sh ipa 第二种方式: dockerexecitnginx1ipa安装brctl 查看桥接网络工具 yuminstallybridgeutils brctlshow 多容器之间通讯 dockerrunitdnamenginx1nginx:1。19。3alpinedockerrunitdnamenginx2nginx:1。19。3alpinedockernetworkinspectbridgedockerexecitnginx1shping172。17。0。2可以ping通dockerexecitnginx2shping172。17。0。2可以ping通pingwww。baidu。compingnginx1不可以 容器内ip是动态分配的,容器IP地址会发生变化新建bridge网络 dockernetworkcreatedbridgemybridge 上面命令参数d是指DRIVER的类型,后面的mybridge是network的自定义名称,这个和docker0是 类似的。 如何把容器连接到mybridge这个网络 dockerrunitdnamenginx3networkmybridgenginx:1。19。3alpine 如何把已运行的容器绑定到mybridge 将运行着的nginx2容器连接到新网络mybridge dockernetworkconnectmybridgenginx2 nginx2横跨mybridgedocker0两个网络 加入相同网络mybridge后,可通过容器名ping通 none网络 环境准备,先stop和rm掉全部之前开启的容器。并且把前面创建的mybridge网络也删除。〔rootlocalhost〕dockerrmf(dockerpsaq)ade9d51296215f57299b3fe2f98f7f4be1d52f68d03cbdfcaf4c25395fd9〔rootlocalhost〕dockernetworkrmmybridgemybridge〔rootlocalhost〕dockernetworklsNETWORKIDNAMEDRIVERSCOPE5b0ad369d4e2bridgebridgelocal8555d88acdb2hosthostlocalf223f17c9cdcnonenulllocal〔rootlocalhost〕dockerpsCONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES〔rootlocalhost〕 启动一个ngnix的容器nginx1,并且连接到none网络。然后执行dockernetworkinspectnone,看看容器信息 dockerrunitdnamenginx1networknonenginx:1。19。3alpine 注:容器使用none模式,是没有物理地址和IP地址。我们可以进入到nginx1容器里,执行ipa命令看看。只有一个lo接口,没有其他网络接口,没有IP。也就是说,使用none模式,这个容器是不能被其他容器访问。这种使用场景很少,只有项目安全性很高的功能才能使用到。例如:密码加密算法容器,只需要进容器里查看。host网络 dockerrunitdnamenginx2networkhostnginx:1。19。3alpine dockernetworkinspecthost 这里来看,也不显示IP地址。那么是不是和none一样,肯定不是,不然也不会设计none和host网络进行区分。下面我们进入nginx2容器,执行ipa看看效果。我们在容器里执行ipa,发现打印内容和在linux本机外执行ipa是一样的 注:容器使用了host模式,说明容器和外层linux主机共享一套网络接口。VMware公司的虚拟机管理软件,其中网络设置,也有host这个模式,作用也是一样,虚拟机里面使用网络和你自己外层机器是一模一样的。这种容器和本机使用共享一套网络接口,缺点还是很明显的,例如我们知道web服务器一般端口是80,共享了一套网络接口,那么你这台机器上只能启动一个nginx端口为80的服务器了。否则,出现端口被占用的情况。网络命令汇总dockernetworkhelpCommands:connectConnectacontainertoanetworkcreateCreateanetworkdisconnectDisconnectacontainerfromanetworkinspectDisplaydetailedinformationononeormorenetworkslsListnetworkspruneRemoveallunusednetworksrmRemoveoneormorenetworks查看网络查看网络dockernetworkls作用:查看已经建立的网络对象命令格式:dockernetworkls〔OPTIONS〕命令参数(OPTIONS):f,filterfilter过滤条件(如driverbridge)formatstring格式化打印结果notrunc不缩略显示q,quiet只显示网络对象的ID注意:默认情况下,docker安装完成后,会自动创建bridge、host、none三种网络驱动命令演示dockernetworklsdockernetworklsnotruncdockernetworklsfdriverhost创建网络创建网络dockernetworkcreate作用:创建新的网络对象命令格式:dockernetworkcreate〔OPTIONS〕NETWORK命令参数(OPTIONS):d,driverstring指定网络的驱动(默认bridge)subnetstrings指定子网网段(如192。168。0。016、172。88。0。024)iprangestrings执行容器的IP范围,格式同subnet参数gatewaystrings子网的IPv4orIPv6网关,如(192。168。0。1)注意:host和none模式网络只能存在一个docker自带的overlay网络创建依赖于dockerswarm(集群负载均衡)服务192。168。0。016等于192。168。0。0192。168。255。255192。168。8。024172。88。0。024等于172。88。0。0172。88。0。255命令演示dockernetworklsdockernetworkcreatedbridgemybridgedockernetworkls网络删除网络删除dockernetworkrm作用:删除一个或多个网络命令格式:dockernetworkrmNETWORK〔NETWORK。。。〕命令参数(OPTIONS):无查看网络详细信息查看网络详细信息dockernetworkinspect作用:查看一个或多个网络的详细信息命令格式:dockernetworkinspect〔OPTIONS〕NETWORK〔NETWORK。。。〕或者dockerinspect〔OPTIONS〕NETWORK〔NETWORK。。。〕命令参数(OPTIONS):f,formatstring根据format输出结果使用网络使用网络dockerrunnetwork作用:为启动的容器指定网络模式命令格式:dockerruncreatenetworkNETWORK命令参数(OPTIONS):无注意:默认情况下,docker创建或启动容器时,会默认使用名为bridge的网络网络连接与断开网络连接与断开dockernetworkconnectdisconnect作用:将指定容器与指定网络进行连接或者断开连接命令格式:dockernetworkconnect〔OPTIONS〕NETWORKCONTAINERdockernetworkdisconnect〔OPTIONS〕NETWORKCONTAINER命令参数(OPTIONS):f,force强制断开连接(用于disconnect)获取所有容器名称及其IP地址 dockerinspectf{{。Name}}{{。NetworkSettings。IPAddress}}(dockerpsaq)实战dockernetworkcreatedbridgesubnet172。172。0。024gateway172。172。0。1mynetwork172。172。0。024:24代表子码掩码是255。255。255。0172。172。0。016:16代表子码掩码subnet可以定义网段尽量避开路由器网段192。168gateway和subnet前三网段必须定义一致172。172。0 固定容器ipdockerrunitdnamenginx3p8089:80networkmynetworkip172。172。0。100nginx:1。19。3alpine固定容器nginx3ip为172。172。0。100dockernetworkinspectmynetworknetworkmynetwork:选择存在的网络ip172。172。0。10:给nginx分配固定的IP地址 重启容器后,ip不变 Docker数据卷数据卷 当我们在使用docker容器的时候,会产生一系列的数据文件,这些数据文件在我们删除docker容器时是会消失的,但是其中产生的部分内容我们是希望能够把它给保存起来另作用途的,Docker将应用与运行环境打包成容器发布,我们希望在运行过程钟产生的部分数据是可以持久化的的,而且容器之间我们希望能够实现数据共享; 数据卷(DataVolumes)是一个可供一个或多个容器使用的特殊目录,它将主机操作系统目录直接映射进容器。 注意事项挂载数据卷,最好是通过run而非createstart创建启动容器,createstart命令创建启动容器后,再挂载数据卷相当麻烦,要修改很多配置文件,但并非不可以。docker官网推荐尽量进行目录挂载,不要进行文件挂载 数据卷类型 有三种数据卷类型:宿主机数据卷:直接在宿主机的文件系统中但是容器可以访问(bindmount)命名的数据卷:磁盘上Docker管理的数据卷,但是这个卷有个名字。匿名数据卷:磁盘上Docker管理的数据卷,因为没有名字想要找到不容易,Docker来管理这些文件。 数据卷其实都在(如果没有网络文件系统等情况下)宿主机文件系统里面的,只是第一种是在宿主机内的特定目录下,而后两种则在docker管理的目录下,这个目录一般是varlibdockervolumes推荐大家使用宿主机数据卷方式持久化数据 宿主机数据卷bindmounts:容器内的数据被存放到宿主机文件系统的任意位置,甚至存放到一些重要的系统目录或文件中。除了docker之外的进程也可以任意对他们进行修改。当使用bindmounts时,宿主机的目录或文件被挂载到容器中。容器将按照挂载目录或文件的绝对路径来使用或修改宿主机的数据。宿主机中的目录或文件不需要预先存在,在需要的使用会自动创建。使用bindmounts在性能上是非常好的,但这依赖于宿主机有一个目录妥善结构化的文件系统。使用bindmounts的容器可以在通过容器内部的进程对主机文件系统进行修改,包括创建,修改和删除重要的系统文件和目录,这个功能虽然很强大,但显然也会造成安全方面的影响,包括影响到宿主机上Docker以外的进程 数据覆盖问题如果挂载一个空的数据卷到容器中的一个非空目录中,那么这个目录下的文件会被复制到数据卷中如果挂载一个非空的数据卷到容器中的一个目录中,那么容器中的目录会显示数据卷中的数据。如果原来容器中的目录有数据,那么原始数据会被隐藏掉语法 dockerrunv宿主机绝对路径目录:容器内目录镜像名运行镜像mysqldockerrunitdnamemysqlrestartalwaysprivilegedtruep3306:3306eMYSQLROOTPASSWORDadminvdatamysql:varlibmysqlmysql:5。7。31charactersetserverutf8collationserverutf8generalci https:hub。docker。commysql privilegedtrue使用该参数,container内的root拥有真正的root权限。否则,container内的root只是外部的一个普通用户权限。privileged启动的容器,可以看到很多host上的设备,并且可以执行mount。甚至允许你在docker容器中启动docker容器容器目录权限通过v容器内路径:rorw改变读写权限ro:readonly只读rw:readwrite可读可写dockerrunitv宿主机绝对路径目录:容器内目录:ro镜像名dockerrunitv宿主机绝对路径目录:容器内目录:rw镜像名例如:dockerrundPnamenginx05vlagouedu1:etcnginx:ronginxdockerrundPnamenginx05vlagouedu2:etcnginx:rwnginxro只要看到ro就说明这个路径只能通过宿主机来操作,容器内部是无法操作!宿主机数据卷maven私服搭建https:hub。docker。comrsonatypenexus3拉取镜像dockerpullsonatypenexus3:3。28。1备份镜像dockersavesonatypenexus3:3。28。1osonatype。nexus3。3。28。1。tar导入镜像dockerloadisonatype。nexus3。3。28。1。tar运行容器dockerrundp8081:8081namenexus3sonatypenexus3:3。28。1进入容器查找初始化密码dockerexecitnexus3binbashcdnexusdatacatadmin。password浏览器端访问http:192。168。198。100:8081dockerrm(dockerstop(dockerpsaq))数据卷挂载dockerrundp8081:8081namenexus3vdatanexus3:nexusdatasonatypenexus3:3。28。1查看容器启动ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志adockerlogsfnexus3报错信息如下:mkdir:cannotcreatedirectory。。sonatypeworknexus3log:Permissiondeniedmkdir:cannotcreatedirectory。。sonatypeworknexus3tmp:PermissiondeniedOpenJDK64BitServerVMwarning:Cannotopenfile。。sonatypeworknexus3logjvm。logduetoNosuchfileordirectoryWarning:Cannotopenlogfile:。。sonatypeworknexus3logjvm。logWarning:ForcingoptionXX:LogFiletmpjvm。logjava。io。FileNotFoundException:。。sonatypeworknexus3tmpi4jZTDnGON8hezynsMX2ZCYAVDtQog。lock(Nosuchfileordirectory)。。。。删除容器dockerrmfnexus3查看官网说明文档,需要为挂载目录授权chownR200nexus3运行容器dockerrundp8081:8081namenexus3vdatanexus3:nexusdatasonatypenexus3:3。28。1查看容器启动ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志adockerlogsfnexus3 总结:开发环境中推荐各位小伙伴为挂载目录授最高权限777;生产环境需要查看官网文档,结合实际生产环境进行授权。 命名的数据卷dockerrunitdnamenginxp8080:8080vxlnginx:etcnginxnginx:1。19。3alpinxlnginx为自定义数据卷名称查看docker数据卷dockervolumels查看lagouedunginx宿主机目录dockervolumeinspectxlnginx进入docker数据卷默认目录cdvarlibdockervolumesxlnginxdata查看文件ls所有的文件docker默认保存在data目录中cddata删除容器dockerrm(dockerstop(dockerpsaq))查看挂载数据是否还存在,通过查看数据,发现删除容器后,宿主机中的数据还存在ls 匿名数据卷运行容器dockerrunitdnamenginxp80:80vetcnginxnginx:1。19。3alpine查看docker数据卷dockervolumels查看挂载到宿主机上的目录dockervolumeinspectb03d64f5701143238b71e68c5928710f745e9daf2aca554f9004f0913ffcc993进入docker数据卷默认目录cdvarlibdockervolumesb03d64f5701143238b71e68c5928710f745e9daf2aca554f9004f0913ffcc993data删除容器dockerrm(dockerstop(dockerpsaq))查看挂载数据是否还存在,通过查看数据,发现删除容器后,宿主机中的数据还存在ls 清理数据卷 删除上面创建的容器后会,发现数据卷仍然存在,我们就需要去清理它,不然会占用我们的资源dockervolumels清理数据卷dockervolumeprunedockervolumels 数据卷容器 如果用户需要在多个容器之间共享一些持续更新的数据,最简单的方式是使用数据卷容器。数据卷容器也是一个容器,但是它的目的是专门用来提供数据卷供其他容器挂载。发现创建好的数据卷容器是处于停止运行的状态,因为使用volumesfrom参数所挂载数据卷的容器自己并不需要保持在运行状态。 基础镜像dockerpullcentos:7。8。2003dockerpullnginx:1。19。3alpinedockerpullmysql:5。7。31run命令dockerrun参数volumesfrom:dockerrundnamedatavolumevdatanginx:usrsharenginxhtmlvdatamysql:varlibmysqlcentos:7。8。2003dockerrunitdnamenginx01p80:80volumesfromdatavolumenginx:1。19。3alpineecholagouedunginxdatanginxindex。htmlhttp:192。168。198。100dockerrunitdnamenginx02p81:80volumesfromdatavolumenginx:1。19。3alpinehttp:192。168。198。100:81nginx01nginx02共享一个数据卷地址datanginxdockerrunitdnamemysql01restartalwaysprivilegedtruep3306:3306eMYSQLROOTPASSWORDadminvolumesfromdatavolumemysql:5。7。31charactersetserverutf8collationserverutf8generalcidockerrunitdnamemysql02restartalwaysprivilegedtruep3307:3306eMYSQLROOTPASSWORDadminvolumesfromdatavolumemysql:5。7。31charactersetserverutf8collationserverutf8generalci发现mysql02启动会报错 注:有些基础镜像容器可以共享相同数据卷,有些不行,需要对应修改DockerCompose https:docs。docker。comcomposecomposefile 部署和管理繁多的服务是困难的。而这正是DockerCompose要解决的问题。DockerCompose并不是通过脚本和各种冗长的docker命令来将应用组件组织起来,而是通过一个声明式的配置文件描述整个应用,从而使用一条命令完成部署。应用部署成功后,还可以通过一系列简单的命令实现对其完整声明周期的管理。甚至,配置文件还可以置于版本控制系统中进行存储和管理。dockercompose安装https:github。comdockercompose授权mvdatadockercomposeLinuxx8664usrlocalbindockercomposecpdatadockercomposeLinuxx8664usrlocalbindockercomposechmodxusrlocalbindockercomposex指可执行权限开发环境可以授予最高权限chmod777usrlocalbindockercompose检查安装版本dockercomposevdockercomposeversiondockercomposeversion卸载dockercomposedockercompose卸载只需要删除二进制文件就可以了。rmrfusrlocalbindockercompose重启rebootyml配置文件及常用指令 DockerCompose使用YAML文件来定义多服务的应用。YAML是JSON的一个子集,因此也可以使用JSON。 DockerCompose默认使用文件名dockercompose。yml。当然,也可以使用f参数指定具体文件。 DockerCompose的YAML文件包含4个一级key:version、services、networks、volumesversion是必须指定的,而且总是位于文件的第一行。它定义了Compose文件格式(主要是API)的版本。注意,version并非定义DockerCompose或Docker引擎的版本号。services用于定义不同的应用服务。上边的例子定义了两个服务:一个名为lagoumysql数据库服务以及一个名为lagoueureka的微服。DockerCompose会将每个服务部署在各自的容器中。networks用于指引Docker创建新的网络。默认情况下,DockerCompose会创建bridge网络。这是一种单主机网络,只能够实现同一主机上容器的连接。当然,也可以使用driver属性来指定不同的网络类型。volumes用于指引Docker来创建新的卷Compose和Docker兼容性:Compose文件格式有3个版本,分别为1,2。x和3。x目前主流的为3。x其支持docker1。13。0及其以上的版本常用参数:version指定compose文件的版本services定义所有的service信息,services下面的第一级别的key既是一个service的名称build指定包含构建上下文的路径,或作为一个对象,该对象具有context和指定的dockerfile文件以及args参数值contextcontext:指定Dockerfile文件所在的路径dockerfiledockerfile:指定context指定的目录下面的Dockerfile的名称(默认为Dockerfile)argsargs:Dockerfile在build过程中需要的参数(等同于dockercontainerbuildbuildarg的作用)cachefromv3。2中新增的参数,指定缓存的镜像列表(等同于dockercontainerbuildcachefrom的作用)labelsv3。3中新增的参数,设置镜像的元数据(等同于dockercontainerbuildlabels的作用)shmsizev3。5中新增的参数,设置容器devshm分区的大小(等同于dockercontainerbuildshmsize的作用)command覆盖容器启动后默认执行的命令,支持shell格式和〔〕格式configs不知道怎么用cgroupparent不知道怎么用containername指定容器的名称(等同于dockerrunname的作用)credentialspec不知道怎么用deployv3版本以上,指定与部署和运行服务相关的配置,deploy部分是dockerstack使用的,dockerstack依赖dockerswarmendpointmodev3。3版本中新增的功能,指定服务暴露的方式vipDocker为该服务分配了一个虚拟IP(VIP),作为客户端的访问服务的地址dnsrrDNS轮询,Docker为该服务设置DNS条目,使得服务名称的DNS查询返回一个IP地址列表,客户端直接访问其中的一个地址labels指定服务的标签,这些标签仅在服务上设置mode指定deploy的模式global每个集群节点都只有一个容器replicated用户可以指定集群中容器的数量(默认)placement不知道怎么用replicasdeploy的mode为replicated时,指定容器副本的数量resources资源限制limits设置容器的资源限制cpus:0。5设置该容器最多只能使用50的CPUmemory:50M设置该容器最多只能使用50M的内存空间reservations设置为容器预留的系统资源(随时可用)cpus:0。2为该容器保留20的CPUmemory:20M为该容器保留20M的内存空间restartpolicy定义容器重启策略,用于代替restart参数condition定义容器重启策略(接受三个参数)none不尝试重启onfailure只有当容器内部应用程序出现问题才会重启any无论如何都会尝试重启(默认)delay尝试重启的间隔时间(默认为0s)maxattempts尝试重启次数(默认一直尝试重启)window检查重启是否成功之前的等待时间(即如果容器启动了,隔多少秒之后去检测容器是否正常,默认0s)updateconfig用于配置滚动更新配置parallelism一次性更新的容器数量delay更新一组容器之间的间隔时间failureaction定义更新失败的策略continue继续更新rollback回滚更新pause暂停更新(默认)monitor每次更新后的持续时间以监视更新是否失败(单位:nsusmssmh)(默认为0)maxfailureratio回滚期间容忍的失败率(默认值为0)orderv3。4版本中新增的参数,回滚期间的操作顺序stopfirst旧任务在启动新任务之前停止(默认)startfirst首先启动新任务,并且正在运行的任务暂时重叠rollbackconfigv3。7版本中新增的参数,用于定义在updateconfig更新失败的回滚策略parallelism一次回滚的容器数,如果设置为0,则所有容器同时回滚delay每个组回滚之间的时间间隔(默认为0)failureaction定义回滚失败的策略continue继续回滚pause暂停回滚monitor每次回滚任务后的持续时间以监视失败(单位:nsusmssmh)(默认为0)maxfailureratio回滚期间容忍的失败率(默认值0)order回滚期间的操作顺序stopfirst旧任务在启动新任务之前停止(默认)startfirst首先启动新任务,并且正在运行的任务暂时重叠注意:支持dockercomposeup和dockercomposerun但不支持dockerstackdeploy的子选项securityoptcontainernamedevicestmpfsstopsignallinkscgroupparentnetworkmodeexternallinksrestartbuildusernsmodesysctlsdevices指定设备映射列表(等同于dockerrundevice的作用)dependson定义容器启动顺序(此选项解决了容器之间的依赖关系,此选项在v3版本中使用swarm部署时将忽略该选项)示例:dockercomposeup以依赖顺序启动服务,下面例子中redis和db服务在web启动前启动默认情况下使用dockercomposeupweb这样的方式启动web服务时,也会启动redis和db两个服务,因为在配置文件中定义了依赖关系version:3services:web:build:。dependson:dbredisredis:image:redisdb:image:postgresdns设置DNS地址(等同于dockerrundns的作用)dnssearch设置DNS搜索域(等同于dockerrundnssearch的作用)tmpfsv2版本以上,挂载目录到容器中,作为容器的临时文件系统(等同于dockerruntmpfs的作用,在使用swarm部署时将忽略该选项)entrypoint覆盖容器的默认entrypoint指令(等同于dockerrunentrypoint的作用)envfile从指定文件中读取变量设置为容器中的环境变量,可以是单个值或者一个文件列表,如果多个文件中的变量重名则后面的变量覆盖前面的变量,environment的值覆盖envfile的值文件格式:RACKENVdevelopmentenvironment设置环境变量,environment的值可以覆盖envfile的值(等同于dockerrunenv的作用)expose暴露端口,但是不能和宿主机建立映射关系,类似于Dockerfile的EXPOSE指令externallinks连接不在dockercompose。yml中定义的容器或者不在compose管理的容器(dockerrun启动的容器,在v3版本中使用swarm部署时将忽略该选项)extrahosts添加host记录到容器中的etchosts中(等同于dockerrunaddhost的作用)healthcheckv2。1以上版本,定义容器健康状态检查,类似于Dockerfile的HEALTHCHECK指令test检查容器检查状态的命令,该选项必须是一个字符串或者列表,第一项必须是NONE,CMD或CMDSHELL,如果其是一个字符串则相当于CMDSHELL加该字符串NONE禁用容器的健康状态检测CMDtest:〔CMD,curl,f,http:localhost〕CMDSHELLtest:〔CMDSHELL,curlfhttp:localhostexit1〕或者test:curlfhttps:localhostexit1interval:1m30s每次检查之间的间隔时间timeout:10s运行命令的超时时间retries:3重试次数startperiod:40sv3。4以上新增的选项,定义容器启动时间间隔disable:truetrue或false,表示是否禁用健康状态检测和test:NONE相同image指定docker镜像,可以是远程仓库镜像、本地镜像initv3。7中新增的参数,true或false表示是否在容器中运行一个init,它接收信号并传递给进程isolation隔离容器技术,在Linux中仅支持default值labels使用Docker标签将元数据添加到容器,与Dockerfile中的LABELS类似links链接到其它服务中的容器,该选项是docker历史遗留的选项,目前已被用户自定义网络名称空间取代,最终有可能被废弃(在使用swarm部署时将忽略该选项)logging设置容器ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a服务driver指定ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a记录驱动程序,默认jsonfile(等同于dockerrunlogdriver的作用)options指定ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a的相关参数(等同于dockerrunlogopt的作用)maxsize设置单个ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a文件的大小,当到达这个值后会进行ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a滚动操作maxfileahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a文件保留的数量networkmode指定网络模式(等同于dockerrunnet的作用,在使用swarm部署时将忽略该选项)networks将容器加入指定网络(等同于dockernetworkconnect的作用),networks可以位于compose文件顶级键和services键的二级键aliases同一网络上的容器可以使用服务名称或别名连接到其中一个服务的容器ipv4addressIPV4格式ipv6addressIPV6格式示例:version:3。7services:test:image:nginx:1。14alpinecontainername:mynginxcommand:ifconfignetworks:appnet:调用下面networks定义的appnet网络ipv4address:172。16。238。10networks:appnet:driver:bridgeipam:driver:defaultconfig:subnet:172。16。238。024pid:host共享宿主机的进程空间(PID)ports建立宿主机和容器之间的端口映射关系,ports支持两种语法格式SHORT语法格式示例:3000暴露容器的3000端口,宿主机的端口由docker随机映射一个没有被占用的端口30003005暴露容器的3000到3005端口,宿主机的端口由docker随机映射没有被占用的端口8000:8000容器的8000端口和宿主机的8000端口建立映射关系90909091:80808081127。0。0。1:8001:8001指定映射宿主机的指定地址的127。0。0。1:50005010:500050106060:6060udp指定协议LONG语法格式示例:(v3。2新增的语法格式)ports:target:80容器端口published:8080宿主机端口protocol:tcp协议类型mode:hosthost在每个节点上发布主机端口,ingress对于群模式端口进行负载均衡secrets不知道怎么用securityopt为每个容器覆盖默认的标签(在使用swarm部署时将忽略该选项)stopgraceperiod指定在发送了SIGTERM信号之后,容器等待多少秒之后退出(默认10s)stopsignal指定停止容器发送的信号(默认为SIGTERM相当于killPID;SIGKILL相当于kill9PID;在使用swarm部署时将忽略该选项)sysctls设置容器中的内核参数(在使用swarm部署时将忽略该选项)ulimits设置容器的limitusernsmode如果Docker守护程序配置了用户名称空间,则禁用此服务的用户名称空间(在使用swarm部署时将忽略该选项)volumes定义容器和宿主机的卷映射关系,其和networks一样可以位于services键的二级键和compose顶级键,如果需要跨服务间使用则在顶级键定义,在services中引用SHORT语法格式示例:volumes:varlibmysql映射容器内的varlibmysql到宿主机的一个随机目录中optdata:varlibmysql映射容器内的varlibmysql到宿主机的optdata。cache:tmpcache映射容器内的varlibmysql到宿主机compose文件所在的位置configs:etcconfigs:ro映射容器宿主机的目录到容器中去,权限只读datavolume:varlibmysqldatavolume为volumes顶级键定义的目录,在此处直接调用LONG语法格式示例:(v3。2新增的语法格式)version:3。2services:web:image:nginx:alpineports:80:80volumes:type:volumemount的类型,必须是bind、volume或tmpfssource:mydata宿主机目录target:data容器目录volume:配置额外的选项,其key必须和type的值相同nocopy:truevolume额外的选项,在创建卷时禁用从容器复制数据type:bindvolume模式只指定容器路径即可,宿主机路径随机生成;bind需要指定容器和数据机的映射路径source:。statictarget:optappstaticreadonly:true设置文件系统为只读文件系统volumes:mydata:定义在volume,可在所有服务中调用restart定义容器重启策略(在使用swarm部署时将忽略该选项,在swarm使用restartpolicy代替restart)no禁止自动重启容器(默认)always无论如何容器都会重启onfailure当出现onfailure报错时,容器重新启动其他选项:domainname,hostname,ipc,macaddress,privileged,readonly,shmsize,stdinopen,tty,user,workingdir上面这些选项都只接受单个值和dockerrun的对应参数类似对于值为时间的可接受的值:2。5s10s1m30s2h32m5h34m56s时间单位:us,ms,s,m,h对于值为大小的可接受的值:2b1024kb2048k300m1gb单位:b,k,m,g或者kb,mb,gbnetworks定义networks信息driver指定网络模式,大多数情况下,它bridge于单个主机和overlaySwarm上bridgeDocker默认使用bridge连接单个主机上的网络overlayoverlay驱动程序创建一个跨多个节点命名的网络host共享主机网络名称空间(等同于dockerrunnethost)none等同于dockerrunnetnonedriveroptsv3。2以上版本,传递给驱动程序的参数,这些参数取决于驱动程序attachabledriver为overlay时使用,如果设置为true则除了服务之外,独立容器也可以附加到该网络;如果独立容器连接到该网络,则它可以与其他Docker守护进程连接到的该网络的服务和独立容器进行通信ipam自定义IPAM配置。这是一个具有多个属性的对象,每个属性都是可选的driverIPAM驱动程序,bridge或者defaultconfig配置项subnetCIDR格式的子网,表示该网络的网段external外部网络,如果设置为true则dockercomposeup不会尝试创建它,如果它不存在则引发错误namev3。5以上版本,为此网络设置名称文件格式示例:version:3services:redis:image:redis:alpineports:6379networks:frontenddeploy:replicas:2updateconfig:parallelism:2delay:10srestartpolicy:condition:onfailuredb:image:postgres:9。4volumes:dbdata:varlibpostgresqldatanetworks:backenddeploy:placement:constraints:〔node。rolemanager〕反向代理案例运行镜像dockerrunitdnamenginxp80:80nginx:1。19。3alpinedockerrunitdnametomcatp8080:8080tomcat:9。0。20jre8alpinemkdirpdatatomcat1tomcat2dockercpnginx:etcnginxdatadockercptomcat:usrlocaltomcatwebappsdatatomcat1webappsdockercptomcat:usrlocaltomcatwebappsdatatomcat2webappsechotomcat1datatomcat1webappsROOTindex。jspechotomcat2datatomcat2webappsROOTindex。jspdockerrmfnginxtomcatnginx。confnginx。conf增加内容includevhost。conf;反向代理配置mkdirpdatanginxvhostcdvhostvilagouedu。com。confupstreamnginxlagouedu{server192。168。198。100:8081;server192。168。198。100:8082;}server{listen80;servername192。168。198。100;autoindexon;indexindex。htmlindex。htmindex。jsp;location{proxypasshttp:nginxlagouedu;addheaderAccessControlAllowOrigin;}}dockercomposeversion:3services:服务名称xlnginx:image:nginx:1。19。3alpine容器名称containername:xlnginxrestart:alwaysports:80:80volumes:datanginx:etcnginxtomcat1:image:tomcat:9。0。20jre8alpinecontainername:tomcat1restart:alwaysports:8081:8080volumes:datatomcat1webapps:userlocaltomcatwebappsdependson:依赖xlnginx先启动服务名称xlnginxtomcat2:image:tomcat:9。0。20jre8alpinecontainername:tomcat2restart:alwaysports:8082:8080volumes:datatomcat2webapps:userlocaltomcatwebappsdependson:依赖xlnginx先启动服务名称xlnginx常用命令汇总 官网https:docs。docker。comenginereferencecommandlinecomposebuild后台启动在dockercompose。yml当前目录下,并且名字为dockercompose。ymldockercomposeupddockercomposefmydockercompose。ymlupd停止并删除服务fdockercomposedown仅停止服务dockercomposestop启动服务dockercomposestart重启服务dockercomposerestart列出所有运行容器dockercomposepsdockerps查看服务ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志af指定yml文件dockercomposelogsdockerlogsfnginx私服搭建官网私服 https:hub。docker。comregistry拉取镜像 dockerpullregistry:2。8。1 dockerrundnameregistryrestartalwaysp5000:500registry:2。8。1添加私服仓库地址 编辑配置文件vietcdockerdaemon。json 增加仓库配置信息{insecureregistries:〔18。135。3。67:5000〕} 重启docker systemctldaemonreload systemctlrestartdocker 查看docker信息确认仓库是否添加 dockerinfo 浏览器测试 http:8。135。3。67:5000v2catalog上传镜像 dockertagnginx:1。19。3alpine8。135。3。67:5000nginx:v2 dockerpush8。135。3。67:5000nginx http:8。135。3。67:5000v2nginxtagslist harbor私服搭建harbor官网地址 https:goharbor。io github官网地址: https:github。comgoharborharbor 官方帮助文档: https:github。comgoharborharborblobv1。9。4docsinstallationguide。md 注:搭建harbor必须安装dockercompose环境 dockercomposev 安装harborHTTP方式安装1。解压软件cddatatarzxfharborofflineinstallerv1。9。4。tgz2。进入安装目录cdharbor3。修改配置文件viharbor。yml3。1修改私服镜像地址hostname:8。135。3。673。2修改镜像地址访问端口号port:50003。3harbor管理员登录系统密码harboradminpassword:Harbor123453。4修改harbor映射卷目录datavolume:dataharbor4。安装harbor4。1执行启动脚本,经过下述3个步骤后,成功安装harbor私服。install。sh4。2准备安装环境:检查docker版本和dockercompose版本4。3加载harbor需要的镜像4。4准备编译环境4。5启动harbor。通过dockercompose方式启动服务4。6google浏览器访问harbor私服http:8。135。3。67:5000username:adminpassword:Harbr12345配置私服vietcdockerdaemon。jsoninsecureregistries:〔8。135。3。67:5000〕重启docker服务:systemctldaemonreloadsystemctlrestartdocker新建项目 在harbor中新建公共项目:xl 注:由于项目设置的非公开,所以上传镜像需先登陆登录私服 dockerloginuadminpHarbor123458。135。3。67:5000 退出私服 dockerlogout8。135。3。67:5000上传镜像 dockertagnginx:1。19。3alpine8。135。3。67:5000xlnginx:v1 dockerpush8。135。3。67:5000xlnginx:v1 删除本地镜像 dockerrmif8。135。3。67:5000xlnginx:v1 从私服拉取镜像 dockerpull8。135。3。67:5000xlnginx:v1 harbor企业级部署 默认情况下,harbor不提供证书。可以在没有安全性的情况下部署harbor,就可以通过HTTP方式连接到harbor。但是,只有在没有连接到外部internet的测试环境或开发环境中才可以使用HTTP。在生产环境中,始终使用HTTPS。要配置HTTPS,必须创建SSL证书。可以使用由受信任的第三方CA签名的证书,也可以使用自签名证书。本节介绍如何使用OpenSSL创建CA,以及如何使用CA签署服务器证书和客户端证书。下面的过程假设harbor注册表的主机名是harbor。lagouedu。com,并且它的DNS记录指向运行harbor的主机。 官网文档 官网https配置帮助文档: https:github。comgoharborharborblobv1。9。4docsconfigurehttps。md 解压harbor 在harbor中创建一个目录,用于存放证书 echo192。168。150。141harbor。xl。cometchosts catetchosts cddata tarzxfharborofflineinstallerv1。9。4。tgz cdharbor mkdirpssl cdssl 获得证书颁发机构 在生产环境中,应该从CA官方获取证书。在测试或开发环境中,可以生成自己的CA。若要生成CA证书,请运行以下命令。 cddataharborssl 创建CA根证书 opensslgenrsaoutca。key4096 opensslreqx509newnodessha512days3650subj CTWSTBeijingLBeijingOexampleOUPersonalCNharbor。xl。comkey ca。keyoutca。crt 获取服务器证书 证书通常包含。crt文件和。key文件,例如harbor。xl。com。crt和harbor。xl。com。key。 创建自己的私钥 opensslgenrsaoutharbor。lagouedu。com。key4096 生成证书签名请求 调整subj选项中的值以反映您的组织。如果使用域名方式连接harbor主机,则必须将其指定为commonname(CN)属性,并在key和CSR文件名中使用它。 opensslreqsha512newsubj CTWSTBeijingLBeijingOexampleOUPersonalCNharbor。xl。comkey harbor。xl。com。keyoutharbor。xl。com。csr 生成注册表主机的证书 无论是使用域名还是使用IP地址连接到您的Harbor主机,都必须创建此文件,以便您可以为harbor主机生成符合使用者替代名称(SAN)和x509v3扩展要求的证书。替换DNS条目以反映harbor的域 catv3。extEOF authorityKeyIdentifierkeyid,issuer basicConstraintsCA:FALSE keyUsagedigitalSignature,nonRepudiation,keyEncipherment,dataEncipherment extendedKeyUsageserverAuth subjectAltNamealtnames 〔altnames〕 DNS。1harbor。xl。com EOF 使用v3。ext文件为harbor主机生成证书。 opensslx509reqsha512days3650extfilev3。extCAca。crtCAkeyca。key CAcreateserialinharbor。xl。com。csroutharbor。xl。com。crt 为docker配置服务器证书,密钥和CA 生成ca。crt、harbor。xl。com。crt和harbor。xl。com。key文件后,必须将它们提供给Harbor和Docker,并重新配置Harbor以使用它们。将yourdomain。com。crt转换为yourdomain。com。cert,供Docker使用。Docker守护进程将。crt文件解释为CA证书,。cert文件解释为客户端证书。opensslx509informPEMinharbor。xl。com。crtoutharbor。xl。com。certmkdirpetcdockercerts。dharbor。xl。comcpharbor。xl。com。certetcdockercerts。dharbor。xl。comcpharbor。xl。com。keyetcdockercerts。dharbor。xl。comcpca。crtetcdockercerts。dharbor。xl。com重启docker服务:systemctldaemonreloadsystemctlrestartdocker 修改harbor。yml文件 注释掉http的配置信息 hostname:harbor。xl。com https: port:443 certificate:dataharborsslharbor。xl。com。crt privatekey:dataharborsslharbor。xl。com。key 安装harbor dockerpullgoharborprepare:v1。9。4 cddataharbor 。prepared 。install。sh 访问UI C:WindowsSystem32driversetc 192。168。198。101harbor。xl。com https:harbor。xl。com 上传镜像docker100服务器:将harbor服务器端生成的ca。crt文件复制到etcpkicatrustsourceanchors中。执行命令更新ca证书授权:updatecatrust重启docker服务:systemctlrestartdockerecho192。168。198。101harbor。xl。cometchostsdockerloginharbor。xl。comadminHarbor12345dockerloadinginx。1。19。3。alpine。tardockertagnginx:1。19。3alpineharbor。xl。comxlnginx:v1dockerpushharbor。xl。comxlnginx:v1Dockerfile基于已有的镜像创建修改现有nginx镜像从私服拉取nginx镜像并运行dockerrunitdnamenginxp80:808。135。3。67:5000xlnginx:v1创建index。html并追加内容echoC。X。Lnginxdataindex。html将宿主机上的index文件复制到nginx1容器覆盖其index。html结合dockercp命令自定义nginx的index页面dockercpindex。htmlnginx:usrsharenginxhtmlindex。html 创建新镜像 commit命令 dockercommit:从容器创建一个新的镜像 dockercommit〔OPTIONS〕CONTAINER〔REPOSITORY〔:TAG〕〕 常用参数a:提交的镜像作者;c:使用Dockerfile指令来创建镜像;m:提交时的说明文字;p:在commit时,将容器暂停。 创建新nginx镜像 dockercommitmupdateindex。htmlaC。X。Lnginx8。135。3。67:5000xlnginx:v2 将镜像推至私服 dockerpush8。135。3。67:5000xlnginx:v2 官网地址 https:docs。docker。comenginereferencebuilder Dockerfile其实就是我们用来构建Docker镜像的源码,当然这不是所谓的编程源码,而是一些命令的集合,只要理解它的逻辑和语法格式,就可以很容易的编写Dockerfile。简单点说,Dockerfile可以让用户个性化定制Docker镜像。因为工作环境中的需求各式各样,网络上的镜像很难满足实际的需求。Dockerfile的基本结构 Dockerfile是一个包含用于组合映像的命令的文本文档。可以使用在命令行中调用任何命令。Docker通过读取Dockerfile中的指令自动生成映像。 dockerbuild命令用于从Dockerfile构建映像。可以在dockerbuild命令中使用f标志指向文件系统中任何位置的Dockerfile。 Dockerfile由一行行命令语句组成,并且支持以开头的注释行Dockerfile分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。Dockerfile文件说明 Docker以从上到下的顺序运行Dockerfile的指令。为了指定基本映像,第一条指令必须是FROM。一个声明以字符开头则被视为注释。可以在Docker文件中使用RUN,CMD,FROM,EXPOSE,ENV等指令。 修改mysql官网镜像时区 FROMmysql:8。0 MAINTAINERmysqlfromdateUTCbyAsiaShanghaiC。X。L ENVTZAsiaShanghaibuild命令 dockerbuild命令用于使用Dockerfile创建镜像。语法 dockerbuild〔OPTIONS〕PATHURL 常用参数 build命令参数特别多。这里只给大家介绍几个常用的参数,如果小伙伴们想了解更多内容,请参考docker官网手册。buildarg〔〕:设置镜像创建时的变量;f:指定要使用的Dockerfile路径;rm:设置镜像成功后删除中间容器(删除构建镜像时所依赖的容器);tag,t:镜像的名字及标签,通常name:tag或者name格式;可以在一次构建中为一个镜像设置多个标签。制作镜像 dockerbuildrmt8。135。3。67:5000xlmysql:8。0。 。指运行当前目录下的Dockerfile 运行镜像dockerrunitdnamemysqlp3306:3306restartalwayseMYSQLROOTPASSWORD1234568。135。3。67:5000xlmysql:8。0dockerlogsfmysqldockerexecitmysqlbashdate观察时间是否与windows系统的时间一致。idea集成docker修改docker100服务器docker。service服务信息,允许其他主机远程访问100服务器的docker。viusrlibsystemdsystemdocker。service在ExecStart行最后增加,开放远程主机访问权限。Htcp:0。0。0。0:2375最后增加修改内容如下:0。0。0。0允许所以ip都能访问ExecStartusrbindockerdHfd:containerdruncontainerdcontainerd。sockHtcp:0。0。0。0:2375重启dockersystemctldaemonreloadsystemctlrestartdocker查看docker进程,发现docker守护进程在已经监听2375的tcp端口psefgrepdocker查看系统的网络端口,检查tcp的2375端口,docker的守护进程是否监听netstattulp配置idea 配置插件 settingsbuildexecution。。。docker点击按钮,新增docker100服务器docker配置信息 配置内容如下: name:docker100 TCPSocket: EngineAPIURL:tcp:192。168。198。100:2375 配置成功后,会在下方显示connectionsuccessful 配置成功后,会在idea开发工具下方窗口8。services里显示信息,右键点击connect。连接成功可以查看到container和images等信息。可以对container和images进行各种相关操作。