Docker(二)节点通信,数据卷

本文详细介绍了Docker容器之间的通信方式,包括通过link实现单向通信,使用Bridge网桥实现双向通信,以及容器间的数据共享。重点讲解了如何通过name进行ping操作,创建和使用网桥,以及Volume数据卷的设置。此外,还提到了Docker Compose作为容器编排工具在创建开源博客中的应用,展示了容器编排的便捷性。
摘要由CSDN通过智能技术生成

一. 容器间单向通信(link)

通过link完成容器间的单向通信

image-20211031181937623

1. 单向通信

docker run -d --name web tomcat

docker run -d --name database -it centos /bin/bash

为什么第二个添加-it和/bin/bash

创建容器加-it和bin/bash的目的:centos创建完容器自动进入到退出的状态,若想让容器的状态一直保持运行,需要进入-it交互模式进入/bin/bash,通过-d在后台运行

docker inspect 容器id

查看容器原始信息

NetworkSettings中IPAddress为所分配的虚拟ip地址

所有的ip都被docker进行管理

两个容器间,进入一个容器后,可通过ip,ping通另一个,但用name名ping不通,需要进行网络的设置

docker rm -f 容器id

docker run -d --name web --link database tomcat

2. 为什么要用name去完成ping,而不用ip呢

ip地址无论怎么发生变化,name还叫database,就可以连接

二. 容器的双向通信(Bridge网桥)

1. 概念

通过网桥bridge完成多组容器间的双向通信

双向互联:通过创建一个新的网桥,将已有的容器和网桥进行绑定,默认所有与网桥绑定的容器之间都是互联互通的

image-20211031145909696

2. 网桥的作用

网桥

1.docker环境和宿主环境的通信者

2.对容器从网络层面上进行分组

把2个容器绑定到网桥上,2个容器的数据能互通

3. 网桥搭建

docker run -d --name web tomcat

docker run -d -it -name database centos /bin/bash

docker ps

docker network ls

network:网络服务的命令

ls:列出当前docker底层网络的信息

默认每个docker容器都会提供一个默认的网桥,网桥承担容器和外面互通的桥梁

docker network create -d bridge my-bridge

新建网络的类型:网桥

创建后,返回一个id

docker networkd ls

展示network列表信息

会出现一个my-bridge的网桥

3. 容器和网桥的绑定

docker network connect my-bridge web

容器和网桥绑定

my-bridge:网桥的名称

web:容器的名称

docker network connect my-bridge database

两个容器就互通了

两个容器之间都绑定bridge,两个容器隶属于my-bridge的分组中

# 验证:

1. 进入容器
docker exec -it 容器id /bin/bash
ping web(看是否能ping通name为web的容器)

2. 进入另一个tomcat容器
docker exec -it 容器id /bin/bash
ping database

4. 网桥实现原理

创建网桥的背后,在docker中,每当创建一个网桥,在宿主机上安装一个虚拟网卡,这个虚拟网卡也承担起网关的作用,web和database通过虚拟网卡绑定,在docker容器内部,就可以实现互联互通,从一个容器发出的数据,都可以通过网关找到另一个容器来接收数据,反之,同理

虚拟网卡所构成的网关就形成了一个内部通路,只要新的容器绑定到虚拟网卡上,就可以和其他绑定虚拟网卡互连互通

虚拟网卡的ip地址是虚拟,但和外部通信的话虚拟网卡需要和宿主机的物理网卡做地址转换,和外网通信

image-20211031151241687

三. Volume容器间共享数据

volume在计算机中翻译为数据卷

1. 容器间共享数据的目的

如果页面文件发生了变化,每个容器间都需要进行更新

image-20211031152053173

2.数据共享方案

在宿主机间开辟一块空间,被其他容器进行共享,容器内部不在持有页面文件,页面文件存放在宿主机的某一个磁盘上,通过docker环境实现多个容器间读取同一份文件,以后只需更新宿主机所创建磁盘目录中的web页面文件即可,使所有容器生效

image-20211031152424839

3. 数据卷volume设置

  • 共享方式一

docker run --name 容器名 -v 宿主机路径:容器内挂载路径 镜像名

缺陷:若写错目录一个字母都带来挂载的失败,每个挂载都需要重新写一遍目录

  • 共享方式二

通过创建共享容器完成挂载

  1. docker create --name webpage -v /webapps:/usr/local/tomcat/webapps tomcat /bin/true

    创建共享容器

    -v:设置容器挂载点

    webapps为宿主机挂载点

    usr/local/tomcat/webapps:为容器内部的所要被挂载的路径

    /bin/bash的作用是因为docker后台必须运行一个进程,否则容器就会退出

  2. docker run --volumes-from webpage --name t1 -d tomcat

    根据所创建共享容器webpage挂载信息使用到新的容器上

    –volumes-from:从名称获取挂载点相关信息,本质和方式一种的-v一样,只不过抽取一个挂载点

总结:

实际开发中,根据挂载容器的多少选择方式一或者方式二


实操:

  1. 创建客户端自定义的volume-webapps目录,里面包含html文件
  2. 上传到linux的/usr/webapps
  3. cd /usr/webapps
  4. 创建挂载 docker run --name t1 -p 8000:8080 -d -v /usr/webaps:/usr/local/tomcat/webapps tomcat
  5. 访问ip:port:8000/volume-webapps/index.html

查看容器内部是否含有volume-webapps

  1. 进入容器内部:docker exec -it 容器id /bin/bash
  2. cd webapps
  3. cd volume-webapps能查看到index.html

数据卷的验证

  1. cd /usr/webapps/volume-webapps
  2. vim index.html
  3. 修改index.html,保存
  4. 直接刷新浏览器,验证成功

方式2:共享容器简化上面的过程

  1. cd /usr/webapps

  2. docker create --name webpage -v /usr/webapps:/usr/local/tomcat/webapps tomcat /bin/true

    bin/true:没有含义,占位符

    挂载点名称:webpage

  3. docker run -p 8002:8080 --volumes-from webpage --name t1 -d tomcat

    通过制定容器的挂载点来进行端口挂载

    挂载点的成立:抽取了目录,不用像方式1挂载时去写冗余的目录

    –volumes-from:从哪个挂载过得路径,相当于-v 挂载路径:被挂载的路径

四. Docker compose容器编排工具

通过解析脚本,自动安装ngins,tomcat,mysql容器,彼此间形成依赖联系,每个容器所需的配置文件都可进行相应的绑定

1. 容器编排

先部署哪个,在部署哪个,宿主机部署容器的过程

docker compse

  1. 单机多容器部署工具,只能在一台宿主机上进行部署,集群环境通过docker swarm或k8s来解决
  2. 通过yml文件定义多容器如何部署
  3. win/mac默认提供Dokcer Compose,像服务器系统,如Linux需安装centos

docker compose安装

官网:https://docs.docker.com/compose/install/

image-20211031160613075

因为win和mac默认提供doker compose,所以不用安装

Linux系统安装docker compose

命令如下图,只有2个命令就可安装好docker compose

1.获取docker compose并安装,也许会拒绝访问,要多试几次

2.为安装的docker compose授权

image-20211031160910871

docker-compose -version

查看docker-compose版本

2. 通过docker compose创建开源博客

image-20211031161323199

根据官方步骤,依次执行

https://docs.docker.com/samples/wordpress/

  1. cd /usr

  2. mkdir wordpress

  3. cd wordpress

  4. vim docker-compose.yml

    image-20211031161445279
  5. 添加官网所提供的的yml内容

    image-20211031161803593
  6. 解析yml脚本 docker-compose up -d

    up : 代表解析,自动部署

    -d : 后台执行

    执行后的控制台:

    image-20211031181444576

    创建了2个容器

    1.mysql5.7

    2.wordpress:应用容器

    这时使用docker ps

    image-20211031181615956

    在应用容器上wordpress自动做了端口映射,8000-》80

在客户端浏览器中输入ip:port(8000)

image-20211031181741342

创建完后,登录

image-20211031181837133

登录后展示

image-20211031181858406

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值