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

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 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.添加一个主机


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
7天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
30 2
|
5天前
|
运维 Cloud Native 虚拟化
一文吃透云原生 Docker 容器,建议收藏!
本文深入解析云原生Docker容器技术,涵盖容器与Docker的概念、优势、架构设计及应用场景等,建议收藏。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
一文吃透云原生 Docker 容器,建议收藏!
|
6天前
|
缓存 监控 开发者
掌握Docker容器化技术:提升开发效率的利器
在现代软件开发中,Docker容器化技术成为提升开发效率和应用部署灵活性的重要工具。本文介绍Docker的基本概念,并分享Dockerfile最佳实践、容器网络配置、环境变量和秘密管理、容器监控与日志管理、Docker Compose以及CI/CD集成等技巧,帮助开发者更高效地利用Docker。
|
7天前
|
监控 持续交付 Docker
Docker 容器化部署在微服务架构中的应用有哪些?
Docker 容器化部署在微服务架构中的应用有哪些?
|
7天前
|
监控 持续交付 Docker
Docker容器化部署在微服务架构中的应用
Docker容器化部署在微服务架构中的应用
|
7天前
|
安全 持续交付 Docker
微服务架构和 Docker 容器化部署的优点是什么?
微服务架构和 Docker 容器化部署的优点是什么?
|
10天前
|
运维 开发者 Docker
Docker Compose:简化容器化应用的部署与管理
Docker Compose:简化容器化应用的部署与管理
|
9天前
|
NoSQL Redis Docker
【赵渝强老师】使用Docker Compose管理容器
Docker Compose 通过 YAML 文件管理多个容器,简化复杂系统的部署和管理。本文介绍了 Docker Compose 的基本概念,并通过一个包含 Redis DB 和 Python Web 模块的示例,展示了如何使用 Docker Compose 部署和管理多容器应用。手动部署和 Docker Compose 部署的对比突显了 Docker Compose 在系统复杂度增加时的优势。
|
17天前
|
Kubernetes 监控 开发者
掌握容器化:Docker与Kubernetes的最佳实践
【10月更文挑战第26天】本文深入探讨了Docker和Kubernetes的最佳实践,涵盖Dockerfile优化、数据卷管理、网络配置、Pod设计、服务发现与负载均衡、声明式更新等内容。同时介绍了容器化现有应用、自动化部署、监控与日志等开发技巧,以及Docker Compose和Helm等实用工具。旨在帮助开发者提高开发效率和系统稳定性,构建现代、高效、可扩展的应用。
|
13天前
|
关系型数据库 MySQL API