docker学习笔记
@
- 前言
- 1 docker简介
- 2 docker安装
- 3 Docker常用命令
- 4 Docker镜像
- 5 本地镜像发布到阿里云
- 6 本地镜像发布到私有库
- 7 Docker容器数据卷
- 8 Docker常规安装简介
- 8.1 总体步骤
- 8.2 安装tomcat
- 8.3 安装mysql
- 8.4 安装redis
- 8.4.1 从docker hub上(阿里云加速器)拉取redis镜像到本地标签为6.0.8
- 8.4.2 入门命令
- 8.4.3 命令提醒:容器卷记得加入--privileged=true
- 8.4.4 在CentOS宿主机下新建目录/app/redis
- 8.4.5 将一个redis.conf文件模板拷贝进/app/redis目录下
- 8.4.6 /app/redis目录下修改redis.conf文件
- 8.4.7 使用redis6.0.8镜像创建容器(也叫运行镜像)
- 8.4.8 测试redis-cli连接上来
- 8.4.9 请证明docker启动使用了我们自己指定的配置文件
- 8.4.10 测试redis-cli连接上来第2次
- 8.4.11 测试实战使用的redis
- 9 Docker复杂安装详说
- 9.1 安装mysql主从复制步骤
- 9.1.1 新建主服务器容器实例3307
- 9.1.2 进入/mydata/mysql-master/conf目录下新建my.cnf
- 9.1.3 修改完配置后重启master实例
- 9.1.4 进入mysql-master容器
- 9.1.5 master容器实例内创建数据同步用户
- 9.1.6 新建从服务器容器实例3308
- 9.1.7 进入/mydata/mysql-slave/conf目录下新建my.cnf
- 9.1.8 修改完配置后重启slave实例
- 9.1.9 在主数据库中查看主从同步状态
- 9.1.10 进入mysql-slave容器
- 9.1.11 在从数据库中配置主从复制
- 9.1.12 在从数据库中查看主从同步状态
- 9.1.13 在从数据库中开启主从同步
- 9.1.14 查看从数据库状态发现已经同步
- 9.1.15 主从复制测试
- 9.2 安装redis集群(大厂面试题第4季-分布式存储案例真题)
- cluster(集群)模式-docker版哈希槽分区进行亿级数据存储
- 9.1 安装mysql主从复制步骤
- 10 DockerFile解析
- 11 Docker微服务实战
- 12 Docker网络
- 13 Docker-compose容器编排
- 14 Docker轻量级可视化工具Portainer
- 15 Docker容器监控之CAdvisor+InfluxDB+Granfana
- 后记
前言
让我们跟随尚硅谷周阳老师的教学进入docker的学习中去吧。 1-8:基础篇。
1 docker简介
1.1 是什么
1.1.1 为什么会有docker出现
假定您在开发一个尚硅谷的谷粒商城,您使用的是一台笔记本电脑而且您的开发环境具有特定的配置。其他开发人员身处的环境配置也各有不同。您正在开发的应用依赖于您当前的配置且还要依赖于某些配置文件。此外,您的企业还拥有标准化的测试和生产环境,且具有自身的配置和一系列支持文件。您希望尽可能多在本地模拟这些环境而不产生重新创建服务器环境的开销。请问?
您要如何确保应用能够在这些环境中运行和通过质量检测?并且在部署过程中不出现令人头疼的版本、配置问题,也无需重新编写代码和进行故障修复?
答案就是使用容器。Docker之所以发展如此迅速,也是因为它对此给出了一个标准化的解决方案-----系统平滑移植,容器虚拟化技术
。
环境配置相当麻烦,换一台机器,就要重来一次,费力费时。很多人想到,能不能从根本上解决问题,软件可以带环境安装
?也就是说,安装的时候,把原始环境一模一样地复制过来。开发人员利用 Docker 可以消除协作编码时“在我的机器上可正常工作”的问题
。
之前在服务器配置一个应用的运行环境,要安装各种软件,就拿尚硅谷电商项目的环境来说,Java/RabbitMQ/MySQL/JDBC驱动包等。安装和配置这些东西有多麻烦就不说了,它还不能跨平台。假如我们是在 Windows 上安装的这些环境,到了 Linux 又得重新装。况且就算不跨操作系统,换另一台同样操作系统的服务器,要移植
应用也是非常麻烦的。
传统上认为,软件编码开发/测试结束后,所产出的成果即是程序或是能够编译执行的二进制字节码等(java为例)。而为了让这些程序可以顺利执行,开发团队也得准备完整的部署文件,让维运团队得以部署应用程式,开发需要清楚的告诉运维部署团队,用的全部配置文件+所有软件环境。不过,即便如此,仍然常常发生部署失败的状况。Docker的出现使得Docker得以打破过去「程序即应用」的观念。透过镜像(images)将作业系统核心除外,运作应用程式所需要的系统环境,由下而上打包,达到应用程式跨平台间的无缝接轨运作
。
1.1.2 docker理念
Docker是基于Go语言实现的云开源项目
。
Docker的主要目标是“Build,Ship and Run Any App,Anywhere”,也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用或数据库应用等等)及其运行环境能够做到“一次镜像,处处运行
”。
Linux容器技术的出现就解决了这样一个问题,而 Docker 就是在它的基础上发展过来的。将应用打成镜像,通过镜像成为运行在Docker容器上面的实例,而 Docker容器在任何操作系统上都是一致的,这就实现了跨平台、跨服务器。只需要一次配置好环境,换到别的机子上就可以一键部署好,大大简化了操作
。
即:
解决了运行环境和配置问题
的软件容器
,方便做持续集成并有助于整体发布的容器虚拟化技术。
1.2 容器与虚拟机比较
1.2.1 容器发展简史
1.2.2 传统虚拟机技术
虚拟机(virtual machine)就是带环境安装的一种解决方案。
它可以在一种操作系统里面运行另一种操作系统,比如在Windows10系统里面运行Linux系统CentOS7。应用程序对此毫无感知,因为虚拟机看上去跟真实系统一模一样,而对于底层系统来说,虚拟机就是一个普通文件,不需要了就删掉,对其他部分毫无影响。这类虚拟机完美的运行了另一套系统,能够使应用程序,操作系统和硬件三者之间的逻辑不变。
1.2.3 容器虚拟化技术
由于前面虚拟机存在某些缺点,Linux发展出了另一种虚拟化技术:
Linux容器(Linux Containers,缩写为 LXC)
Linux容器是与系统其他部分隔离开的一系列进程,从另一个镜像运行,并由该镜像提供支持进程所需的全部文件。容器提供的镜像包含了应用的所有依赖项,因而在从开发到测试再到生产的整个过程中,它都具有可移植性和一致性。
Linux 容器不是模拟一个完整的操作系统
而是对进程进行隔离。有了容器,就可以将软件运行所需的所有资源打包到一个隔离的容器中。容器与虚拟机不同,不需要捆绑一整套操作系统
,只需要软件工作所需的库资源和设置。系统因此而变得高效轻量并保证部署在任何环境中的软件都能始终如一地运行。
1.2.4 对比
比较了 Docker 和传统虚拟化方式的不同之处:
- 传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;
- 容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核
且也没有进行硬件虚拟
。因此容器要比传统虚拟机更为轻便。 - 每个容器之间互相隔离,每个容器有自己的文件系统 ,容器之间进程不会相互影响,能区分计算资源。
1.3 能干嘛
1.3.1 技术职级变化
1.3.2 开发/运维(DevOps)新一代开发工程师
【1】 一次构建、随处运行
-
更快速的应用交付和部署
传统的应用开发完成后,需要提供一堆安装程序和配置说明文档,安装部署后需根据配置文档进行繁杂的配置才能正常运行。Docker化之后只需要交付少量容器镜像文件,在正式生产环境加载镜像并运行即可,应用安装配置在镜像里已经内置好,大大节省部署配置和测试验证时间。 -
更便捷的升级和扩缩容
随着微服务架构和Docker的发展,大量的应用会通过微服务方式架构,应用的开发构建将变成搭乐高积木一样,每个Docker容器将变成一块“积木”,应用的升级将变得非常容易。当现有的容器不足以支撑业务处理时,可通过镜像运行新的容器进行快速扩容,使应用系统的扩容从原先的天级变成分钟级甚至秒级。 -
更简单的系统运维
应用容器化运行后,生产环境运行的应用可与开发、测试环境的应用高度一致,容器会将应用程序相关的环境和状态完全封装起来,不会因为底层基础架构和操作系统的不一致性给应用带来影响,产生新的BUG。当出现程序异常时,也可以通过测试环境的相同容器进行快速定位和修复。 -
更高效的计算资源利用
Docker是内核级虚拟化
,其不像传统的虚拟化技术一样需要额外的Hypervisor支持,所以在一台物理机上可以运行很多个容器实例,可大大提升物理服务器的CPU和内存的利用率。
【2】 Docker应用场景
1.3.3 哪些企业在使用
1.4 去哪下
2 docker安装
前提说明
2.1 Docker的基本组成
2.1.1 镜像(image)
2.1.2 容器(container)
2.1.3 仓库(repository)
2.1.4 小总结
2.2 Docker平台架构图解(入门版)
2.1 架构图
2.2 Docker工作原理
2.3 Docker平台架构图解(架构版)
2.3.1 整体架构及底层通信原理简述
2.4 安装步骤 --- CentOS7安装Docker
2.4.1 安装步骤
【1】 确定你是CentOS7及以上版本
cat /etc/redhat-release
【2】 卸载旧版本
【3】 yum安装gcc相关
【4】 安装需要的软件包
【5】 设置stable镜像仓库
- 大坑
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
【6】 更新yum软件包索引
yum makecache fast
【7】 安装DOCKER CE
yum -y install docker-ce docker-ce-cli containerd.io
【8】 启动docker
systemctl start docker
【9】 测试
【10】 卸载
systemctl stop docker
yum remove docker-ce docker-ce-cli containerd.io
rm -rf /var/lib/docker
rm -rf /var/lib/containerd
2.4.2 阿里云镜像加速
【1】 是什么
https://promotion.aliyun.com/ntms/act/kubernetes.html
【2】 注册一个属于自己的阿里云账户(可复用淘宝账号)
【3】 获得加速器地址连接
【4】 粘贴脚本直接执行
- 直接粘
- 或者分步骤都行
-
mkdir -p /etc/docker
-
vim /etc/docker/daemon.json
【5】 重启服务器
systemctl daemon-reload
systemctl restart docker
2.4.3 永远的HelloWorld
- 启动Docker后台容器(测试运行 hello-world)
2.4.4 底层原理
3 Docker常用命令
3.1 帮助启动类命令
3.1.1 启动docker
systemctl start docker
3.1.2 停止docker
systemctl stop docker
3.1.3 重启docker
systemctl restart docker
3.1.4 查看docker状态
systemctl status docker
3.1.5 开机启动
systemctl enable docker
3.1.6 查看docker概要信息
docker info
3.1.7 查看docker总体帮助文档
docker --help
3.1.8 查看docker命令帮助文档
docker 具体命令 --help
3.2 镜像命令
3.2.1 docker images
3.2.2 docker search 某个XXX镜像名字
- 网站
- 命令
3.2.3 docker pull 某个XXX镜像名字
3.2.3 docker system df 查看镜像/容器/数据卷所占的空间
3.2.4 docker rmi 某个XXX镜像名字ID
3.2.5 面试题:谈谈docker虚悬镜像是什么?
3.3 容器命令
3.3.1 前提
有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示).
【1】 说明
3.3.2 新建+启动容器
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
- OPTIONS说明
3.3.3 列出当前所有正在运行的容器
docker ps [OPTIONS]
3.3.4 退出容器
3.3.5 启动已停止运行的容器
docker start 容器ID或者容器名
3.3.6 重启容器
docker restart 容器ID或者容器名
3.3.7 停止容器
docker stop 容器ID或者容器名
3.3.8 强制停止容器
docker kill 容器ID或容器名
3.3.9 删除已停止的容器
docker rm 容器ID
3.4 重要容器命令
3.4.1 前提
有镜像才能创建容器,这是根本前提(下载一个Redis6.0.8镜像演示)
3.4.2 启动守护式容器(后台服务器)
在大部分的场景下,我们希望 docker 的服务是在后台运行的,我们可以 -d 指定容器的后台运行模式。
【1】 docker run -d 容器名
【2】 redis 前后台启动演示case
3.4.3 查看容器日志
docker logs 容器ID
3.4.4 查看容器内运行的进程
docker top 容器ID
3.4.5 查看容器内部细节
docker inspect 容器ID
3.4.6 进入正在运行的容器并以命令行交互
docker exec -it 容器ID bashShell
【1】 重新进入
docker attach 容器ID
【2】 案例演示,用centos或者ubuntu都可以
【3】 上述两个区别
- attach
直接
进入容器启动命令的终
端,不会启动新的进程;用exit退出,会导致容器的停止。
- exec 是在容器中打开
新
的终端,并且可以启动新的进程用exit退出,不会导致容器的停止。
推荐大家使用docker exec
命令,因为退出容器终端,不会导致容器的停止。
【4】 用之前的redis容器实例进入试试
3.4.7 从容器内拷贝文件到主机上
3.4.8 导入和导出容器
【1】 docker export 容器ID > 文件名.tar
【2】 cat 文件名.tar | docker import - 镜像用户/镜像名:镜像版本号
3.5 小总结 --- 常用命令
4 Docker镜像
4.1 是什么
4.1.1 是什么
4.1.2 分层的镜像
4.1.3 UnionFS(联合文件系统)
4.1.4 Docker镜像加载原理
4.1.5 为什么 Docker 镜像要采用这种分层结构呢
4.2 重点理解
Docker镜像层都是只读的,容器层是可写的,当容器启动时,一个新的可写层被加载到镜像的顶部。这一层通常被称作“容器层”,“容器层”之下的都叫“镜像层”。
4.3 Docker镜像commit操作案例
4.3.1 docker commit提交容器副本使之成为一个新的镜像
4.3.2 docker commit -m="提交的描述信息" -a="作者" 容器ID 要创建的目标镜像名:[标签名]
4.3.3 案例演示ubuntu安装vim
【1】 从Hub上下载ubuntu镜像到本地并成功运行
【2】 原始的默认Ubuntu镜像是不带着vim命令的
【3】 外网连通的情况下,安装vim
【4】 安装完成后,commit我们自己的新镜像
【5】 启动我们的新镜像并和原来的对比
4.3.4 小总结
5 本地镜像发布到阿里云
5.1 本地镜像发布到阿里云流程
5.2 镜像的生成方法
上一讲已经介绍过
后面的DockerFile章节,有第2种方法
5.3 将本地镜像推送到阿里云
5.3.1 本地镜像素材原型
5.3.2 阿里云开发者平台
https://promotion.aliyun.com/ntms/act/kubernetes.html
5.3.3 创建仓库镜像
【1】 选择控制台,进入容器镜像服务
【2】 选择个人实例
【3】 命名空间
【4】 仓库名称
【5】 进入管理界面获得脚本
5.3.4 将镜像推送到阿里云
将镜像推送到阿里云registry
5.4 将阿里云上的镜像下载到本地
下载到本地
docker pull registry.cn-hangzhou.aliyuncs.com/atguiguwh/myubuntu:1.1
6 本地镜像发布到私有库
6.1 本地镜像发布到私有库流程
6.2 是什么 ---- Docker Registry
6.3 将本地镜像推送到私有库
6.3.1 下载镜像Docker Registry
6.3.2 运行私有库Registry,相当于本地有个私有Docker hub
docker run -d -p 5000:5000 -v /zzyyuse/myregistry/:/tmp/registry --privileged=true registry
6.3.3 案例演示创建一个新镜像,ubuntu安装ifconfig命令
【1】 从Hub上下载ubuntu镜像到本地并成功运行
【2】 原始的Ubuntu镜像是不带着ifconfig命令的
【3】 外网连通的情况下,安装ifconfig命令并测试通过
apt -get update
apt -get install net-tools
【4】 安装完成后,commit我们自己的新镜像
【5】启动我们的新镜像并和原来的对比
6.3.4 curl验证私服库上有什么镜像
curl -XGET http://192.168.111.162:5000/v2/_catalog
6.3.5 将新镜像zzyyubuntu:1.2修改符合私服规范的Tag
6.3.6 修改配置文件使之支持http
别无脑照着复制,
registry-mirrors
配置的是国内阿里提供的镜像加速地址,不用加速的话访问官网的会很慢。
2个配置中间有个逗号',
'别漏了,这个配置是json格式的。
2个配置中间有个逗号 ',
'别漏了,这个配置是json格式的。
2个配置中间有个逗号 ',
'别漏了,这个配置是json格式的。
vim命令新增如下红色内容:vim /etc/docker/daemon.json
上述理由:docker默认不允许http方式推送镜像,通过配置选项来取消这个限制。====> 修改完后如果不生效,建议重启docker
6.3.7 push推送到私服库
docker push 192.168.111.162:5000/zzyyubuntu:1.2
6.3.8 curl验证私服库上有什么镜像2
curl -XGET http://192.168.111.162:5000/v2/_catalog
6.3.9 pull到本地并运行
docker pull 192.168.111.162:5000/zzyyubuntu:1.2
docker run -it 镜像ID /bin/bash
7 Docker容器数据卷
7.1 坑:容器卷记得加入
--privileged=true
7.2 是什么
卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过Union File System提供一些用于持续存储或共享数据的特性:
卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷。
- 一句话:有点类似我们Redis里面的rdb和aof文件
- 将docker容器内的数据保存进宿主机的磁盘中
- 运行一个带有容器卷存储功能的容器实例
docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录 镜像名
7.3 能干嘛
将运用与运行的环境打包镜像,run后形成容器实例运行 ,但是我们对数据的要求希望是持久化的
Docker容器产生的数据,如果不备份,那么当容器实例删除后,容器内的数据自然也就没有了。
为了能保存数据在docker中我们使用卷。
特点:
1:数据卷可在容器之间共享或重用数据
2:卷中的更改可以直接实时生效,爽
3:数据卷中的更改不会包含在镜像的更新中
4:数据卷的生命周期一直持续到没有容器使用它为止
7.4 数据卷案例
7.4.1 宿主vs容器之间映射添加容器卷
【1】直接命令添加
- 命令
公式:docker run -it -v /宿主机目录:/容器内目录 ubuntu /bin/bash
- 查看数据卷是否挂载成功
docker inspect 容器ID
7.4.2 读写规则映射添加说明
【1】 读写(默认)
docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录:rw 镜像名
默认同上案例,默认就是rw.
【2】 只读
7.4.3 卷的继承和共享
【1】 容器1完成和宿主机的映射
docker run -it --privileged=true -v /mydocker/u:/tmp --name u1 ubuntu
【2】 容器2继承容器1的卷规则
docker run -it --privileged=true --volumes-from 父类 --name u2 ubuntu
8 Docker常规安装简介
8.1 总体步骤
8.2 安装tomcat
8.2.1 docker hub上面查找tomcat镜像
docker search tomcat
8.2.2 从docker hub上拉取tomcat镜像到本地
8.2.3 docker images查看是否有拉取到的tomcat
8.2.4 使用tomcat镜像创建容器实例(也叫运行镜像)
docker run -it -p 8080:8080 tomcat
对于-P:
8.2.5 访问猫首页
【1】 问题
【2】 解决
8.2.6 免修改版说明
【1】 docker pull billygoo/tomcat8-jdk8
【2】 docker run -d -p 8080:8080 --name mytomcat8 billygoo/tomcat8-jdk8
8.3 安装mysql
8.3.1 docker hub上面查找mysql镜像
8.3.2 从docker hub上(阿里云加速器)拉取mysql镜像到本地标签为5.7
8.3.3 使用mysql5.7镜像创建容器(也叫运行镜像)
【1】 命令出处,哪里来的?
【2】 简单版
【3】 实战版
- 新建mysql容器实例
docker run -d -p 3306:3306 --privileged=true -v /zzyyuse/mysql/log:/var/log/mysql -v /zzyyuse/mysql/data:/var/lib/mysql -v /zzyyuse/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 --name mysql mysql:5.7
2. 新建my.cnf --- 通过容器卷同步给mysql容器实例
8.4 安装redis
8.4.1 从docker hub上(阿里云加速器)拉取redis镜像到本地标签为6.0.8
8.4.2 入门命令
8.4.3 命令提醒:容器卷记得加入--privileged=true
Docker挂载主机目录;Docker访问出现cannot open directory .: Permission denied
解决办法:在挂载目录后多加一个--privileged=true参数即可
8.4.4 在CentOS宿主机下新建目录/app/redis
8.4.5 将一个redis.conf文件模板拷贝进/app/redis目录下
8.4.6 /app/redis目录下修改redis.conf文件
- 默认出厂的原始redis.conf
linux文件修改快速定位技巧
对于这个Linux中文件的修改,我们可以使用 在命令行模式下 输入 /
,然后输入你想要查找的关键词。
/database
查看后一个用n
,查看前一个用N
.
8.4.7 使用redis6.0.8镜像创建容器(也叫运行镜像)
redis-server /etc/redis/redis.conf
不再是bin/bash
了,而是使用我们的配置文件运行。
8.4.8 测试redis-cli连接上来
8.4.9 请证明docker启动使用了我们自己指定的配置文件
8.4.10 测试redis-cli连接上来第2次
8.4.11 测试实战使用的redis
【1】 myr1 这个容器实例上设置一个 k666 v888
【2】 删除myr1这个容器实例
【3】 重新创建一个和上面myr1一样的redis容器实例 myr666
【4】获取k666 得到的值是v888
【5】这样的才是实战用的,不会因为删除容器实例就将数据丢失掉
9 Docker复杂安装详说
9.1 安装mysql主从复制步骤
9.1.1 新建主服务器容器实例3307
-e 环境, root用户,root密码。
9.1.2 进入/mydata/mysql-master/conf目录下新建my.cnf
vim my.cnf
9.1.3 修改完配置后重启master实例
docker restart mysql-master
9.1.4 进入mysql-master容器
docker exec -it mysql-master /bin/bash
- MySQL登录
mysql -uroot -proot
9.1.5 master容器实例内创建数据同步用户
- 创建一个名字是slave的角色,密码是123456.
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
- 授予所有权限给slave这个角色。
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
9.1.6 新建从服务器容器实例3308
9.1.7 进入/mydata/mysql-slave/conf目录下新建my.cnf
vim my.cnf
9.1.8 修改完配置后重启slave实例
docker restart mysql-slave
9.1.9 在主数据库中查看主从同步状态
show master status;
9.1.10 进入mysql-slave容器
docker exec -it mysql-slave /bin/bash
mysql -uroot -proot
9.1.11 在从数据库中配置主从复制
主从复制命令参数说明
9.1.12 在从数据库中查看主从同步状态
show slave status \G;
9.1.13 在从数据库中开启主从同步
9.1.14 查看从数据库状态发现已经同步
9.1.15 主从复制测试
- 主机新建库-使用库-新建表-插入数据,ok
- 从机使用库-查看记录,ok
9.2 安装redis集群(大厂面试题第4季-分布式存储案例真题)
cluster(集群)模式-docker版哈希槽分区进行亿级数据存储
9.2.1 面试题
上述问题阿里P6~P7工程案例和场景设计类必考题目,一般业界有3种解决方案。
【1】 哈希取余分区
【2】 一致性哈希算法分区
- 优点
- 缺点
【3】 哈希槽分区
9.2.2 3主3从redis集群扩缩容配置案例架构说明
9.2.4 具体步骤
3主3从redis集群配置
【1】 关闭防火墙+启动docker后台服务
systemctl start docker
【2】 新建6个docker容器redis实例
【3】 进入容器redis-node-1并为6台机器构建集群关系
- 进入容器
docker exec -it redis-node-1 /bin/bash
- 构建主从关系
//注意,进入docker容器后才能执行一下命令,且注意自己的真实IP地址
redis-cli --cluster create 192.168.111.147:6381 192.168.111.147:6382 192.168.111.147:6383 192.168.111.147:6384 192.168.111.147:6385 192.168.111.147:6386 --cluster-replicas 1
- --cluster-replicas 1 表示为每个master创建一个slave节点
【4】 链接进入6381作为切入点,查看集群状态
主从容错切换迁移案例
【1】 数据读写存储
- 启动6机构成的集群并通过exec进入
- 对6381新增两个key
- 防止路由失效加参数-c并新增两个key
- 查看集群信息
redis-cli --cluster check 192.168.119.222:6381
【2】 容错切换迁移
- 主6381和从机切换,先停止主机6381
- 6381主机停了,对应的真实从机上位
- 6381作为1号主机分配的从机以实际情况为准,具体是几号机器就是几号
- 查看集群状态
redis-cli --cluster check 自己IP:6381
主从扩容案例
【1】 新建6387、6388两个节点+新建后启动+查看是否8节点
【2】 进入6387容器实例内部
docker exec -it redis-node-7 /bin/bash
【3】 将新增的6387节点(空槽号)作为master节点加入原集群
【4】 检查集群情况第1次
【5】 重新分派槽号
【6】 检查集群情况第2次
redis-cli --cluster check 真实ip地址:6381
【7】 为主节点6387分配从节点6388
【8】 检查集群情况第3次
redis-cli --cluster check 192.168.111.147:6382
主从缩容案例
【1】 目的:6387和6388下线
【2】 检查集群情况1获得6388的节点ID
【3】 将6388删除从集群中将4号从节点6388删除
redis-cli --cluster check 192.168.111.147:6382
【4】 将6387的槽号清空,重新分配,本例将清出来的槽号都给6381
redis-cli --cluster reshard 192.168.111.147:6381
【5】 检查集群情况第二次
【6】将6387删除
【7】 检查集群情况第三次
redis-cli --cluster check 192.168.111.147:6381
10 DockerFile解析
10.1 是什么
Dockerfile是用来构建Docker镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本。
10.1.1 概述
10.1.2 官网
https://docs.docker.com/engine/reference/builder/
10.1.3 构建三步骤
- 编写Dockerfile文件
- docker build命令构建镜像
- docker run依镜像运行容器实例
10.2 DockerFile构建过程解析
10.2.1 Dockerfile内容基础知识
10.2.2 Docker执行Dockerfile的大致流程
10.2.3 小总结
10.3 DockerFile常用保留字指令
CMD
10.4 案例
10.4.1 自定义镜像mycentosjava8
【1】 要求
- Centos7镜像具备vim+ifconfig+jdk8
- JDK的下载镜像地址
- 官网
下载地址:
https://www.oracle.com/java/technologies/downloads/#java8
- https://mirrors.yangxingzhen.com/jdk/
【2】 编写
准备编写Dockerfile文件 ---- 大写字母D
【3】 构建
- docker build -t 新镜像名字:TAG .
docker build -t centosjava8:1.5 .
【4】运行
docker run -it 新镜像名字:TAG
docker run -it centosjava8:1.5 /bin/bash
【5】 再体会下UnionFS(联合文件系统)
10.4.2 虚悬镜像
【1】是什么
【2】 查看
【3】 删除
10.4.2 自定义镜像myubuntu
【1】 编写
【2】构建
docker build -t 新镜像名字:TAG .
【3】 运行
docker run -it 新镜像名字:TAG
10.5 小总结
11 Docker微服务实战
11.1 通过IDEA新建一个普通微服务模块
11.1.1 建Module docker_boot
11.1.2 改POM
11.1.3 写YML
server.port=6001
11.1.4 主启动
11.1.5 业务类
11.2 通过dockerfile发布微服务部署到docker容器
11.2.1 IDEA工具里面搞定微服务jar包
11.2.2 编写Dockerfile
【1】 Dockerfile内容
【2】 将微服务jar包和Dockerfile文件上传到同一个目录下/mydocker
11.2.3 构建镜像
【1】 docker build -t zzyy_docker:1.6 .
【2】 打包成镜像文件
11.2.4 运行容器
11.2.5 访问测试
12 Docker网络
12.1 是什么
12.1.1 docker不启动,默认网络情况
12.1.2 docker启动后,网络情况
12.2 常用基本命令
12.2.1 All命令
12.2.2 查看网络
docker network ls
12.2.3 查看网络源数据
docker network inspect XXX网络名字
12.2.4 删除网络
docker network rm XXX网络名字
12.2.5 案例
12.3 能干嘛
12.4 网络模式
12.4.1 总体介绍
12.4.2 容器实例内默认网络IP生产规则
【1】说明
【2】 结论
docker容器内部的ip是有可能会发生改变的。
12.4.3 案例说明
【1】 bridge
-
代码
docker run -d -p 8081:8080 --name tomcat81 billygoo/tomcat8-jdk8
docker run -d -p 8082:8080 --name tomcat82 billygoo/tomcat8-jdk8
【2】host
-
是什么
直接使用宿主机的 IP 地址与外界进行通信,不再需要额外进行NAT 转换。 -
案例
正确 docker run -d --network host --name tomcat83 billygoo/tomcat8-jdk8
【3】 none
- 是什么
在none模式下,并不为Docker容器进行任何网络配置。
也就是说,这个Docker容器没有网卡、IP、路由等信息,只有一个lo
需要我们自己为Docker容器添加网卡、配置IP等。
禁用网络功能,只有lo标识(就是127.0.0.1表示本地回环)
docker run -d -p 8084:8080 --network none --name tomcat84 billygoo/tomcat8-jdk8
【4】container
- Alpine操作系统是一个面向安全的轻型 Linux发行版
Alpine Linux 是一款独立的、非商业的通用 Linux 发行版,专为追求安全性、简单性和资源效率的用户而设计。 可能很多人没听说过这个 Linux 发行版本,但是经常用 Docker 的朋友可能都用过,因为他小,简单,安全而著称,所以作为基础镜像是非常好的一个选择,可谓是麻雀虽小但五脏俱全,镜像非常小巧,不到 6M的大小,所以特别适合容器打包。
【5】自定义网络
12.5 Docker平台架构图解
12.5.1 整体说明
12.5.2 整体架构
13 Docker-compose容器编排
13.1 是什么
Compose 是 Docker 公司推出的一个工具软件,可以管理多个 Docker 容器组成一个应用。你需要定义一个 YAML 格式的配置文件docker-compose.yml
,写好多个容器之间的调用关系。然后,只要一个命令,就能同时启动/关闭这些容器。
Docker-Compose是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。
13.2 能干嘛
13.3 去哪下
13.3.1 官网及下载地址
13.3.2 安装步骤
13.3.3 卸载步骤
13.4 Compose核心概念
13.5 Compose使用的三个步骤
13.6 Compose常用命令
13.7 Compose编排微服务
13.7.1 改造升级微服务工程docker_boot
【1】 以前的基础版
【2】SQL建表建库 ---- docker中启动mysql之后才设置
【3】改POM
【4】写YML
【5】 主启动
【6】业务类
- config配置类
- RedisConfig
- SwaggerConfig
- 新建entity
- User
- UserDTO
- 新建mapper
- 新建接口UserMapper
- src\main\resources路径下新建mapper文件夹并新增UserMapper.xml
- 新建service
- 新建controller
【7】mvn package命令将微服务形成新的jar包并上传到Linux服务器/mydocker目录下
【8】编写Dockerfile
【9】构建镜像
docker build -t zzyy_docker:1.6 .
13.7.2 不用Compose
【1】 单独的mysql容器实例
- 新建mysql容器实例
- 进入mysql容器实例并新建库db2021+新建表t_user
【2】 单独的redis容器实例
docker run -p 6379:6379 --name redis608 --privileged=true -v /app/redis/redis.conf:/etc/redis/redis.conf -v /app/redis/data:/data -d redis:6.0.8 redis-server /etc/redis/redis.conf
【3】 微服务工程
docker run -d -p 6001:6001 zzyy_docker:1.6
【4】 上面三个容器实例依次顺序启动成功
13.7.3 swagger测试
http://localhost:你的微服务端口/swagger-ui.html#/
13.7.4 使用Compose
服务编排,一套带走,安排
【1】 编写docker-compose.yml文件
【2】第二次修改微服务工程docker_boot
- 通过服务名访问,IP无关
- mvn package命令将微服务形成新的jar包并上传到Linux服务器/mydocker目录下
- 编写Dockerfile
- 构建镜像
docker build -t zzyy_docker:1.6 .
【3】执行 docker-compose up或者执行 docker-compose up -d
【4】进入mysql容器实例并新建库db2021+新建表t_user
【5】测试通过
【6】Compose常用命令
【7】 关停
14 Docker轻量级可视化工具Portainer
14.1 是什么
Portainer 是一款轻量级的应用,它提供了图形化界面,用于方便地管理Docker环境,包括单机环境和集群环境。
14.2 安装
14.2.1 官网
14.2.2 步骤
【1】docker命令安装
docker run -d -p 8000:8000 -p 9000:9000 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce
注意 portainer/portainer-ce最新命令是这个啦。
【2】第一次登录需创建admin,访问地址:xxx.xxx.xxx.xxx:9000
【3】 设置admin用户和密码后首次登陆
【4】选择local选项卡后本地docker详细信息展示
【5】 上一步的图形展示,能想得起对应命令吗?
15 Docker容器监控之CAdvisor+InfluxDB+Granfana
15.1 原生命令
15.2 是什么 --- 容器监控3剑客
CAdvisor监控收集+InfluxDB存储数据+Granfana展示图表
15.2.1 CAdvisor
15.2.2 InfluxDB
15.2.3 Granfana
15.2.4 总结
15.3 compose容器编排,一套带走
15.3.1 新建目录
15.3.2 新建3件套组合的docker-compose.yml
15.3.3 启动docker-compose文件
15.2.4 查看三个服务容器是否启动
15.2.5 测试
【1】 浏览cAdvisor收集服务,http://ip:8080/
【2】 浏览influxdb存储服务,http://ip:8083/
【3】 浏览grafana展现服务,http://ip:3000
到这里cAdvisor+InfluxDB+Grafana容器监控系统就部署完成了。
后记
感谢周阳老师的讲解,让我们对docker这门技能可以入门并熟练使用。
阳哥邮箱
__EOF__

本文链接:https://www.cnblogs.com/wylja/p/16837878.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 上周热点回顾(2.17-2.23)
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· spring官宣接入deepseek,真的太香了~