讲完docker 的安装和基本使用之后,继续走的话就是对于docker 镜像的构建、对远程镜像仓库的管理、编排方式的选择,集群编排以及K8s,还有本次还会说一下hexo + docker 来构建云服务器上的个人博客。
docker 镜像的构建
上次也说过docker 的镜像就是没有运行启动来的容器,镜像和容器之间的关系就像是:面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。
当我们需要构建一个镜像的时候,要清楚镜像构建时,会一层层构建,前一层是后一层的基础,每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层。而我们最底层的镜像,也就是基础镜像,这个镜像一定是存在操作平台的镜像,操作平台镜像多很多,比如:linux/amd64、lunux/arm64、windows/amd64 等。
构建的基础-Dockerfile
我们如何将这些需要的镜像一层层堆起来,这里我们就需要Dockerfile。
它是一个包含用于组合镜像的命令的文本文档,由多条指令构成。可以使用在命令行中调用任何命令。 Docker 通过读取Dockerfile 中的指令自动生成镜像,每一条指令都会对应于docker 镜像中的每一层。
Dockerfile 一般分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令,’#’ 为 Dockerfile 中的注释。
docker 以从上到下的顺序运行Dockerfile 的指令。为了指定基本映像,第一条指令必须是FROM。一个声明以#字符开头则被视为注释。可以在docker 文件中使用RUN,CMD,FROM,EXPOSE,ENV等指令。
这里我们没有必要太纠结这个,有个基础的了解就行,没有必要自己手动编写这个,因为dockerhub 里面有很多已经制作好了的常用组件镜像,我们直接使用就行,了解这个只是为了见我们自己的项目打成镜像,比如下面这个:
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ADD learn-docker-storage-1.0-SNAPSHOT.jar app.jar
EXPOSE 8003
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
解析:
- FORM:定制的镜像都是基于 FROM 的镜像,这里的 openjdk 就是定制需要的基础镜像,后续操作都是基于openjdk,这里也是有操作平台的,它的操作平台就是alpine,所以这个openjdk 也是构建出的镜像
- VOLUME:挂载一个数据卷,这里因为没有名称,所以是一个默认的数据卷
- ADD:添加一层镜像到当前镜像,这里就是添加SpringBootTest 镜像到当前层,并改名app.jar
- EXPOSE:暴漏端口,因为我们的自己的端口是8003,所以我们暴漏8003
- ENTRYPOINT:设定容器启动时第一个运行的命令及其参数,这里就是容器以启动就执行 java -jar /app.jar
Dockerfile 写好了之后,我们再用docker 的构建命令build 就行打包镜像就行。
docker bulid -t 仓库名/镜像名:tag .
解析:
- -t:表示后面的命令方式为仓库名 / 镜像名 : 版本号,比如:liwq/hexo:1.0.0
- . :这个是最重要的,一定要写,这是个 “.” 表示当前目录,这实际上是在指定上下文的目录是当前目录,docker bulid 命令会将该目录下的内容打包交给 Docker 引擎以帮助构建镜像
当我们构建完成之后,就可以用docker images 命令查看了,之后的启动就是跟dockerhub 上面拉去的镜像一样启动就行了。
docker 镜像仓库管理
目前市面上有很多种方式来管理镜像,构建私服,我这里推荐2种比较常见的私服构建,还有一个就是dockerhub 公共的镜像仓库。
先说一下为什么要使用仓库,最简单的几点,方便保存镜像、进行版本迭代、集群部署,远程镜像仓库是最好的解决方式,可以避免很多的重复工作。
目前docker 提供出来的公共镜像仓库就是dockerhub,这上面可以找到我们几乎所有中间件的镜像,包括基础环境镜像jdk、node、Tomcat等等,甚至操作平台镜像:Ubuntu、alpine 这些都可以找到,并且有版本选择,使用文档等。
总的来说dockerhub 是一个非常强大的公共镜像仓库,同时因为什么人都可以往上传、下载镜像,所以也没有私密性,所以如果是对外的中间件之类的镜像就可以放在上面,但是自己的项目最好还是不要。
这里我们就有了另外两种私服构建的镜像仓库,registry 和Harbor,下面对于这三种不同的镜像仓库我们逐一说下。
dockerhub-强大的公共镜像仓库
dockerhub 上面也说了是docker 官方提供出来的一个公共的镜像仓库,在这里能随意拉去所有上面存在的镜像,但是上传自己的镜像的话,需要先注册一个自己的账户然后登陆再上传,同时dockerhub 上存在几乎所有常用中间件提供出的官方镜像,以及相关的使用和配置文档。
dockerhub 的中间件镜像的使用和配置,在上篇文章中我们也基本使用过mysql 和nacos,本次就只说关于dockerhub 的镜像推送还有登录注册。
dockerhub 为了区分不同用户的同名镜像,镜像的registry 中要包含用户名,完整格式为:[用户名]/镜像名:tag
,所以我们需要先修改我们本地镜像的名称。
修改镜像名称:
docker tag 原镜像名称 新镜像名称
解析:tag 就是修改镜像名称,我们以原名称为hexo 的镜像为例,docker tag hexo liwqtm/hexo:1.0.0
。
修改完镜像名称为符合dockerhub 规则的镜像名称后,就需要先登录dockerhub。
如果还没有创建过dockerhub 账户的话,需要先去创建一个,直接访问dockerhub 的网址 就行,注意有一个邮箱验证,如果没有验证的话是不能创建仓库,上传镜像的。
登录dockerhub:
docker login
登记成功就是下面这样。
登录成功之后,我们就可以上传刚刚修改好的镜像了。
上传镜像:
docker push 镜像名称
上述基本就是将本地镜像推送到dockerhub 上面的整个流程了,当推送完成之后dockerhub 上面就能看见自己上传的镜像了。
小结
dockerhub 来做镜像仓库的话,可以说是操作非常简单,但同时dockerhub 几乎没有私密性,不能上传自己的项目,还有一点就是它是外网的,所以访问登录起来会非常慢,但总的来说dockerhub 在docker 的使用中起到了非常重要的作用。
registry-搭建私服镜像仓库
docker 仓库实际上提供两方面的功能,一个是镜像管理,一个是认证。前者主要由docker-registry 项目来实现,通过http 服务来上传下载;后者可以通过docker-index(闭源)项目或者利用现成认证方案(如nginx)实现http请求管理。
docker registry 就是管理docker 镜像的服务,docker 公司维护的registry 就是上面说的dockerhub ,它可以让我们方便的下载预先做好的镜像。
我们现在要自己维护一个registry,这样来完成跟dockerhub 一样的私服镜像仓库。
拉取registry 的镜像,并启动:
docker run -d -p 8845:5000 -v /tmp/data/registry:/var/lib/registry --restart=always --name registry registry
解析:这个命令可以在dockerhub 上registry 的文档可以直接看到,我这里唯一改动点就是端口,我的服务器没有暴露5000端口,所以暂时用8845 代替就行了。
因为docker推送默认使用的https的方式,而我们的registry只支持http的方式,所以我们得修改一下配置。
这个是我们之前安装docker 的时候创建的文件,用于阿里的镜像加速,现在我们还是修改一下这个配置问题,如果没有的话就先创建再编辑。
vi /etc/docker/daemon.json
添加下面这段配置。
{ "insecure-registries": ["仓库IP:8845"] }
如法存在阿里的镜像加速代理,最后的文件内容如下,注意这里的IP 需要修改为自己服务器的IP。
{
"insecure-registries": ["IP:8845"],
"registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"]
}
然后就是执行跟之前配置阿里镜像加速时一样的命令。
systemctl daemon-reload
systemctl restart docker
然后修改我们镜像的名称。
docker tag liwqtm/hexo:1.0.0 IP:8845/hexo:1.0.0
解析:这里需要将名称修改为IP:端口,然后跟镜像的真正名字和版本
完成上面的命令之后,我们再执行docker 的上传命令push,跟上面是一样的,注意上传的版本是上面刚刚修改的就行。
这样我们就可以直接去查看http://IP:8845/v2/_catalog 这个地址就行,这个时候就会有{“repositories”:[“hexo”]} 这段显示,表示刚刚的上传已经成功了,也可以用命名查看。
curl http://IP:8845/v2/hexo/tags/list
我们使用私库的时候要注意,pull 命令拉取不下来,但是可以用run 方法拉取启动。
docker run -d -p 4000:4000 --name hexo IP:8845/hexo:1.0.0
小结
registry 的使用其实就是个人化的dockerhub,优点就是简单,配置简单、操作简单,但是缺点也明显:可视图化差、版本管理不方便。总的来说推荐个人使用,但是不推荐企业使用。
Harbor-企业级镜像仓库
Harbor 相对于上面的两种仓库来说,私密性更好,直观可视化视图也很优秀,权限配置关联,日志跟踪等功能也是非常全面,同时微服务项目yml 配置引入也非常方便,总的来说完全符合企业级镜像仓库的任何需求。
Harbor 功能强大的同时,强大的功能带来的就是体量较大,操作比较上面两种方式也会相对来说复杂一点,相关镜像也不是一个而是多个,镜像启动时,我们就不能在用单行命令来操作,而且引入一个新的概念:编排,docker 官方提供了一种单点编排方式:docker-compose 容器编排。
关于docker-compose 单点编排我们后面再详细讲解,这里我们就只需要知道它安装和使用即可。
docker-compose 安装和基本使用
下载安装最新的docker-compose 文件
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
添加可执行权限
sudo chmod +x /usr/local/bin/docker-compose
测试安装结果
docker-compose --version
docker-compose 安装完成之后,我们再讲回Harbor 的安装和使用。
harbor-基本组件
这里我们一些基础概念,harbor 的各个组件,也就是它各个容器。
组件 | 功能 |
---|---|
harbor-adminserver | 配置管理中心 |
harbor-db | 数据库 |
harbor-jobservice | 镜像复制 |
harbor-log | 日志操作 |
harbor-ui | Web管理页面和API |
nginx | 前端代理,负责前端页面和镜像上传/下载转发 |
redis | 会话 |
registry | 镜像存储 |
harbor-安装和使用
至于安装,我们可以去Harbor 官网 下载一个最新版的安装包,然后解压得到一个harbor 的文件夹,进入文件夹复制harbor.yml.tmpl 后,同级目录粘贴为harbor.yml 文件,然后修改文件内容https 的内容全部用# 号注释掉,修改hostname 为自己的ip 地址即可,不用配置端口。
简单配置完成之后,再执行./prepare
命令,这个是会创建一些文件夹,初始化一些文件,预处理命令。执行完成之后再执行./install.sh
命令,这个就是开始真正的安装过程。
当全部完成之后,我们可以去直接看docker 的容器进程,会发现有多个容器已经启动,但是暴露端口的就只有Nginx 的80 端口,这里的容器涉及到harbor 的多个组件内容,我们不用管。
docker ps -a
当我们需要将所有的容器全部停止,删除,或再次启动时,就要用到docker-compose 的内容了,因为这里要同时启动或停止多个容器。
注意:我们执行docker-compose 命令的时候,需要在docker-compose.yml 的当前目录下,比如这里的harbor 文件夹下就可以执行。
停止容器:
docker-compose stop
重启容器:
docker-compose restart
刪除容器:
docker-compose rm
解析:这里跟docker 的rm 命令不一样,不需要 -f + 容器名称 的命令,直接就是删除docker-compose.yml 中涉及的全部容器,还要注意是停止的容器,正在运行的容器不会删除,而且还有跟一个y 的确认。
启动容器:
docker-compose up -d
解析:这里跟docker 的run 命令后面接-d 是一样的效果,表示启动后台运行。还可以加-f 指定运行的文件,不加这个话,就是默认运行docker-compose.yml 文件
查看容器状态:
docker-compose ps -a
解析:这个跟docker ps -a 的效果是一样的,不同点在于这里只会查看当前docker-compose.yml 文件中涉及到的容器。
停止并删除容器:
docker-compose down
以上就是一些简单的docker-compose 操作命令,后续我们在完善讲解,现在继续说回harbor 的使用。
当我们启动了harbor 的所有容器后,我们直接可以访问:http://ip/harbor,因为我们这里暴露的是80 端口,所以直接IP 后面跟地址即可,这里在安装的时候,我们没修改用户配置,所以登录初始的账户和密码就是admin、Harbor12345。
登录进来之后,这里会有一个默认的项目,我们也可以自己创建一个项目。
同时我们也可以创建自己的用户,这个后面登录的时候,也可以用自己的账户登录,再有就是对上面创建的项目,我们可以赋予对应用户的角色。
同一个项目,不同的项目角色权限不一样,可以用于权限的管理。
这里还有各个不同的功能,日志管理、镜像拉取记录,上传记录、标签、审查之类,这个都可以自己去实操一下,这里就不详细介绍了,我们主要看镜像的上传和拉取。
这个的镜像上传还是跟dockerhub 一样的,需要先修改一下配置文件,因为之前就说过docker 默认的是https 上传,但是上面的registry 和当前的harbor 都是http 请求的,所以需要修改配置文件,才能登录上传,然后登录,然后再修改对应的镜像名称,这些操作完了之后,最后直接就push 就行了。
配置文件修改还是跟之前registry 的操作步骤是一样的,区别在于因为这里是80 端口,之前启动registry 暴露出来的端口是8845,所以我们直接将之前的端口号删掉就行,之后更新配置,重启docker 一样的步骤。
配置完成之后,我们再用login 命令登录
docker login -u admin -p Harbor12345 IP
解析:login 命令还是跟之前是一样的,-u 是对应的用户名,-p 对应的是用户密码,这里后面还接了一个IP,因为没有这个IP 的话,就是登录dockerhub 的了,接了就登录我们自己的harbor 仓库。
修改镜像名称:
docker tag liwqtm/hexo:1.0.0 IP/liwqtm/hexo:1.0.0
解析:liwqtm/hexo:1.0.0 还是原镜像名,新镜像名命令规则,在harbor 仓库里面有提示,先是仓库的IP 地址,跟你的项目名,然后才是真正的镜像名,然后版本号
最后就是push 上传:
docker push IP/liwqtm/hexo:1.0.0
以上基本就是对harbor 安装和使用的一个基本概述,它的上传和下载镜像其实和上面的两种方式的区别不是很大,主要是它的更加优美的UI 视图还有优秀的权限管理还有镜像管理等,对于另外两种方式来说,更适合企业级的管理,它甚至还提供出来镜像的下载的次数,对于一些细微的内容,它基本也有关注。
Jib-结合使用maven 构建镜像并上传
在我们企业项目开发过程中,一般不会对构建镜像的Dockerfile 内容做过多的管理,这里我们就可以结合jib 和maven 在项目构建时就将镜像打包到harbor 仓库中。
首先我们要了解什么是jib。
Jib 是Google 开发的可以直接构建Java 应用的Docker 和OCI 镜像的类库,以Maven 和Gradle 插件形式提供。
之前我们需要将自己项目构建成镜像的话,需要编辑Dockerfile 文件,然后构建spring boot 的jar 包,或者war 包 + Tomcat 的基础镜像等等,然后通过docker 的守护进程,一系列的构建才能得到最后的镜像。
但是jib 提供出来的内容就比较简单了,配置一些基础信息,比如:镜像仓库ID,镜像名和版本号,登录名和密码等等,然后再构建项目的时候就能直接构建出镜像,并上传镜像仓库。简单的体现就是项目直接到了仓库。
下面我们简单写一下相关的配置,上面已经说过harbor 的配置了,就不在重复。
首先在基础配置文件中添加一下基本信息,方便后面引入。
<properties>
<!--harbor 仓库地址-->
<docker.registry.url>IP 或者域名</docker.registry.url>
<!--harbor 的项目名称-->
<docker.registry.name>liwqtm</docker.registry.name>
<!--harbor账号-->
<docker.registry.username>liwqtm</docker.registry.username>
<!--harbor密码-->
<docker.registry.password>******</docker.registry.password>
</properties>
然后我们再配置pom 文件。
<build>
<plugins>
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<version>2.8.0</version>
<configuration>
<allowInsecureRegistries>true</allowInsecureRegistries>
<!--from节点用来设置镜像的基础镜像,相当于Docerkfile中的FROM关键字-->
<from>
<!--使用openjdk官方镜像,tag是:8-jdk-alpine,表示镜像的操作系统是alpine,装好了jdk8-->
<image>openjdk:8-jdk-alpine</image>
</from>
<to>
<!--镜像名称和tag,使用了mvn内置变量${project.version},表示当前工程的version-->
<image>${docker.registry.url}/${docker.registry.name}/${project.artifactId}:${project.version}
</image>
<tags>
<!--版本号-->
<tag>${project.version}</tag>
</tags>
<!--harbor的认证信息-->
<auth>
<username>${docker.registry.username}</username>
<password>${docker.registry.password}</password>
</auth>
</to>
<!--容器相关的属性-->
<container>
<jvmFlags>
<!--一些启动参数-->
<jvmFlag>-Djava.security.edg=file:/dev/./urandom</jvmFlag>
</jvmFlags>
<!--挂载volume的配置-->
<volumes>
<volume>/tmp</volume>
<volume>/logs</volume>
</volumes>
<ports>
<!--暴漏端口号-->
<port>8080</port>
</ports>
<!--微服务的启动类-->
<mainClass>com.liwqtm.test.Application</mainClass>
<format>OCI</format>
<!--使用该参数将镜像的创建时间与系统时间对其-->
<creationTime>USE_CURRENT_TIMESTAMP</creationTime>
</container>
</configuration>
<executions>
<!--执行打包配置-->
<execution>
<id>jib-maven-plugin</id>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- Docker maven plugin -->
</plugins>
</build>
配置完成之后,我们直接启动build 就行了,但是注意:上面的配置是适用于spring boot 项目的,因为spring boot 项目打包的时候内嵌了Tomcat 的,所以不需要额外的添加基础镜像,但是如果不是的话,需要打war 包,然后引入Tomcat。
小结
上述基本就完成了harbor 的简单使用,还有对于结合项目的基本构建使用。
总结下三个不同的镜像仓库,dockerhub 镜像繁多,文档全面,但是是公共仓库,只能用于学习和下载使用中间件,不适合上传存储企业级项目,是由docker 官方维护的registry 仓库。
registry 是个人进行维护操作的镜像仓库,也是由docker 提供出来的,私密性相对于dockerhub 更加优秀,镜像存储基本满足,缺点就是没有优秀的视图,相对来说比较简陋,适合个人学习,个人dome 的镜像存储,不适合企业级项目。
harbor 是registry 更高级的封装,不同于dockerhub 的公共性,它是和registry 一样具有私密性,视图优秀、功能强大,权限管理,日志记录一样不少,但同时相对于另外两种来说体量较大,本身组成的镜像和容器也是多个,但是实际操作并不是很复杂,学习难度一般,并且能够结合jib 能直接构建企业级项目镜像,可以说完全能胜任企业级镜像仓库。
单点编排docker-compose
上面在讲harbor 镜像仓库的时候,我们就简单说过了docker-compose 的安装和基本使用,应该也能体会到一些使用上的便捷,说通俗的一点说,docker-compose 就是通过相关配置文件逐步启动多个关联的docker 容器,同时一定程度上简化了docker 的命令。
官方一点的就是说:docker-compose 是docker 官方的开源项目,使用python 编写,实现上调用了Docker 服务的 API 进行容器管理。其官方定义为为 「定义和运行多个 Docker 容器的应用(Defining and running multi-container Docker applications)),其实就是上面所讲的功能。
其实在使用一些中间件的时候,不光是单个容器启动,很多都是多容器联合启动,比如nacos,nacos 要实现数据持久化,就需要mysql 之类的关系型数据库,所以它的容器启动时就需要先启动mysql 的容器,而且nacos 官方也就是阿里在提供的文档里面就有对于nacos 结合docker-compose 的相关内容,提出的下载包中也有相关的配置文件。
还有就是一些配置信息的存储,比如:mysql 还有Redis 之类的数据库,它们启动时就需要将持久化数据挂载到宿主机上。
之前也说过docker 容器本身是不支持数据持久化的,构建出的镜像,文件不能修改,docker 容器修改文件是通过容器启动时,构建出的容器存储存层进行临时修改和映射,容器存储层会随着容器的结束而结束,所以就需要将文件挂载到指定的宿主机目录。
docker-compose 的默认配置文件是docker-compose.yml,这个文件中就可以挂载目录,还有各种容器的启动配置信息进行标注说明,这也有利于挂载文件和容器配置信息的管理。
还有一点需要注意:docker-compose 的版本和docker 的版本是存在不兼容的情况的,所以安装的时候要不就安装最新的版本,要不就注意版本对应的关系。
我们在说回docker-compose 本身,它的yml 格式也有要求。YAML 文件格式:
- 大小写敏感,缩进表示表示层级关系
- 缩进空格数不重要,相同层级左侧对齐即可。(不允许使用 tab 缩进!)
- 由冒号分隔的键值对表示对象;一组连词线开头的行,构成一个数组;字符串默认不使用引号
我们实例看下具体的写法,除了这个也可以去看下nacos 提供出的yml。
version: '2.0'
services:
hexo:
image: liwqtm/hexo:1.0.0
container_name: hexo
hostname: hexo
restart: always
volumes:
- type: bind
source: /app/hexo/blog
target: /app
environment:
HEXO_SERVER_PORT: 4000
GIT_USER: liwqtm
GIT_EMAIL: [email protected]
ports:
- 4000:4000
解析:
- version:版本号,必填;
- services:表示多个容器,我这里就只有一个容器也可以用;
- hexo:服务对象,如果是mysql 直接写mysql 即可,自己项目也可以直接取名;
- image:指定服务的镜像名或id,如果本地不存在则去拉取,默认拉取dockerhub,也可以通过docker 配置之后拉取harbor;
- container_name:服务的名字,等同于docker 命令中的
--name
; - hostname:容器的hosts 文件名称,
exec
命令进去容器后,可以看到; - restart:restart 参数能够使我们在重启docker时,自动启动相关容器,和docker的
--restart
效果一致,always
表示在容器退出时总是重启容器,这里还有其他的四种策略,有兴趣的可以去看看,这里不多做解释; - volumes:等同于docker 命令中的
-v
,用于文件挂载,其中-type
表示挂载类型; - environment:等同于docker 命令中的
-e
,用于配置环境变量,这里还有一种写法env_file
,这种就是将多个配置写入一个文件中,然后引入文件即可; - ports:暴露端口,等同于docker 命令中的
-p
。
docker-compose 的文件配置肯定不是只有这些,但是我们要做的其实就是大致了解,能看懂,具体的编写,复杂的中间件有提供这类yml 文件,我们自己的项目或者企业级项目,这些就够用了。
我们再看下对于docker-compose 常用操作的几个命令:
部署启动compose 应用:
docker-compose up -d
停止compose 应用:
docker-compose stop
删除compose 应用:
docker-compose rm
重启compose 应用:
docker-compose restart
查看compose 应用:
docker-compose ps
停止并删除compose 应用:
docker-compose down
扩容节点或缩容节点:
docker-compose up -d --scale 容器名臣或ID=节点数
解析:节点数增大为扩容,缩小为缩容。
docker-compose 的使用就是上述的这些,主要就是docker-compose.yml 的编写要花点功夫,其余的使用命令可以说非常简单,它就是简化了docker 的一起启动命令,关联容器之前不再用一个个命令,它的yml 其余标签还有很多,这里没有每个都详细描述,有兴趣的可以自行了解。
这里其实也已经讲完了hexo + docker 的配置,就是yml 复制到/app/hexo 目录下,然后hexo 目录复制想自己之前hexo 博客,然后直接挂在,最后用docker-compose up -d
命令启动即可。
总结
关于本篇就讲这么多,主要内容就是harbor 的安装和使用,还有docker-compose 单点编排方式,至于集群编排还有k8 后面再讲,我也没有过多的服务器,而且还懒得搭虚拟机,所以后续的话,理论可能要多余实践,企业里面集群的部署,我们可能也用不到,都是运维的活。
停止并删除compose 应用:
docker-compose down
扩容节点或缩容节点:
docker-compose up -d --scale 容器名臣或ID=节点数
解析:节点数增大为扩容,缩小为缩容。
docker-compose 的使用就是上述的这些,主要就是docker-compose.yml 的编写要花点功夫,其余的使用命令可以说非常简单,它就是简化了docker 的一起启动命令,关联容器之前不再用一个个命令,它的yml 其余标签还有很多,这里没有每个都详细描述,有兴趣的可以自行了解。
这里其实也已经讲完了hexo + docker 的配置,就是yml 复制到/app/hexo 目录下,然后hexo 目录复制想自己之前hexo 博客,然后直接挂在,最后用docker-compose up -d
命令启动即可。
总结
关于本篇就讲这么多,主要内容就是harbor 的安装和使用,还有docker-compose 单点编排方式,至于集群编排还有k8 后面再讲,我也没有过多的服务器,而且还懒得搭虚拟机,所以后续的话,理论可能要多余实践,企业里面集群的部署,我们可能也用不到,都是运维的活。