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

导读:本篇文章讲解 Docker(二)节点通信,数据卷,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

一. 容器间单向通信(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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/63283.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!