安装Docker需要的依赖gcc gcc-c++
因为我之前已经安装了,所以现在提示"Nothing to do"
非root用户需要使用sudo提权
安装Docker
查看docker版本
运行hello-world
为什么Docker会比vm虚拟机快
官方文档:https://docs.docker.com/
docker images
docker search
docker search 镜像名称
docker pull
下载镜像
docker system df
查看镜像/容器/数据卷所占的空间
docker rmi
删除镜像
docker rm
删除下图中NAMES为redis的容器
redis前台交互式启动
前台启动很容易被意外终止,窗口一关就没了
redis后台守护进程启动
查看容器内运行的进程
Nginx容器运行
保存拉取好的nginx镜像
删除nginx镜像,通过上一步保存好的nginx.tar包再将nginx加载回来
创建nginx容器
停掉nginx容器
启动nginx容器
查看nginx日志
进入nginx容器内部
ubuntu交互式运行
当我们直接使用docker run(不加任何参数)运行某个容器,使用ps命令查看容器状态时,STATUS显示的是‘Exited’,表示已经退出了。当我们希望有交互式的命令输入时,需要使用到‘-it’参数
交互式时,容器的状态是’Up’
tomcat交互式运行
当运行完以上命令后,以下为截取的部分tomcat启动运行日志,可以看到tomcat启动成功了。
查看容器状态时,可以看到COMMAND为“catalina.sh run”, 此命令可以参考tomcat的Dockerfile
既然tomcat都启动成功了,那tomcat就可以访问了吗,此时我们访问下这个主机的8080端口试一下,
哦NO,汤姆小猫并没有出来,此时你需要对外暴露访问端口。
对外暴露访问端口
专用术语称之为端口映射,将宿主机的8080端口映射为8081,也就是对外我们访问8081端口就等于访问宿主机的8080端口。
此时我们访问8081端口:
噢耶,Tomcat小猫咪出来了。
Dockerfile 是用于构建 Docker 镜像的脚本文件,由一系列指令构成。通过 docker build命令构建镜像时,Dockerfile 中的指令会由上而下依次执行,每条指令都将会构建出一个镜像,这就是镜像的分层。因此指令越多,层次就越多,创建的镜像就越多,效率就越低。所以在定义 Dockerfile 时,能用一个指令完成的动作就不要分为两条。
run和cmd的区别:run是构建镜像时的命令,而cmd则是启动容器时的命令
为了实现同一个宿主机以及跨宿主机的容器之间网络互联,Docker网络支持5种网络模式
查看Docker默认的网络模式有三个
默认新建的容器使用Bridge模式,创建容器时,docker run命令使用以下选项指定网络模式格式
查看bridge模式信息
发布一个Java的hello world
编写完成后,打包成jar包(HelloDocker.jar)上传到linux上的某个目录下
编写Dockerfile
构建镜像
运行镜像,对外暴露9003端口
进入到容器里面查看
查看容器日志
浏览器访问我暴露出的9003端口
ok,java的hello world的小应用程序就以docker容器的方式运行成功了。
可以参考docker-hub的官方安装命令docker-hub-mysql
为了保证数据的安全性,在生产环境下安装的 mysql 容器,在启动时都会使用数据卷来持久化数据。
安装master容器
第一步:启动master容器,指定数据卷路径
第二步: 新建 my.cnf
第三部:创建用户
第四步:给用户赋予权限
第五步:查看该用户权限
安装slave容器
第一步:启动slave容器,指定数据卷路径
第二步:新建my.cnf
第三部:进入容器连接mysql
配置主从复制
1.查看master状态
2.slave 指定 master
在 slave 中通过运行 change master to 命令来指定其要连接的 master 相关信息。
3.开启slave
此时master和slave已经完成了主从复制,在master上新建一个数据库和数据表已经即时同步到slave上了。
再次验证主从是否读写分离,master可以读写数据,slave只能读数据。
验证slave节点上能否插入数据
查看master上是否有slave插入的数据。master上自然不会有Tony这条数据。
问题所在
slave上可以写数据,因为我们在配置文件中设置的是slave用户的只读权限,而slave节点上我们用的是root用户登录的。此时我们可以设置super用户为只读权限则slave节点就不能插入数据了。
单机安装Redis
进入redis容器
Redis一主两从集群搭建
现要搭建一个“一主两从”的 Redis 集群。这三个容器的端口号都保持默认,但对外暴露出的端口号分别为 6381、6382、6383。其中,6381 的为 master,另外两个为 slave。
1.复制三份 redis.conf
在两个slave的redis.conf上加上两个如下配置
2.启动master容器
启动slave容器
myredis-2
myredis-3
查看主从关系
master节点上
slave节点上
验证主从是否同步,在master上set一个值之后,两个slave节点可以直接get到
Redis 高可用集群搭建
主从集群存在的问题是,其容灾方式只能采用冷处理方案,无法在生产中使用。所以这里要搭建一个“一主两从三哨兵”的高可用集群,以达到热处理的容灾方案。
对于“一主两从”集群,仍使用前面的即可。下面直接搭建三个 Sentinel 节点的集群。
这三个容器的端口号都保持默认,但对外暴露出的端口号分别为 26381、26382、26383。
1.复制三份 sentinel.conf
复制 sentinel.conf 文件并重命名为 sentinel1.conf。
仅修改两处:
2.启动 sentinel
2.1启动mysentinel-1
2.2启动mysentinel-2
2.3启动mysentinel-3
关系查看
以上命令的查看结果说明 sentinel 对 master 的监视成功,说明高可用集群搭建成功。连
接任何一个 sentinel 容器节点查看到的信息与上面的都是相同的。
故障转移测试
为了验证高可用性,现将充当 master 的容器 myredis-1 停掉。
此时,再查看另外两个 redis 容器的状态数据,发现 myredis-2 成为了 myredis-3 的 slave,
myredis-3 成为了新的 master
此时再次启动myredis-1时,发现它成了myredis-3的slave节点
Docker Compose是Docker一个用于定义和管理多容器的容器编排工具
。通过使用Docker Compose,可以在单个YAML文件中配置应用的服务、网络和卷等,简化了多容器应用的部署和管理。解决了手动部署容器的弊端。
安装Docker compose
赋予docker-compose执行权限
现有java项目ssrm,windows本地运行结果如下
将项目在windows下使用到的mysql和redis全部转换成linux下的服务,10.0.0.227为我虚拟机的ip,此台机器上安装了mysql3306和redis6379
1.构建镜像
将项目打包成ssrm.jar,编写Dockerfile将其构建成finance:1.0镜像.
2.运行镜像
因为本java项目需要mysql和redis环境,所以我们最先运行了mysql和redis容器,此时我们先后手动启动了三个容器。我对外暴露9000的访问端口。
3.访问项目
项目已经基于容器的方式运行成功了。redis中也是有数据写入的。
访问日志也是正常的
手工启动项目不仅繁琐易错,而且还存在一个致命问题:当前应用访问的 mysql 与 redis只能是运行在当前 Docker 宿主机之上的,否则将无法访问到它们。因为在应用的配置文件中已经将 mysql 与 redis 的 IP 进行了硬编码。而使用 Docker Compose 可以解决所有问题
1.定义 compose.yml
修改application.yml配置文件
将 mysql 与 redis 的主机名修改为它们相应服务的名称。
之后重新打包上传
2.启动所有容器
访问应用
Docker compose已经成功将项目运行起来了。
错误排查,可能会遇到端口占用的情况
3.指定各组件名称
compose2.yml
因为指定了的各个组件的别名redis别名为leiredis,mysql别名为leimysql,所以java程序需要修改相应的服务名后重新打包
指定自定义的服务名后,程序访问仍然是正常的
4.查看项目的Docker网络
5.管理服务
访问管理页面
Portainer安装文档
Portainer可以管理集群,
访问portainer管理页面:ip+端口号(10.0.0.227:7100)
安装Harbor
访问Harbor镜像管理中心,配置文件里默认80端口
Harbor安装脚本来自马哥教育王晓春老师
此脚本我在Ubuntu20.04上执行成功了,在RockyLinx8.5中执行失败
两台主机之间怎么拷贝文件
root用户可以直接执行普通lei用户下的文件
脚本执行完了,docker,docker-compose,harbor都安装好了
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ri-ji/12518.html