为什么会出现Docker?
场景:
您使用的是一台笔记本电脑而且您的开发环境具有特定的配置。其他开发人员身处的环境配置也各有不同。您正在开发的应用依赖于您当前的配置且还要依赖于某些配置文件。此外,您的企业还拥有标准化的测试和生产环境,且具有自身的配置和一系列支持文件。您希望尽可能多在本地模拟这些环境而不产生重新创建服务器环境的开销。请问?您要如何确保应用能够在这些环境中运行和通过质量检测?并且在部署过程中不出现令人头疼的版本、配置问题,也无需重新编写代码和进行故障修复?
总结:就是你开发的环境和运行环境不一定相同,可能会导致各种各样的版本兼容问题。
解决:
答案就是使用容器。Docker之所以发展如此迅速,也是因为它对此给出了一个标准化的解决方案-----系统平滑移植,容器虚拟化技术。 环境配置相当麻烦,换一台机器,就要重来一次,费力费时。很多人想到,能不能从根本上解决问题,软件可以带环境安装?也就是说,安装的时候,把原始环境一模一样地复制过来。开发人员利用 Docker 可以消除协作编码时“在我的机器上可正常工作”的问题。
Docker的出现使得Docker得以打破过去「程序即应用」的观念。透过镜像(images)将作业系统核心除外,运作应用程式所需要的系统环境,由下而上打包,达到应用程式跨平台间的无缝接轨运作。
总结:就是使用Docker将你的环境使用的配置全部打包镜像(image)带走,这样就不会出现环境迁移版本配置不一致等问题了。就像是搬到新小区你会对周围环境不熟悉,最简单的办法就是直接在你要去的地方直接复制一个一摸一样的小区和人物等,这样你就不会感觉到陌生了。
什么是Docker
解决了运行环境和配置问题的软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术。
Docker能干吗?
方便了开发/运维/测试的环境部署等工作,实现一次构建,随处运行。
Docker官网
Docker官网
Docker Hub仓库官网
使用说明
Docker 安装前提条件目前,CentOS 仅发行版本中的内核支持 Docker。Docker 运行在CentOS 7 (64-bit)上,要求系统为64位、Linux系统内核版本为 3.8以上。
安装步骤
Docker 官网安装教程笔记使用CentOS系统
- 安装 yum-utils(配置远程仓库小工具)
- 配置远程仓库
使用自己的镜像地址,使用官网镜像地址会超时
1-2对应官网教程
- 更新一下yum包索引(官网没有建议执行)
作用:将软件包信息提前在本地索引缓存,用来提高搜索安装软件的速度,建议执行这个命令可以提升yum安装的速度。
- 安装docker引擎
安装最新版官网教程
- 启动docker
- 检查docker
ok!安装成功啦!
- 进入 hello word环节
创建hello-word容器,本地没有hello-word镜像 会自动去仓库拉取
docker镜像加速
- 登陆阿里云开发者账户
阿里云
- 选择容器镜像服务
- 控制台->左上角的三横-> 容器镜像服务
- 选择镜像工具->镜像加速器
注意自己的操作系统
- 复制代码执行就可以了
就配置好了!!!
Docker卸载
刚装好就要卸载,苦瓜脸,叹气~
看官网教程
- 停止docker(官网上没写)
- 移除Docker
- 移除残留
删除完毕!残留也清理了,完成!我在给下回来,继续做笔记(这怎么没有表情包啊!岂可休!)
docker启动相关命令
这就不做截图了,没有意义
- 启动docker
- 停止docker
- 重启docker
- 查看dcker状态
- 开机启动docker
- 查看docker帮助文档(好东西)
- 查看docker具体命令语法(也是好东西)
给出的提示
[OPTIONS] :可选项,就是下面给了好多的啥的在分支下面,后也有作用解释,自行百度就可以了后面我们也会接触到
IMAGE :镜像名或镜像ID
[COMMAND]:指定了在容器内执行的命令
当运行一个容器时,docker会执行容器内指定的ENTRYPOINT或CMD指令。如果在docker run命令中也指定了COMMAND,那么COMMAND会覆盖容器内的ENTRYPOINT或CMD指令来执行。
- 一个镜像的Dockerfile中指定了ENTRYPOINT [“top”]
- 那么运行这个镜像时:
- docker run 镜像ID,top命令会执行
- docker run 镜像ID,ps命令,那么ps命令会覆盖top,执行ps命令
这个会在学完dockerFile之后了解
[ARG…]:参数表示要传入容器内的命令参数。
ARG参数会将参数传给容器内部指定的ENTRYPOINT或CMD命令。
例如:
如果一个镜像的Dockerfile中定义了:
ENTRYPOINT [“myapp”, “arg1”, “arg2”]
那么运行这个镜像时:
- docker run 镜像名,参数1 参数2
这时参数1和参数2会作为ARG传给ENTRYPOINT指定的myapp命令,myapp命令会接收到参数1和参数2作为参数。
这个也会在学完dockerFile之后了解
docker常用命令
- docker info: 用于查看Docker的系统信息,包括镜像和容器的数量。
示例:
- docker images: 用于查看本地主机上的所有Docker镜像。
options:说明 :显示所有镜像 :只显示镜像id
当然也可以一起使用
示例:
- docker search: 用于在Docker Hub或私有仓库中搜索镜像。
options:说明这个和mysql中的limit一样 只显示n个镜像
示例:
- docker pull: 用于拉取Docker镜像。
示例:
- docker rm: 用于删除Docker镜像。
示例:
- docker rmi: 用于删除未使用的Docker镜像。
示例:
- docker rmi -f: 用于强制删除Docker镜像。
示例:
- docker run: 用于在Docker容器中运行应用程序或命令。
在本地没有检索到镜像时会自动去docker 仓库拉取
示例:
其中 是mysql中的内部命令,是的简写设置参数使用。
:是和的简写指的是后台守护式运行和端口映射
:是定义容器名字
最后的mysql是运行的镜像名
- docker exec: 用于在运行的Docker容器中执行命令。
示例:
- docker stop: 用于停止正在运行的Docker容器。
示例:
- docker start nginx :启动容器。
示例:
- docker rm: 用于删除已停止的Docker容器。
示例:
- docker kill: 用于强制停止正在运行的Docker容器。
示例:
- docker logs: 用于查看正在运行的Docker容器的日志。
示例:
- docker commit: 用于将正在运行的Docker容器保存为新的镜像。
示例:
- docker ps: 用于查看正在运行的Docker容器的列表。
示例:
- docker top: 用于查看正在运行的Docker容器的进程列表。
示例:
- docker exec -it: 用于在指定的Docker容器中运行命令。
示例:
- docker exec -it -u : 用于在指定的Docker容器中以特定用户身份运行命令。
示例:
看完上面的这些命令应该可以对 docker 进行基础使用了,在文件最后会添加所有的 docker help 的翻译。
知识补充
docker镜像是什么?
镜像是一种轻量级、可执行的独立软件包,它包含运行某个软件所需的所有内容,我们把应用程序和配置依赖打包好形成一个可交付的运行环境(包括代码、运行时需要的库、环境变量和配置文件等),这个打包好的运行环境就是image镜像文件。 只有通过这个镜像文件才能生成Docker容器实例(类似Java中new出来一个对象)。
docker虚悬镜像是什么?
仓库名、标签都是的镜像,俗称虚悬镜像dangling image
UnionFS(联合文件系统)?
(网图,反正就是一层一层的这个样子,上层可以继承下层所用功能)
以我们的pull为例,在下载的过程中我们可以看到docker的镜像好像是在一层一层的在下载
UnionFS(联合文件系统):Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem)。Union 文件系统是 Docker 镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。 特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录
镜像分层最大的一个好处就是共享资源,方便复制迁移,就是为了复用。 比如说有多个镜像都从相同的 base 镜像构建而来,那么 Docker Host 只需在磁盘上保存一份 base 镜像;同时内存中也只需加载一份 base 镜像,就可以为所有容器服务了。而且镜像的每一层都可以被共享。
重点:
Docker镜像层都是只读的,容器层是可写的
当容器启动时,一个新的可写层被加载到镜像的顶部。
这一层通常被称作“容器层”,“容器层”之下的都叫“镜像层”。
当容器启动时,一个新的可写层被加载到镜像的顶部。这一层通常被称作“容器层”,“容器层”之下的都叫“镜像层”。所有对容器的改动 - 无论添加、删除、还是修改文件都只会发生在容器层中。只有容器层是可写的,容器层下面的所有镜像层都是只读的。
Docker加载原理
以Docker 安装 Linux 系统为例子. Docker镜像加载原理: docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统UnionFS。bootfs(boot file system)主要包含bootloader和kernel, bootloader主要是引导加载kernel, Linux刚启动时会加载bootfs文件系统,在Docker镜像的最底层是引导文件系统bootfs。这一层与我们典型的Linux/Unix系统是一样的,包含boot加载器和内核。当boot加载完成之后整个内核就都在内存中了,此时内存的使用权已由bootfs转交给内核,此时系统也会卸载bootfs。 rootfs (root file system) ,在bootfs之上。包含的就是典型 Linux 系统中的 /dev, /proc, /bin, /etc 等标准目录和文件。rootfs就是各种不同的操作系统发行版,比如Ubuntu,Centos等等 。 平时我们安装进虚拟机的CentOS都是好几个G,为什么docker这里才200M??对于一个精简的OS,rootfs可以很小,只需要包括最基本的命令、工具和程序库就可以了,因为底层直接用Host的kernel,自己只需要提供 rootfs 就行了。由此可见对于不同的linux发行版, bootfs基本是一致的, rootfs会有差别, 因此不同的发行版可以公用bootfs。
- bootloader: 引导加载程序,它是计算机系统启动的第一个程序。bootloader的主要任务是加载并启动操作系统的内核程序。它读取内核映像文件,将内核加载到内存中并转交控制权给内核,使系统能够继续启动。负责启动内核,它是系统启动的第一阶段
- kernel: 操作系统内核,它是操作系统的核心。内核负责管理和调度系统的资源,例如处理器、内存、设备等。内核还提供抽象层,管理进程和线程的调度,管理文件系统和网络连接等。内核是操作系统的核心,负责管理系统资源和进程,可以看作是系统启动的第二阶段。
- bootfs:引导文件系统,它包含在引导加载程序(bootloader)中,通常很小,只包含启动所必需的最小文件,例如内核映像等。
- rootfs:根文件系统,也称为根分区。它包含操作系统所有其他需要的文件,例如系统命令、库文件、设备节点等。
- 位置:bootfs存储在boot分区中,rootfs存储在根分区中。
- 作用:bootfs仅用于引导,加载内核并切换到rootfs。rootfs包含完整的操作系统文件系统结构。
就是能不要的都不要了,就要最基础的一个linux系统,你需要什么就自己装.
为什么Docker镜像要分层呢?
镜像分层最大的一个好处就是共享资源,方便复制迁移,就是为了复用。 比如说有多个镜像都从相同的 base 镜像构建而来,那么 Docker Host 只需在磁盘上保存一份 base 镜像;同时内存中也只需加载一份 base 镜像,就可以为所有容器服务了。而且镜像的每一层都可以被共享。
镜像拉取咱就不多说了哈,上面的基础使用中的,镜像搜索,拉取啥的都有.咱就直接从镜像的制作开始.
镜像制作commit
介绍一下为什么要制作镜像,首先比如基础镜像 Linux 在拉取下来之后他只有基础功能,vim等操作都不可以.这个时候我们就要自己去安装需要的插件,但是当换台机器的时候我们还要去重复操作,这样就不是很灵活,也失去 Docker 的最大作用和意义.
在我们配置完需要的操作之后我们就可以将那个容器制作成镜像,导出放到其他地方使用.这样就实现了,不搬家,直接建造一个小区的效果.把之前配置的环境等都复制过去.
语法
注意:镜像名称中不可以有大写字符,在我下面的操作中就展示了是用大写字符后,Docker 会给出提示必须时小写字符.
镜像导出
语法
案例中是将镜像id为[bf492359edee]的存储到home路径下名称为 custom_mysql:1.0.0.tar
镜像导入
语法
在上途中共有四步操作:
- 从本地导入镜像:导入之前准备好的镜像包
- 查看导入镜像:导入之后我们会发现导入的镜像是一个虚悬镜像,我们要修改他的标签
- 镜像标签修改
- 查看镜像标签
修改标签
上传到阿里云
这个就算了吧,和 GitHub 差不多,主要是大陆的比较慢,主要是我懒得去注册 DockerHub.
本章结束!!!
上传到本地仓库
-
安装运行registry
–privileged=true在 docker run 命令中表示给容器提供所有Linux内核权限。
具体来说:
- 普通容器运行时,它不具备访问宿主机的设备和资源的能力,这保证了容器的安全隔离性。
- 但是有些容器需要访问宿主机的设备,如访问GPU、磁盘等,这时需要使用–privileged=true。
- 当给容器添加**–privileged=true**参数后,它将拥有所有的Linux内核能力,可以访问宿主机的任何设备和资源。
- 这意味着这个容器具有“超级用户”的权限,它可以执行任何命令,包括格式化磁盘等危险操作。
所以使用**–privileged**需要谨慎,主要应用于:
- 容器需要访问宿主机的GPU/磁盘等设备
- 容器需要管理宿主机的网络(如Docker in Docker)
- 容器需要测试需要root权限的应用
一般不建议给普通应用容器添加**–privileged**,因为它破坏了容器的安全隔离设计。只在必要时使用,同时要加强对容器的监控和访问控制。
总之**–privileged=true**表示给容器提供所有Linux内核级别的访问权限,这将严重影响容器的安全性,需要谨慎使用。
其他参数就不介绍了啊
-
查看是否连接正常
可以看到上面是空的没有任何镜像数据!!
-
修改配置文件支持http协议
docker 私服库默认不支持http请求,我们需要修改配置取消限制
修改文件etc/docker/daemon.json
之前在配置镜像加速的时候创建的文件
修改前
修改后
将我们的地址添加进去
如果改了之后不生效重启动一下!!
-
修改镜像命名规范
按照规范命名仓库地址/镜像名:镜像标签
将改为
-
推送代码
docker push 镜像名称:镜像id
完成之后就好了,检验一下
- 移除本地镜像
- 查看是否删除
- 拉取远程仓库的镜像
- 检查是否拉取下来
什么是容器数据卷?
容器数据卷(Container Data Volumes)是一种用于在容器化环境中持久性存储和共享数据的机制。容器数据卷允许容器之间或容器与宿主机之间共享和存储数据,而不受容器的生命周期限制。这些数据卷通常用于在容器之间传递配置文件、日志、数据库文件、应用程序代码等。
以下是容器数据卷的一些关键特点和用途:
-
持久性存储:容器数据卷在容器的生命周期内是持久性的,即使容器停止或被删除,数据仍然保留在数据卷中。
-
共享数据:多个容器可以共享同一个数据卷,这使得容器之间可以轻松共享数据,例如共享配置信息或共享一个共享的数据库。
-
数据隔离:容器数据卷可以用于将容器的数据与宿主机分开,提供了额外的隔离性,保护数据免受容器本身的影响。
-
挂载点:容器可以将数据卷挂载到其文件系统中的指定位置,使容器内的应用程序能够访问数据卷中的数据。
-
备份和恢复:容器数据卷可以用于进行数据备份,以便在需要时恢复数据。
-
容器迁移:容器数据卷使容器在不同主机上迁移变得更加容易,因为数据可以在容器之间共享而不必复制。
总结:简单来说就是将容器运行时的数据实时映射到宿主机的指定位置,当容器迁移或是删除的时候能够保证数据在宿主记得备份.
作用
将运用与运行的环境打包镜像,run后形成容器实例运行 ,但是我们对数据的要求希望是持久化的 Docker容器产生的数据,如果不备份,那么当容器实例删除后,容器内的数据自然也就没有了。为了能保存数据在docker中我们使用卷。
特点:
- 数据卷可在容器之间共享或重用数据
- 卷中的更改可以直接实时生效
- 数据卷中的更改不会包含在镜像的更新中
- 数据卷的生命周期一直持续到没有容器使用它为止
使用
1 docker修改,主机同步获得 2 主机修改,docker同步获得3 docker容器stop,主机修改,docker容器重启看数据是否同步。
指令公式
补充
修改读写规则
默认读写规则是读写:rw
容器数据卷的读写规则通常指的是容器内部对数据卷的读写权限,而不是宿主机的读写规则。这些规则决定了容器内的应用程序是否能够读取和写入容器数据卷中的内容。
–privileged=true
Docker挂载主机目录访问如果出现cannot open directory .: Permission denied解决办法:在挂载目录后多加一个–privileged=true参数即可 如果是CentOS7安全模块会比之前系统版本加强,不安全的会先禁止,所以目录挂载的情况被默认为不安全的行为,在SELinux里面挂载目录被禁止掉了额,如果要开启,我们一般使用–privileged=true命令,扩大容器的权限解决挂载目录没有权限的问题,也即使用该参数,container内的root拥有真正的root权限,否则,container内的root只是外部的一个普通用户权限。
示例
创建成功!
查看挂载状态
指令公式
卷的继承和共享
挂在到卷到容器二(效果和java的继承差不多)
- 我们在之前的数据库添加上数据
- 创建新的数据库继承他的数据卷
- 连接上新的数据库查看我们的数据是否存在
容器启动失败!!!,暂时搁浅
mysql主从复制
- 启动容器挂载数据卷
- 配置cnf文件
在mysql的配置文件的映射文件夹下添加my.cnf配置文件内容如下:
- 重启
- 进入容器查看是否可以使用数据库,并创建同步用户
- 新建mysql从服务器
- 配置从cnf文件
- 重启丛mysql
- 前往主mysql查看主从同步状态
- 在从数据库配置主从复制
:主数据库的IP地址;
:主数据库的运行端口;
:在主数据库创建的用于同步数据的用户账号;
:在主数据库创建的用于同步数据的用户密码;
:指定从数据库要复制数据的日志文件,通过查看主数据的状态,获取File参数;
:指定从数据库从哪个位置开始复制数据,通过查看主数据的状态,获取Position参数;
:连接失败重试的时间间隔,单位为秒。
- 从数据库查看并设置主从同步状态
- 查看
:以键值对的形式展示
- 设置启用
- 测试状况
Dockerfile 官网文档
Dockerfile是用来构建Docker镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本。
从应用软件的角度来看,Dockerfile、Docker镜像与Docker容器分别代表软件的三个不同阶段,
Dockerfile是软件的原材料,Docker镜像是软件的交付品 ,Docker容器则可以认为是软件镜像的运行态,也即依照镜像运行的容器实例Dockerfile面向开发,Docker镜像成为交付标准,Docker容器则涉及部署与运维,三者缺一不可,合力充当Docker体系的基石。1 Dockerfile,需要定义一个Dockerfile,Dockerfile定义了进程需要的一切东西。Dockerfile涉及的内容包括执行代码或者是文件、环境变量、依赖包、运行时环境、动态链接库、操作系统的发行版、服务进程和内核进程(当应用进程需要和系统服务和内核进程打交道,这时需要考虑如何设计namespace的权限控制)等等; 2 Docker镜像,在用Dockerfile定义一个文件之后,docker build时会产生一个Docker镜像,当运行 Docker镜像时会真正开始提供服务; 3 Docker容器,容器是直接提供服务的。
基础知识
- 每条保留字指令都必须为大写字母且后面要跟随至少一个参数(就是保留字作用和java中的关键字一样)
- 指令按照从上到下顺序执行
- 表示注释
- 每条指令都会创建一个新的镜像层并进行提交
- docker从基础镜像运行一个容器(就是基础镜像)
- 执行一条指令并对容器进行修改(之前说的联合文件系统)
- 执行类似docker commit的操作提交一个新的镜像
- docker 在基于刚提交的镜像运行一个新容器
- 执行dockerfile中的吓一跳指令直到所有指令都执行完毕
当编写Dockerfile时,常用的指令可以整理成如下的表格,包括指令、作用、示例和解释:
其中有两种语法格式分别是和
在编写Dockerfile时,可以根据需要选择合适的格式。如果需要使用 Shell 特性,或者有多个命令需要串联执行,可以选择 Shell 形式。如果追求性能,或者希望更清晰地了解指令的执行情况,可以选择 Exec 形式。
Shell
在 Shell 形式下, 指令会直接在 中执行。这种格式可以使用通常在 Shell 中可用的各种特性,例如管道操作、变量扩展等。在Shell形式中,多个命令可以使用 连接,表示命令串联执行。
示例
exec
在 Exec 形式下, 指令会直接在不启动 shell 的情况下执行。这种格式使用 JSON 数组表示,命令及其参数作为独立的元素。Exec 形式通常更高效,因为不启动额外的 shell 进程。
示例
以以下Dockerfile为例:
- :选择Ubuntu最新版本作为基础镜像。
- :在容器中创建/app目录,所有后续指令都将在此目录下执行。
- :将主机上的所有文件复制到容器的/app目录下。
- :在容器内部运行更新和安装Nginx的命令。
- :设置环境变量NODE_ENV的值为production。
- :声明容器将监听80端口。
- :定义容器启动时的默认命令,运行Nginx并以前台模式启动。
构建镜像
Docker网络(Docker Network)是Docker提供的一种用于容器间通信和容器与外部网络通信的网络方案。Docker网络允许你创建、管理和连接多个Docker容器,提供了更灵活、可扩展的网络架构。
1. Docker网络的作用
-
容器间通信:Docker网络允许不同容器之间进行网络通信,使得容器之间可以方便地交换数据和信息。
-
容器与外部网络通信:Docker网络可以将容器连接到外部网络,使得容器可以与外部世界进行通信,例如访问互联网或局域网资源。
2. 三种Docker网络类型的区别
Docker提供了三种基本的网络类型:
-
Bridge Network(桥接网络):
- 作用:默认的网络模式,容器通过网络桥接方式与主机相连,容器间互相隔离,但可以与主机和外部网络通信。
- 使用场景:适用于多个容器需要在同一个宿主机上运行,相互隔离,但需要与外部通信的情况。
- 使用方式:使用 命令创建桥接网络,然后将容器连接到该网络。
-
Host Network(主机网络):
- 作用:容器直接使用宿主机的网络命名空间,与宿主机网络共享同一网络接口,容器间无网络隔离。
- 使用场景:适用于对网络性能要求较高、不需要容器间隔离的场景。
- 使用方式:使用 选项启动容器。
-
Overlay Network(覆盖网络):
- 作用:允许不同Docker守护进程间的容器进行通信,适用于跨主机的容器通信,提供多主机上的容器互联。
- 使用场景:适用于分布式应用,跨多个主机运行的场景。
- 使用方式:使用 命令创建覆盖网络,然后将容器连接到该网络。
3. 使用Docker网络的基本操作
-
创建网络:使用 命令创建新的Docker网络。
-
查看网络:使用 命令查看所有网络。
-
将容器连接到网络:在启动容器时使用 选项将容器连接到指定的网络。
-
断开容器与网络的连接:使用 命令将容器与网络断开连接。
以上操作示例展示了Docker网络的基本用法。根据具体场景,可以选择合适的网络类型,使得容器能够在不同的网络环境中进行通信和交互。
Docker Compose是一个工具,可以使用一个单独的yaml文件来定义和运行多个Docker容器。它可以轻松地定义和运行复杂的应用程序,而无需手动创建和管理每个容器。使用Docker Compose,可以定义容器之间的依赖关系、网络设置、数据卷挂载等。它还可以在单个命令中启动、停止、重启和删除整个应用程序。Docker Compose是一个非常有用的工具,特别适用于开发人员、测试人员和部署人员。
Docker 建议我们每一个容器中只运行一个服务,因为 Docker 容器本身占用资源极少,所以最好是将每个服务单独的分割开来但是这样我们又面临了一个问题? 如果我需要同时部署好多个服务,难道要每个服务单独写 Dockerfile 然后在构建镜像,构建容器,这样累都累死了,所以 Docker 官方给我们提供了 docker-compose 多服务部署的工具 例如要实现一个 Web 微服务项目,除了 Web 服务容器本身,往往还需要再加上后端的数据库mysql服务容器,redis服务器,注册中心eureka,甚至还包括负载均衡容器等等。 Compose 允许用户通过一个单独的模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)。 可以很容易地用一个配置文件定义一个多容器的应用,然后使用一条指令安装这个应用的所有依赖,完成构建。Docker-Compose 解决了容器与容器之间如何管理编排的问题。
准备
- 安装
安装docker-compose 如果有问题 删除 之前下载的文件,
到git上下载放到下面,演示中使用的是 版本
Releases · docker-compose git地址
官网安装教程
- 验证
- 想要卸载的话把那个文件删掉就可以了
使用
这就是基础的使用,如果需要更复杂的,看一下官网教程文档
-
随便找一个文件夹创建一个文件
-
运行文档
运行完ps检查一下,完美执行成功!!
常用指令
当使用Docker Compose时,以下是常用指令的表格形式展示:
请注意,这些指令的使用可能会依赖于您的具体应用和环境,确保在使用时参考官方文档或使用来获取详细的命令说明和参数信息。
Docker容器监控(Container Monitoring)是一种追踪、测量和分析Docker容器运行时性能和行为的方法。在Docker容器监控中,通常使用一组工具来收集和可视化容器的指标数据,以便及时发现问题、优化性能和规划资源。
- CAdvisor(容器监控工具)
CAdvisor是由Google开发的开源容器监控工具,它能够自动收集Docker容器的性能指标数据,如CPU使用率、内存使用量、网络流量等,并将这些数据提供给用户。
- InfluxDB(时序数据库)
InfluxDB是一个开源的时序数据库,特别适用于存储时间序列数据。在Docker容器监控中,InfluxDB用于存储CAdvisor收集到的容器指标数据。
- Grafana(可视化工具)
Grafana是一个开源的数据可视化和监控平台,它可以连接各种数据源(包括InfluxDB),并将数据以图表、仪表盘的形式展示出来。在Docker容器监控中,Grafana用于可视化InfluxDB中的容器指标数据,提供直观的监控界面。
使用docker-compose安装
- 创建docker-compose.yml文件执行
- 检查启动状况(账号密码在配置中有写都是)
- 配置数据源
- 连接数据库
- 创建面板
跟着点
选则数据源
配置查询条件那个下拉框可以选则不同的图标样式
- 安装portainer
- 访问地址结果portainer更新了,老大的local没了,看官网吧Initial setup - Portainer Documentation
登录,设置账号密码然后点点点,第四步复制到服务器执行,第五步起一个名字,然后把刚才安装的的服务器和端口填写上去,然后点击连接
- 连接完成,就是这样了
tomcat
- 检索tomact
-
运行
这里使用免修改版本
- 查看结果
mysql
之前在容器数据卷里面有使用mysql指令公式主从复制在mysql主从复制
redis
redis 集群使用 docker-compose 安装配置
- 在添加文件
- 运行
- 进去容器设置集群
- 检查集群状态
- 进行set测试
学习视频笔记地址
olumes:
- /home/redis_node_03/data:/data
ports:
- 6383:6383
- 16383:16383
networks:
- redis_network
redis_node_04:
image: redis:6.0.8
container_name: redis_node_04
command:
[
“–cluster-enabled”,“yes”,“–appendonly”,“yes”,“–port”,“6384”,“–daemonize”,“NO”
]
volumes:
- /home/redis_node_04/data:/data
ports:
- 6384:6384
- 16384:16384
networks:
- redis_network
redis_node_05:
image: redis:6.0.8
container_name: redis_node_05
command:
[
“–cluster-enabled”,“yes”,“–appendonly”,“yes”,“–port”,“6385”,“–daemonize”,“NO”
]
volumes:
- /home/redis_node_05/data:/data
ports:
- 6385:6385
- 16385:16385
networks:
- redis_network
networks:
redis_network:
[外链图片转存中…(img-1vuWEojZ-1698742260172)]
- 进去容器设置集群
[外链图片转存中…(img-iPCWn0jp-1698742260172)]
- 检查集群状态
[外链图片转存中…(img-W6lnLMCD-1698742260172)]
- 进行set测试
[外链图片转存中…(img-6xTMj86k-1698742260172)]