<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"> <path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path> </svg> <p></p>
讯享网
安装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 高可用集群搭建
主从集群存在的问题是,其容灾方式只能采用冷处理方案,无法在生产中使用。所以这里要搭建一个“一主两从三哨兵”的高可用集群,以达到热处理的容灾方案。
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端口


讯享网
两台主机之间怎么拷贝文件

root用户可以直接执行普通lei用户下的文件

脚本执行完了,docker,docker-compose,harbor都安装好了

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