安装Docker需要的依赖gcc gcc-c++
因为我之前已经安装了,所以现在提示"Nothing to do"
非root用户需要使用sudo提权
安装Docker
查看docker版本
运行hello-world
为什么Docker会比vm虚拟机快
docker images
docker search
docker search 镜像名称
docker pull
下载镜像



docker system df
docker rmi
删除镜像

docker rm

redis前台交互式启动
前台启动很容易被意外终止,窗口一关就没了


redis后台守护进程启动

查看容器内运行的进程

Nginx容器运行

保存拉取好的nginx镜像

删除nginx镜像,通过上一步保存好的nginx.tar包再将nginx加载回来


创建nginx容器

停掉nginx容器


启动nginx容器


查看nginx日志
进入nginx容器内部

ubuntu交互式运行
tomcat交互式运行
当运行完以上命令后,以下为截取的部分tomcat启动运行日志,可以看到tomcat启动成功了。
对外暴露访问端口
专用术语称之为端口映射,将宿主机的8080端口映射为8081,也就是对外我们访问8081端口就等于访问宿主机的8080端口。

Dockerfile 是用于构建 Docker 镜像的脚本文件,由一系列指令构成。通过 docker build命令构建镜像时,Dockerfile 中的指令会由上而下依次执行,每条指令都将会构建出一个镜像,这就是镜像的分层。因此指令越多,层次就越多,创建的镜像就越多,效率就越低。所以在定义 Dockerfile 时,能用一个指令完成的动作就不要分为两条。
为了实现同一个宿主机以及跨宿主机的容器之间网络互联,Docker网络支持5种网络模式
查看Docker默认的网络模式有三个

默认新建的容器使用Bridge模式,创建容器时,docker run命令使用以下选项指定网络模式格式

查看bridge模式信息
发布一个Java的hello world
运行镜像,对外暴露9003端口

进入到容器里面查看

查看容器日志

浏览器访问我暴露出的9003端口

ok,java的hello world的小应用程序就以docker容器的方式运行成功了。


为了保证数据的安全性,在生产环境下安装的 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上了。


单机安装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 停掉。

此时再次启动myredis-1时,发现它成了myredis-3的slave节点


Docker Compose是Docker一个用于定义和管理多容器的容器编排工具
。通过使用Docker Compose,可以在单个YAML文件中配置应用的服务、网络和卷等,简化了多容器应用的部署和管理。解决了手动部署容器的弊端。
安装Docker compose

赋予docker-compose执行权限


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

指定自定义的服务名后,程序访问仍然是正常的

4.查看项目的Docker网络
5.管理服务

访问管理页面

Portainer安装文档
Portainer可以管理集群,


访问portainer管理页面:ip+端口号(10.0.0.227:7100)



安装Harbor
到此这篇docker训练模型(docker基础教程)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/te-jc/51599.html