Docker容器分层、容器互联(八)

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 4.镜像分层镜像封层类似于kvm链接克隆,只保留修改过的内容镜像封层的好处:节省磁盘空间,相同的内容只需加载一份到内存

4.镜像分层

镜像封层类似于kvm链接克隆,只保留修改过的内容


镜像封层的好处:节省磁盘空间,相同的内容只需加载一份到内存

image.png

每当使用docker load导入一个镜像时就会发现会分为好几层,layer是层的意思,每一层对应不同执行命令所产生的数据,在使用dockerfile时定义RUN,每一个RUN就是一层,可以用docker image history 镜像名来查看镜像构建的历史

[root@docker01 ~]# docker image history centos69_kod_df:v4

image.png

上图中多行都有大小大于0的,大于0表示这个命令对容器产生了写数据,每次对容器写数据都会产生分层,每层都保留对容器更改过的数据

容器分层的原理


每当运行一个镜像后,镜像处于只读层,当执行命令对容器产生了操作后会多出来一层,作为容器的可写层,并产生一个parent id,再执行一条命令产生了数据就又多出来一层,也是可写层,parent id就是上一层的值,一次类推,当有parent id时,再出现一模一样的操作时就会提示已经缓存过,命令将会很快执行完,当后期修改dockerfile时,如果改的是前面的部分则从修改的地方开始一直到最后都不会再有缓存机制,因此建议每次修改dockerfile都在最后部分修改


5.容器互连

很多时候是需要多个容器相互配合来构建出一个相对稳定的平台,连接的时候需要知道容器各自的IP地址,但是由于一开始不知道,所以就用到了容器互连技术,通过docker run的–link参数,将一个已经存在的容器设置一个好记的名称,当容器启动后,会在本地hosts文件中多出来一行解析,里面包含了要连接的那个容器的IP地址、主机名,这时就可以通过ssh命令进行连接


容器使用–link参数表示要与哪个容器进行互联,被连接的一定要先启动,然后需要去连接的容器就可以使用–link参数与其进行连接,比如有一个PHP+nginx的容器,和一个mysql、nfs的容器,这时就需要先将mysql和nfs容器分别启动,再由php+nginx的容器去连接数据库容器,要连接多个容器则使用多个–link即可

语法格式

docker run -itd --link 已经存在的容器名:别名 镜像名 执行的命令

–link参数是单方向的,也就是说只有需要连接的容器端才会有hosts文件解析,被连接端是没有的

6.利用容器互连实现zabbix的安装

6.1.安装并运行mysql容器

[root@docker01 ~]# docker run --name mysql-server -it -e MYSQL_DATABASE="zabbix" -e MYSQL_USER="zabbix" -e MYSQL_PASSWORD="zabbix_pwd" -e MYSQL_ROOT_PASSWORD="root_pwd" -d -p 3306:3306 mysql:5.7 --character-set-server=utf8 --collation-server=utf8_bin
4cb930948826b988d7c79d58bab5e367dea4c9f5529935a53a63bfd79a7b85f1
命令解释:
  --name指定容器的名字为mysql-server
  -e指定环境变量
  -p端口映射
  --chara表示dockerfile中用的entrypoint的启动命令,这边表示启动的参数

6.2.安装并运行zabbix-java-gateway容器

[root@docker01 ~]# docker run --name zabbix-java-gateway -it -d zabbix/zabbix-java-gateway:latest
501014ebd79f610043081bb9aca129b7d9f44970413b741257bfeb59f99f5dcb
命令解释:
  --name指定容器的命令

6.3.安装并运行zabbix配置mysql容器

[root@docker01 ~]# docker run --name zabbix-server-mysql -itd -e DB_SERVER_HOST="mysql-server" -e MYSQL_DATABASE="zabbix" -e MYSQL_USER="zabbix" -e MYSQL_PASSWORD="zabbix_pwd" -e MYSQL_ROOT_PASSWORD="root_pwd" -e ZBX_JAVAGATEWAY="zabbix-java-gateway" --link mysql-server:mysql --link zabbix-java-gateway:zabbix-java-gateway -p 10051:10051 zabbix/zabbix-server-mysql:latest
58f5a0ee0bdae836cfbc172a8b713298b652cb5d808fa537bf2ead2063598cf2
--name指定容器的名字
-e环境变量
--linke mysql-server:mysql 表示与mysql-server的容器互连,简称为mysql,必须是mysql-server启动后才可以指定
--link zabbix-java-gateway:zabbix-java-gateway表示与zabbix-java-gateway容器互连,简称为zabbix-java-gateway,必须在启动当前容器之前就要启动完成

6.9.安装并运行zabbix+nginxweb界面

[root@docker01 ~]# docker run --name zabbix-web-nginx-mysql -itd -e DB_SERVER_HOST="mysql-server" -e MYSQL_DATABASE="zabbix" -e MYSQL_USER="zabbix" -e MYSQL_PASSWORD="zabbix_pwd" -e MYSQL_ROOT_PASSWORD="root_pwd" --link mysql-server:mysql --link zabbix-server-mysql:zabbix-server -p 80:8080 zabbix/zabbix-web-nginx-mysql:latest
11d2065610e215d7b23ba70f9fd965b65ba09598b5a4e2ea340a340aa4eadb1f
--name指定名字
-e指定环境变量
--link mysql-server:mysql表示与mysql容器互连,将mysql容器的ip地址主机名写到hosts解析中
--link zabbix-server-mysql表示与zabbi-server-mysql容器互连
注意最新版本的zabbix-web-nginx-mysql容器用的端口是8080,因此要将本机的80端口映射成容器的8080端口否则会访问不到页面

6.10.登录zabbix

账号Admin密码zabbix

image.png

6.11.添加一个主机


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
1月前
|
监控 Kubernetes 安全
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
蒋星熠Jaxonic,技术探索者,以代码为笔,在二进制星河中书写极客诗篇。专注Docker与容器化实践,分享从入门到企业级应用的深度经验,助力开发者乘风破浪,驶向云原生新世界。
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
|
1月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
270 5
|
1月前
|
监控 Linux 调度
【赵渝强老师】Docker容器的资源管理机制
本文介绍了Linux CGroup技术及其在Docker资源管理中的应用。通过实例演示了如何利用CGroup限制应用程序的CPU、内存和I/O带宽使用,实现系统资源的精细化控制,帮助理解Docker底层资源限制机制。
137 6
kde
|
1月前
|
存储 关系型数据库 MySQL
MySQL Docker 容器化部署全指南
MySQL是一款开源关系型数据库,广泛用于Web及企业应用。Docker容器化部署可解决环境不一致、依赖冲突问题,实现高效、隔离、轻量的MySQL服务运行,支持数据持久化与快速迁移,适用于开发、测试及生产环境。
kde
317 4
|
3月前
|
Kubernetes Docker Python
Docker 与 Kubernetes 容器化部署核心技术及企业级应用实践全方案解析
本文详解Docker与Kubernetes容器化技术,涵盖概念原理、环境搭建、镜像构建、应用部署及监控扩展,助你掌握企业级容器化方案,提升应用开发与运维效率。
700 108
|
4月前
|
存储 监控 测试技术
如何将现有的应用程序迁移到Docker容器中?
如何将现有的应用程序迁移到Docker容器中?
382 57
|
4月前
|
存储 监控 Java
如何对迁移到Docker容器中的应用进行性能优化?
如何对迁移到Docker容器中的应用进行性能优化?
309 59