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.添加一个主机


相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
9天前
|
数据库 Docker 容器
docker容器为啥会开机自启动
通过配置适当的重启策略,Docker容器可以在主机系统重启后自动启动。这对于保持关键服务的高可用性和自动恢复能力非常有用。选择适合的重启策略(如 `always`或 `unless-stopped`),可以确保应用程序在各种情况下保持运行。理解并配置这些策略是确保Docker容器化应用可靠性的关键。
158 93
|
13天前
|
Ubuntu NoSQL 开发工具
《docker基础篇:4.Docker镜像》包括是什么、分层的镜像、UnionFS(联合文件系统)、docker镜像的加载原理、为什么docker镜像要采用这种分层结构呢、docker镜像commit
《docker基础篇:4.Docker镜像》包括是什么、分层的镜像、UnionFS(联合文件系统)、docker镜像的加载原理、为什么docker镜像要采用这种分层结构呢、docker镜像commit
139 70
|
12天前
|
Ubuntu NoSQL Linux
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
83 6
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
|
23天前
|
搜索推荐 安全 数据安全/隐私保护
7 个最能提高生产力的 Docker 容器
7 个最能提高生产力的 Docker 容器
110 35
|
10天前
|
数据库 Docker 容器
docker容器为啥会开机自启动
通过配置适当的重启策略,Docker容器可以在主机系统重启后自动启动。这对于保持关键服务的高可用性和自动恢复能力非常有用。选择适合的重启策略(如 `always`或 `unless-stopped`),可以确保应用程序在各种情况下保持运行。理解并配置这些策略是确保Docker容器化应用可靠性的关键。
40 17
|
22天前
|
Ubuntu Linux 开发工具
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
Docker 是一个开源的容器化平台,允许开发者将应用程序及其依赖项打包成标准化单元(容器),确保在任何支持 Docker 的操作系统上一致运行。容器共享主机内核,提供轻量级、高效的执行环境。本文介绍如何在 Ubuntu 上安装 Docker,并通过简单步骤验证安装成功。后续文章将探讨使用 Docker 部署开源项目。优雅草央千澈 源、安装 Docker 包、验证安装 - 适用场景:开发、测试、生产环境 通过以上步骤,您可以在 Ubuntu 系统上成功安装并运行 Docker,为后续的应用部署打下基础。
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
|
11天前
|
运维 Java 虚拟化
《docker基础篇:1.Docker简介》,包括Docker是什么、容器与虚拟机比较、能干嘛、去哪下
《docker基础篇:1.Docker简介》,包括Docker是什么、容器与虚拟机比较、能干嘛、去哪下
72 12
|
12天前
|
Kubernetes Linux 虚拟化
入门级容器技术解析:Docker和K8s的区别与关系
本文介绍了容器技术的发展历程及其重要组成部分Docker和Kubernetes。从传统物理机到虚拟机,再到容器化,每一步都旨在更高效地利用服务器资源并简化应用部署。容器技术通过隔离环境、减少依赖冲突和提高可移植性,解决了传统部署方式中的诸多问题。Docker作为容器化平台,专注于创建和管理容器;而Kubernetes则是一个强大的容器编排系统,用于自动化部署、扩展和管理容器化应用。两者相辅相成,共同推动了现代云原生应用的快速发展。
74 11
|
28天前
|
Unix Linux Docker
CentOS停更沉寂,RHEL巨变限制源代:Docker容器化技术的兴起助力操作系统新格局
操作系统是计算机系统的核心软件,管理和控制硬件与软件资源,为用户和应用程序提供高效、安全的运行环境。Linux作为开源、跨平台的操作系统,具有高度可定制性、稳定性和安全性,广泛应用于服务器、云计算、物联网等领域。其发展得益于庞大的社区支持,多种发行版如Ubuntu、Debian、Fedora等满足不同需求。
58 4
|
1月前
|
监控 NoSQL 时序数据库
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
262 77