Navicat Premium 8.1.12激活(Docker核心教程)

Navicat Premium 8.1.12激活(Docker核心教程)

1. 概述

官网:https://docs.docker.com/

Docker Hub 网站:https://hub.docker.com/

容器较为官方的解释:

一句话概括容器:容器就是将软件打包成标准化单,以用于开发、交付和部署。

  • 容器镜像是轻量的、可执行的独立软件包,包含软件运行所需的所有内容:代码、运行时环境、系统工具、系统库和设置。
  • 容器化软件适用于基于 Linux 和 Windows 的应用,在任何环境中都能够始终如一地运行。
  • 容器赋予了软件独立性,使其免受外在环境差异(例如,开发和预演环境的差异)的影响,从而有助于减少团队间基础设施上运行不同软件时的冲突。

容器较为通俗的解释:

如果需要通俗地描述容器的话,我觉得容器就是一个存放东西的地方,就像书包可以装各种文具、衣柜可以放各种衣服、鞋架可以放各种鞋子一样。我们现在所说得容器存放的东西可能更偏向于应用,比如网站、程序甚至是系统环境。

Navicat Premium 8.1.12激活(Docker核心教程)

2. 虚拟化技术和容器化技术

2.1 虚拟化技术

首先,Docker 容器虚拟化技术为基础的软件,那么什么事虚拟化技术呢?

简单点来说,虚拟化技术可以这样定义:

虚拟化技术是一种资源管理技术,是将计算机的各种实体资源CPU内存磁盘空间网络适配器等),予以抽象、转换后呈现出来可供分割、组合为一个或多个电脑配置环境。由此,打破实体结构间的不可切割的障碍,使用户可以比原本的配置更好的方式来应用这些电脑硬件资源。这些资源的新虚拟部分是不受现有资源的架设方式,地域或物理配置所限制。一般所指的虚拟化资源包括计算能力和数据存储。

2.2 Docker 基于 LXC 虚拟容器技术

Docker 技术是基于 LXC(Linux container-Linux 容器)虚拟容器技术的。

LXC,其名称来自 Linux 软件容器(Linux Containers)的缩写,一种操作系统层虚拟化(Operating system-level virtualization)技术,为 Linux 内核容器功能的一个用户空间接口。它将应用软件系统打包成一个软件容器(Container),内含应用软件本身的代码,以及所需要的操作系统核心和库。通过统一的名字空间和共用 API 来分配不同软件容器的可用硬件资源,创造出应用程序的独立沙箱运行环境,使得 Linux 用户可以容易地创建和管理系统或应用容器。

LXC 技术主要是借助 Linux 内核中提供的 CGroup 功能和 name space 来实现的,通过 LXC 可以为软件提供一个独立的操作系统运行环境。

cgroup 和 namespace 介绍:

  • namesapce 是 Linux 内核用来隔离内核资源的方式。通过 namespace 可以让一些进程只能看到与自己相关的一部分资源,而另外一些进程也只能看到与它们自己相关的资源,这两拨进程根本就感觉不到对方的存在。具体的实现方式是把一个或多个进程的相关资源指定在同一个 namespace 中。Linux namespaces 是对全局系统资源的一种封装隔离,使得处于不同 namespace 的进程拥有独立的全局系统资源,改变一个 namespace 中的系统资源只会影响当前 namespace 里的进程,对其他 namespace 中的进程没有影响。

(以上关于 namespace 介绍内容来自 https://www.cnblogs.com/sparkdev/p/9365405.html,更多关于 namespace 的内容可以查看这篇文章)。

  • CGroup 是 Control Groups 的缩写,是 Linux 内核提供的一种可以限制、记录、隔离进程组(process groups)所使用的物力资源(如 cpu memory i/o 等等)的机制。

 (以上关于 CGroup 介绍内容来自https://www.ibm.com/developerworks/cn/linux/1506_cgroup/index.html,更多关于 Cgroup 的内容可以查看这篇文章)

cgroup 和 namespace 两者对比:

两者都是将进程进行分组,但是两者的作用还是有本质区别。namespace 是为了隔离进程组之间的资源,而 cgroup 是为了对一组进程进行统一的资源监控和限制。

3. Docker 基本组成

Docker 中有非常重要的三个基本概念,理解了这三个概念,就理解了 Docker 的整个生命周期。

  • 镜像(Image)
  • 容器(Container)
  • 仓库(Repository)

理解了这三个概念,就理解了 Docker 的整个生命周期

Navicat Premium 8.1.12激活(Docker核心教程)

4. Docker 安装

4.1 查看系统内核和系统信息

命令:


示例:


4.2 开始安装 Docker

卸载旧版本

命令:


示例:


下载依赖安装包:


配置镜像仓库:


示例:


更行yum软件包


下载 docker


一般情况下安装 社区版

4.3 启动 Docker

命令:


示例:


4.4 Docker 的 HelloWorld

命令:


示例:


5. Docker 卸载


6. 配置阿里云镜像

进入阿里云官网,搜索容器镜像服务

Navicat Premium 8.1.12激活(Docker核心教程)

执行命令:


7. Docker 运行流程和原理

Navicat Premium 8.1.12激活(Docker核心教程)

启动流程

Navicat Premium 8.1.12激活(Docker核心教程)

运行原理

Navicat Premium 8.1.12激活(Docker核心教程)

Docker 整体架构

Navicat Premium 8.1.12激活(Docker核心教程)

 8. Docker 常用命令

命令的帮助文档地址:https://docs.docker.com/engine/reference/commandline/docker/

管理镜像常用命令

Navicat Premium 8.1.12激活(Docker核心教程)

创建容器
Navicat Premium 8.1.12激活(Docker核心教程)

容器限制

Navicat Premium 8.1.12激活(Docker核心教程)

8.1 基本命令

Navicat Premium 8.1.12激活(Docker核心教程)

Navicat Premium 8.1.12激活(Docker核心教程)

Navicat Premium 8.1.12激活(Docker核心教程)

 命令:


示例:


8.2 镜像命令

docker images 查看本地主机的所有镜像

示例:


列表参数介绍:


docker search 搜索镜像

示例:

Navicat Premium 8.1.12激活(Docker核心教程)


docker pull 镜像名[:tag] 下载镜像

示例:


docker rmi 删除镜像


8.3 容器命令

docker run [可选参数] image 运行容器

Navicat Premium 8.1.12激活(Docker核心教程)


示例:


进入容器


exit 退出容器


docker ps 列出容器


docker rm 删除容器


启动和重启容器命令


8.4 其他命令

后台启动容器


查看日志


查看容器中进程信息


查看镜像的数据


进入当前正在运行的容器

方式一:


拷贝容器文件到主机

拷贝容器的文件到主机中


常用命令小结

Navicat Premium 8.1.12激活(Docker核心教程)

Navicat Premium 8.1.12激活(Docker核心教程)

9. Docker 图形化管理工具 

9.1 Docker UI

命令:


示例:


使用:


会出现如下的界面:

Navicat Premium 8.1.12激活(Docker核心教程)

 9.2 Shipyard

镜像下载


脚本安装 shipyard


9.3 Portainer

命令:


示例:


使用:


10. 常见容器部署:Nginx、Tomcat 、es + kibana

10.1 Nginx

命令:


测试访问:

Navicat Premium 8.1.12激活(Docker核心教程)

10.2 Tomcat

命令:


测试访问:

Navicat Premium 8.1.12激活(Docker核心教程)

10.3 es + kibana

添加 ‘-e ES_JAVA_OPTS = “-Xms128m -Xmx512m” ’,配置 ElasticSearch 的虚拟机占用的内存大小。

docker stats 查看资源占用情况


10.4 端口暴露的原理

Navicat Premium 8.1.12激活(Docker核心教程)

10.5 可视化

  • portainer(先用这个)

Navicat Premium 8.1.12激活(Docker核心教程)

  • Rancher(CI/CD 再用)

11. Docker 镜像讲解

11.1 镜像是什么

Docker 镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含某个软件所需的所有内容,包括代码、库、环境变量、配置文件、运行时环境等。

所有的应用,直接打包成 Docker 镜像,然后通过镜像创建出容器,然后就可以直接跑起来。

如果得到镜像:

  • 从远程仓库下载,比如 docker hub、阿里云的镜像仓库等。
  • 朋友拷贝给你。
  • 自己制作一个镜像 DockerFile。

通过对原有的镜像创建的容器进行一些修改(也可以不修改),然后通过 Commit 命令提交一个新的镜像。

UnionFS(联合文件系统)

  • 联合文件系统(UnionFS)是一个分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下。联合文件系统是 Docker 镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
  • 特性:一次同时加载多个文件系统,但从外面看起来只能看到一个文件系统。联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录。

Docker 镜像加载原理

docker 镜像实际上是由一层层的文件系统组成,这种层级文件系统就是联合文件系统。

  • bootfs(boot file system)主要包含 BootLoader 和 kernel,BootLoader 主要负责引导加载 kernel,Linux 刚启动时会加载 bootfs 文件系统来引导内核的加载,Docker 镜像的最底层就是 bootfs。这一层与我们典型的 unix 系统是一样的,包含 boot 引导器和内核,当 boot 加载完成后整个内核就在内存中了,此时内存的使用权已经由 bootfs 转交给内核,此时系统会卸载 bootfs。
  • rootfs(root file system),包含典型 Linux 系统中的 /dev,/proc,/bin,/etc 等标准目录和文件。rootfs 就是各种不同 Unix 操作系统发行版(Ubuntu,Centos等)。因为底层直接用 Host 的 Kernel,rootfs 只包含最基本的命令,工具和程序就可以了。

我们平时安装的虚拟机 centos 镜像好几个G,Docker 安装的才 200 多M,因为对于一个精简的OS,rootfs 可以很小,只需包含最基本的命令,工具和程序库就行了,因为底层直接使用宿主机的内核,自己只需提供 tootfs(相当于操作内核的客户端)就可以,由此可见不同发行版的 bootfs 基本是一致的,rootfs 有差别,因此不同的发行版可以公有 bootfs。虚拟机是分钟级别,容器是秒级。

Navicat Premium 8.1.12激活(Docker核心教程)

第一图仅仅是 bootf + rootfs,然后如果要制作一个 emacs 环境的镜像,就在这个基础上新加一层 emacs 镜像,如图二。如果要在添加一个 Apache 环境,那就再图二基础上加一个 apache 镜像。如图三,图中的每一层镜像都能进行复用。

11.2 分层理解

分层的镜像

Navicat Premium 8.1.12激活(Docker核心教程)

比如:上面的 redis 镜像。使用 docker inspect redis 镜像的ID 命令查看镜像的信息,找到 layer 信息。

Navicat Premium 8.1.12激活(Docker核心教程)

由上图可以看到下载的 redis 镜像是由 6 个镜像一层层组成的。

Navicat Premium 8.1.12激活(Docker核心教程)

这些镜像都是一个个独立可复用的镜像,如果下载其他镜像是,某一层镜像已经存在本地了,就不用再下载,直接复用该镜像,节省空间。比如上面下载 redis 镜像时,提示某个镜像已经存在。

注意:

Docker 镜像都是只读的,用镜像创建容器启动时,实际上是在原本的镜像上新建了一层可写层到原本镜像的顶部,这一层我们叫做容器层,容器层之下的叫做镜像层。

Navicat Premium 8.1.12激活(Docker核心教程)

如上图,使用 Tomcat 镜像创建容器后,会在 Tomcat 镜像的基础上新建一个可写层,容器的写入是在可写层进行记录,然后使用 commit 命令把该容器创建一个新的镜像,实际上新的镜像是 tomcat镜像 + 可写层镜像,以 tomcat 镜像为基础。通过下面介绍使用容器构建镜像,可以更好地理解。

11.3 commit 镜像

命令:


实战测试


Navicat Premium 8.1.12激活(Docker核心教程)

12. 容器数据卷

12.1 什么是容器数据卷

为了实现数据持久化,使容器之间可以共享数据。可以将容器内的目录,挂载到宿主机上或其他容器内,实现同步和共享的操作。即使将容器删除,挂载到本地的数据卷也不会丢失。

docker 的理念回顾

将应用和环境打包成一个镜像。

数据如果都在容器中,那么我们容器一旦删除,数据就会丢失 需求:数据可以持久化

MySQL,容器删了,删库跑路 需求:MySQL数据可以存储在本地

容器之间可以有一个数据共享的技术,Docker 容器中产生的数据同步到本地

这就是卷技术,目录的挂载将我们容器内的目录挂载到 Linux 上面

容器的持久化和同步操作,容器间也是可以做数据共享的

12.2 使用数据卷

方式一:直接使用命令来挂载 -v


Navicat Premium 8.1.12激活(Docker核心教程)

测试文件的同步(在主机上改动,观察容器变化)

Navicat Premium 8.1.12激活(Docker核心教程)

 再来测试(测试通过)

        1. 停止容器

        2. 主机上修改

        3. 启动容器

        4. 容器内的数据依旧是同步的!

好处:我们以后只要在本地进行修改即可,不需要每次都进入容器内部都能实现自动同步

12.3 实战:安装MySQL

思考:MySQL 的数据持久化的问题!


Navicat Premium 8.1.12激活(Docker核心教程)

假设删除了 docker 镜像

发现,挂载到本地的数据卷依然没有丢失,这实现了容器数据持久化功能

12.4 具名和匿名挂载


所有 docker 容器内的卷,没有指定目录的情况下都是在  /var/lib/docker/volumes/xxxxx/_data

我们通过具名挂载可以方便找到我们的一个卷,大多数情况都使用具名挂载 


拓展


12.5 初识 DockerFile

Dockerfile 就是用来构建 docker 镜像的构建文件!也就是命令脚本

通过这个脚本可以生成一个镜像,镜像是一层一层的,脚本一个个的命令对应层数


部署容器

Navicat Premium 8.1.12激活(Docker核心教程)

启动自己的容器

这个卷和外部一定有一个同步的目录!

Navicat Premium 8.1.12激活(Docker核心教程)

 在目录下新建一个测试用的文件

Navicat Premium 8.1.12激活(Docker核心教程)

查看卷挂载的路径

 Navicat Premium 8.1.12激活(Docker核心教程)

 测试一下刚才的文件是否同步到主机上了

Navicat Premium 8.1.12激活(Docker核心教程)

成功。

这种方式我们未来使用的十分多,因为我们通常会构建自己的镜像!

假设构建镜像的时候没有挂载卷,要手动镜像挂载 -v 卷名:容器内路径!

12.6 数据卷容器 

多个 mysql 同步数据!

Navicat Premium 8.1.12激活(Docker核心教程)


Navicat Premium 8.1.12激活(Docker核心教程)

CTRL + p + q 退出当前的 docker01,通过 docker01 挂载 docker02

Navicat Premium 8.1.12激活(Docker核心教程)

同理创建一个 docker03,在数据卷上新建的文件也会在其他容器上同步


多个 mysql 实现数据共享


结论

容器之间配置信息的传递,数据卷的声明周期一直持续到没有容器使用为止。

但是一旦持久化到了本地,这个时候,本地的数据是不会被删除的。

13. DockerFile

13.1 DockerFile 介绍

Dockerfile 是用来构建 docker 镜像的文件,命令参数脚本

构建步骤:

        1. 构建一个 dockerfile 文件

        2. docker build 构建成为一个镜像

        3. docker run 运行镜像

        4. docker push 发布镜像(DockerHub、阿里云镜像仓库)

查看一下官方是怎么做的

Navicat Premium 8.1.12激活(Docker核心教程)

 Navicat Premium 8.1.12激活(Docker核心教程)

很多官方镜像都是基础包,我们通常会自己搭建自己的镜像。

官方既然可以制作镜像,那我们也可以自己构建。

13.2 DockerFile 构建过程

基础知识:

        1. 每个保留关键字(指令)都必须是大写字母

        2. 执行顺序从上到下

        3. # 标识注释

        4. 每一个指令都会创建提交一个新的镜像层,并提交!

Docker 镜像原理

Navicat Premium 8.1.12激活(Docker核心教程)

Navicat Premium 8.1.12激活(Docker核心教程)

Dockerfile 概念及作用

Navicat Premium 8.1.12激活(Docker核心教程)

Dockerfile 关键字

关键字作用备注FROM指定父镜像指定 dockerfile 基于哪个 image 构建MAINTAINER作者信息用来标明这个 dockerfile 谁写的LABEL标签用来标明 dockerfile 的标签可以使用 Label 代替 Maintainer 最终都是在 docker image 基本信息中可以查看RUN执行命令执行一段命令 默认是 /bin/sh 格式:RUN command 或者 RUN [ “command”, “paraml”, “param2”]CMD容器启动命令提供启动容器时候的默认命令 和 ENTRYPOINT 配合使用,格式 CMD command param1 param2 或者 CMD [ “command”, “param1”, “param2”]ENTRYPOINT入口一般在制作一些执行就关闭的容器中会使用COPY复制文件build 的时候复制文件到 image 中ADD添加文件build 的时候添加文件到 image 中不仅仅局限于当前 build 上下文 可以来源于远程服务ENV环境变量指定 build 时候的环境变量 可以在启动的容器的时候 通过 -e 覆盖格式 ENV name = valueARG构建参数构建参数 只在构建的时候使用的参数 如果有 ENV,那么 ENV 的相同名字的值始终覆盖 arg 的参数VOLUME定义外部可以挂载的数据卷指定 build 的 image 那么目录可以启动的时候挂载到文件系统中 启动容器的时候使用 -v 绑定 格式 VOLUME [“目录”]EXPOSE暴露端口

定义容器运行的时候监听的端口,启动容器的时候 -p 来绑定暴露端口,格式:EXPOSE 8080 或者 EXPOSE 8080/udp

WORKDIR工作目录指定容器内部的工作目录,如果没有创建则自动创建,如果指定 / 使用的是绝对地址,如果不是 / 开头,那么是在上一条 workdir 的路径的相对路径USER指定执行用户指定 build 或者启动的时候,用户 RUN CMD ENTRYPOINT 执行的时候的用户HEALTHCHECK健康检查当存在 ONBUILD 关键字的镜像作为基础镜像的时候,当执行 FROM 完成之后,会执行 ONBUILD 的命令,但是不影响当前镜像,用处也不怎么大STOPSIGNAL发送信号量到宿主机该 STOPSIGNAL 指令设置将发送到容器的系统调用信号已退出。SHELL指定执行脚本的 shell指定 RUN CMD ENTRYPOINT 执行命令的使用,使用的shell

Dockerfile 案例

Navicat Premium 8.1.12激活(Docker核心教程)

dockerfile 是面向开发的,我们以后要发布项目,做镜像,就需要编写 dockerfile 文件,这个文件十分简单。

步骤:开发、部署、上线运维

Dockerfile:构建文件,定义了一切的步骤,源代码

Dockerimage:通过 Dockerfile 构建生成的镜像,最终发布和运行的产品

Docker 容器:镜像运行起来提供服务 

13.3 DockerFile 指令

以前的时候我们是使用别人的,现在我们尝试用 dockerfile 构建一个自己的镜像


Navicat Premium 8.1.12激活(Docker核心教程)

13.4 实战测试

DockerHub 中 99% 的镜像都是从基础镜像过来的 FROM scratch,然后配置需要的软件和配置来进行构建

Navicat Premium 8.1.12激活(Docker核心教程)

 创建一个自己的 centos


对比之前原生的 centos:增加之后的镜像默认进入了工作目录,且可以使用 vim

Navicat Premium 8.1.12激活(Docker核心教程)

我们可以列出本地进行的变更历史

Navicat Premium 8.1.12激活(Docker核心教程)

我们平时拿到一个镜像,可以研究一下它是如何构建的了。

CMD 和 ENTRYPOINT 区别

CMD            #指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT    #指定这个容器启动的时候要运行的命令,可以追加命令
12

测试 CMD


测试 ENTRYPOINT


DockerFile 中很多命令都十分相似,我们需要了解他们的区别,最好的学习方式就是测试并对比效果

13.5 实战:Tomcat 镜像

1. 准备镜像文件 tomcat 压缩包

Navicat Premium 8.1.12激活(Docker核心教程)

1. 编写 dockerfile 文件,官方命令 Dockerfile,build 会自动寻找这个文件,就不需要 -f 进行指定了


1. 构建镜像


2. 启动镜像


3. 访问测试


访问网站

Navicat Premium 8.1.12激活(Docker核心教程)

 1. 发布项目(由于做了卷挂载,我们直接在本地编写项目就可以发布了)

在 tomcat 的 test 文件夹下建立文件夹 WEB-INF,在其中创建 web.xml


在 test 文件夹下创建 index.jsp


发现:项目部署成功,可以正常访问页面  http://IP地址:9090/test/

Navicat Premium 8.1.12激活(Docker核心教程)

13.6 发布自己的镜像

DockerHub

1. 地址 https://hub.docker.com/ 注册自己的账号

2. 确定这个账号可以登录

3. 在我们的服务器上提交自己的镜像


1. 登录完毕后就可以提交镜像了 docker push


5. 提交镜像


提交的时候也是按照镜像层级来进行提交的

阿里云镜像服务

        1. 登录阿里云

        2. 找到容器镜像服务

        3. 创建命令空间

        4. 创建容器镜像

        5. 浏览阿里云

Navicat Premium 8.1.12激活(Docker核心教程)

小结: Navicat Premium 8.1.12激活(Docker核心教程)

14. Docker 网络

14.1 理解 Docker0

清空所有环境


Navicat Premium 8.1.12激活(Docker核心教程)

Navicat Premium 8.1.12激活(Docker核心教程)

 三个网络

#问题: docker是如何处理容器网络访问的?

Navicat Premium 8.1.12激活(Docker核心教程)

 Docker 在官网下载 Tomcat 镜像里面没有 ip addr 等命令解决


解决方案:

        1. 进入上面你利用 Tomcat 镜像运行的容器。


        2. 执行下面两个命令


        3. 成功


原理:

1. 我们每启动一个 docker 容器,docker 就会给 docker 容器分配一个 id,我们只要安装了 docker,就会有一个网卡 docker0

桥接模式,使用的技术是 veth-pair 技术

再次测试 ip addr

Navicat Premium 8.1.12激活(Docker核心教程)

1. 再启动一个容器测试,发现又多了一对网卡

Navicat Premium 8.1.12激活(Docker核心教程)


1. 我们来测试下 tomcat01 和 tomcat02 是否可以ping通

Navicat Premium 8.1.12激活(Docker核心教程)


绘制一个网络模型图

Navicat Premium 8.1.12激活(Docker核心教程)

结论:tomcat01 和 tomcat02 是共用的一个路由器,docker0.

 所有的容器不指定网络的情况下,都是 docker0 路由的,docker 会给我们的容器分配一个默认的可用 IP

小结:

docker 使用的是 Linux 的桥接,宿主机中是一个 docker 容器的网桥 docker0

Navicat Premium 8.1.12激活(Docker核心教程)

docker 中所有网络接口都是虚拟的,虚拟的转发效率高!(内网传递文件)

只要容器删除,对应网桥一定就没了!

14.2 -link

思考一个场景,我们编写一个微服务,database url = ip:,项目不重启,数据库 ip 换掉了,我们希望可以处理这个问题,可以用名字来访问容器?


Navicat Premium 8.1.12激活(Docker核心教程)

其实这个 tomcat03 就是在本地配置了 tomcat02 的配置


本质探究:-link 就是我们在 hosts 配置中增加了一个 tomcat02 56140c84bab0

我们现在玩 Docker 已经不建议使用 -link了!

自定义网络!不使用 Docker0!

Docker0 的问题:它不支持容器名链接访问!

14.3 自定义网络

查看所有的 docker 网络


网络模式

bridge:桥接模式,桥接 docker 默认,自己创建的也是用 bridge 模式

none:不配置网络

host:和宿主机共享网络

container:容器网络连通!(用的少,局限很大)

测试:


我们自己的网络就创建好了

Navicat Premium 8.1.12激活(Docker核心教程)

 在自己创建的网络里面启动两个容器


我们自定义的网络 docker 都已经帮我们维护好了对应的关系,推荐我们平时这样使用网络

好处:

redis – 不同的集群使用不同的网络,保证集群时安全和健康的

mysql – 不同的集群使用不同的网络,保证集群时安全和健康的

14.4 网络连通

测试打通 tomcat01 和 mynet

Navicat Premium 8.1.12激活(Docker核心教程)


14.5 实战 部署 Redis 集群

Navicat Premium 8.1.12激活(Docker核心教程)

Navicat Premium 8.1.12激活(Docker核心教程)


docker 搭建 redis 集群完成!

Navicat Premium 8.1.12激活(Docker核心教程)

14.6 SpringBoot 微服务打包 Docker 镜像

  1.  构建 springboot 项目
  2.  打包应用

  1. 编写 Dockerfile
  2. 构建镜像
  3. 发布运行

Navicat Premium 8.1.12激活

今天的文章
Navicat Premium 8.1.12激活(Docker核心教程)分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/119103.html

(0)
编程小号编程小号
上一篇 2024-07-11 22:11
下一篇 2024-06-19 20:17

相关推荐