docker训练模型(docker基础教程)

docker训练模型(docker基础教程)安装 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需要的依赖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都安装好了
在这里插入图片描述

编程小号
上一篇 2025-02-05 14:51
下一篇 2025-03-08 15:33

相关推荐

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