Docker-仓库管理和编排方式

讲完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

登记成功就是下面这样。

image-20230406140756044

登录成功之后,我们就可以上传刚刚修改好的镜像了。

上传镜像:

docker push 镜像名称

上述基本就是将本地镜像推送到dockerhub 上面的整个流程了,当推送完成之后dockerhub 上面就能看见自己上传的镜像了。

image-20230406141415332

小结

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 地址即可,不用配置端口。

image-20230407143539002

简单配置完成之后,再执行./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。

登录进来之后,这里会有一个默认的项目,我们也可以自己创建一个项目。

image-20230407164136510

同时我们也可以创建自己的用户,这个后面登录的时候,也可以用自己的账户登录,再有就是对上面创建的项目,我们可以赋予对应用户的角色。

image-20230407164443060

同一个项目,不同的项目角色权限不一样,可以用于权限的管理。

image-20230407164628395

这里还有各个不同的功能,日志管理、镜像拉取记录,上传记录、标签、审查之类,这个都可以自己去实操一下,这里就不详细介绍了,我们主要看镜像的上传和拉取。

这个的镜像上传还是跟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 地址,跟你的项目名,然后才是真正的镜像名,然后版本号

image-20230407174647903

最后就是push 上传:

docker push IP/liwqtm/hexo:1.0.0

以上基本就是对harbor 安装和使用的一个基本概述,它的上传和下载镜像其实和上面的两种方式的区别不是很大,主要是它的更加优美的UI 视图还有优秀的权限管理还有镜像管理等,对于另外两种方式来说,更适合企业级的管理,它甚至还提供出来镜像的下载的次数,对于一些细微的内容,它基本也有关注。

image-20230407174957449

Jib-结合使用maven 构建镜像并上传

在我们企业项目开发过程中,一般不会对构建镜像的Dockerfile 内容做过多的管理,这里我们就可以结合jib 和maven 在项目构建时就将镜像打包到harbor 仓库中。

首先我们要了解什么是jib。

Jib 是Google 开发的可以直接构建Java 应用的Docker 和OCI 镜像的类库,以Maven 和Gradle 插件形式提供。

之前我们需要将自己项目构建成镜像的话,需要编辑Dockerfile 文件,然后构建spring boot 的jar 包,或者war 包 + Tomcat 的基础镜像等等,然后通过docker 的守护进程,一系列的构建才能得到最后的镜像。

image-20230410103032825

但是jib 提供出来的内容就比较简单了,配置一些基础信息,比如:镜像仓库ID,镜像名和版本号,登录名和密码等等,然后再构建项目的时候就能直接构建出镜像,并上传镜像仓库。简单的体现就是项目直接到了仓库。

image-20230410103227754

下面我们简单写一下相关的配置,上面已经说过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 文件格式:

  1. 大小写敏感,缩进表示表示层级关系
  2. 缩进空格数不重要,相同层级左侧对齐即可。(不允许使用 tab 缩进!)
  3. 由冒号分隔的键值对表示对象;一组连词线开头的行,构成一个数组;字符串默认不使用引号

我们实例看下具体的写法,除了这个也可以去看下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

解析:

  1. version:版本号,必填;
  2. services:表示多个容器,我这里就只有一个容器也可以用;
  3. hexo:服务对象,如果是mysql 直接写mysql 即可,自己项目也可以直接取名;
  4. image:指定服务的镜像名或id,如果本地不存在则去拉取,默认拉取dockerhub,也可以通过docker 配置之后拉取harbor;
  5. container_name:服务的名字,等同于docker 命令中的--name
  6. hostname:容器的hosts 文件名称,exec 命令进去容器后,可以看到;
  7. restart:restart 参数能够使我们在重启docker时,自动启动相关容器,和docker的--restart 效果一致,always 表示在容器退出时总是重启容器,这里还有其他的四种策略,有兴趣的可以去看看,这里不多做解释;
  8. volumes:等同于docker 命令中的-v,用于文件挂载,其中-type 表示挂载类型;
  9. environment:等同于docker 命令中的-e,用于配置环境变量,这里还有一种写法env_file,这种就是将多个配置写入一个文件中,然后引入文件即可;
  10. 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 后面再讲,我也没有过多的服务器,而且还懒得搭虚拟机,所以后续的话,理论可能要多余实践,企业里面集群的部署,我们可能也用不到,都是运维的活。

猜你喜欢

转载自blog.csdn.net/qq_39339965/article/details/130065358