Docker的网络与数据管理

Docker的网络与数据管理

Docker的网络管理

1、Docker默认的网络管理

使用下列命令查看Docker中的所有网络。
$ docker network ls
在这里插入图片描述

  • (1) 创建并启动容器(容器名为networktest,镜像名为ubuntu),在终端窗口中执行如下命令:
    $ docker run -itd --name=networktest ubuntu
    在这里插入图片描述
  • (2)使用网络查看指令查看网络详情:
    $ docker network inspect birdge
    在这里插入图片描述
2、Docker默认的网络管理
  • 创建自定义网络
    (1) 创建一个基于bridge驱动的名称为isolated_nw的网络(–driver bridge可以省略,默认使用bridge的驱动创建网络):
    $ docker network create --driver bridge isolated_nw
    在这里插入图片描述
    (2) 创建网络完成后,查看是否创建成功:
    $ docker network ls
    在这里插入图片描述
    (3) 创建网络完成后,查看所创建网络的详细信息:
    $ docker network inspect isolated_nw
    在这里插入图片描述

  • 创建自定义网络启动容器
    (1) 使用isolated_nw网络启动一个容器:
    $ docker run --network=isolated_nw -itd --name=nwtest busybox
    在这里插入图片描述
    (2) 创建网络完成后,查看容器网络的详细信息:
    $ docker inspect nwtest

  • 为容器添加网络管理
    (1) 容器已经创建完成,为容器添加其他网络管理方式:
    $ docker network connect bridge nwtest
    在这里插入图片描述

  • 断开容器网络连接
    (1) 断开nwtest容器的自定义网络isolated_nw:
    $ docker network disconnect isolated_nw nwtest 在这里插入图片描述

容器之间的网络通信
  • 创建容器
    (1) 创建两个默认使用bridge网络的容器,容器名分别为container1和container2:
    $ docker run -itd --name=container1 busybox
    $ docker run -itd --name=container2 busybox
    在这里插入图片描述
    (2) 创建一个使用自定义的isolated_nw网络的容器,容器名为container3:
    $ docker run --network=isolated_nw -itd --name=container3 busybox
    在这里插入图片描述
    (3) 为container2容器新增一个自定义的isolated_nw网络连接:
    $ docker network connect isolated_nw container2
    在这里插入图片描述
    此时,container2容器同时拥有了bridge和isolated_nw两种网络管理方式
    在这里插入图片描述

  • 容器地址查看
    (1) 进入容器container2,使用ifconfig指令查看当前容器被动态分布的IP地址:
    $ docker attach container2
    在这里插入图片描述
    (2) 进入容器container1和container3,使用ifconfig指令查看当前容器被动态分布的IP地址:
    $ docker attach container1
    $ docker attach container3
    在这里插入图片描述
    容器的IP地址如下:

容器名eth0eth1
container1172.17.0.4
container2172.17.0.3172.18.0.4
container3172.18.0.3
  • 容器通信测试
    (1) 使用命令docker attach container1进入容器container1,使用ping指令连接container3来查看是否能够通信:
    在这里插入图片描述
    在container1容器内不管使用“ping -w 4 IP”还是“ping -w 4 容器名称”的指令都无法连通container3。验证了两个容器不再同一网络环境下,无法通信的判断。
    (2) 使用命令docker attach container2进入容器container2,使用容器IP分别连接container1和container3进行通信测试:
    在这里插入图片描述
    结论:不同容器之间想要相互通信必须在同一个网络环境下;
    默认使用bridge的网络管理的容器可以使用容器IP进行通信,但无法使用容器名进行通信;
    使用自定义网络管理的榕树可以同时使用容器IP和容器名进行通信。
注意事项:

想要在默认网络下使用容器名通信,需要使用–link参数:
$ docker run -itd --name=container4 --link container1:c1 busybox
-itd:指定后台交互方式
–link container1:c1 :将新建的container4容器连接到container1容器且为容器container1定义了别名c1

Docker Swarm集群

1、Docker Swarm的使用
  • 环境搭建
    (1) 准备3台ubuntu系统主机,每台主机都需要安装Docker,且docker的版本为1.12及以上:
    (2) 打开虚拟网络编辑器,新添加虚拟网卡VMnet4:
子网IP子网掩码网关IP(G)DHCP网络类型
192.168.1.0255.255.255.0192.168.1.2NET

    (3) 打开主机的网络配置器,修改IP地址和DNS:

主机IP地址子网掩码DNS
Ubuntu192.168.1.10255.255.255.08.8.8.8
wokr1192.168.1.11255.255.255.08.8.8.8
work2192.168.1.12255.255.255.08.8.8.8

    (4) 修改主机名和主机与IP的映射,b并使之生效:
    $ sudo vi /etc/hostname //进入配置文件后删除原来的主机名,修改为新主机名
    $ sudo /etc/init.d/hostname.sh start //使修改后的主机名生效
    $ sudo vi /etc/hosts //进入配置文件后删除原来的映射关系 //修改映射关系为:IP地址 新的主机名
    $ sudo /etc/init.d/networking start //使修改后的映射关系生效

主机主机名映射关系
UbuntuManager192.168.1.10 Manager
wokr1Work1192.168.1.11 Work1
work2Work2192.168.1.12 Work2
  • 创建Docker Swarm集群
    (1) 在名为Manager的Docker机器上创建Docker Swarm集群:
    $ docker swarm init --advertise-addr 192.168.1.10
    在这里插入图片描述
    (2) 在管理节点,使用docker node ls 指令查看集群节点信息:
    在这里插入图片描述

  • 创建Docker Swarm集群
    (1) 启动另外两台Docker机器worker1和worker2,分别打开终端窗口,执行集群中加入工作节点的指令:
    $docker swarm join --token SWMTKN-1-0zl5jl17u0odtk29grzm1dju0f8ubd pcg1z4rtyyrd1goon5iq-944d2ybe3zp74srigsi5bjv9k 192.168.1.10:2377docker service ls
    在这里插入图片描述
    在这里插入图片描述
    (2) 再次在集群管理节点上使用docker node ls 指令查看集群节点信息:
    $docker node ls
    在这里插入图片描述

  • 向Docker Swarm 集群部署服务
    (1) 使用Docker Hub上自带的alpine镜像为例来部署集群服务:
    $ docker service create --replicas 1 --name helloworld alpine ping docker.com
    在这里插入图片描述

  • 查看Docker Swarm 集群中的部署
    (1) 当服务部署完成后,在管理节点上通过docker service ls指令查看当前集群中的服务列表信息:
    $ docker service ls
    在这里插入图片描述
    (2) 使用docker service inspect指令,查看部署的服务具体详情:
    $ docker service inspect helloworld
    在这里插入图片描述
    (3) 使用docker service ps指令查看制定服务在集群节点上的分配和运行情况:
    $ docker service ps helloworld
    在这里插入图片描述

  • 更改Docker Swarm 集群服务副本数量
    (1) 在管理节点Manager上,更改服务副本数量:
    $ docker service scale helloword=5
    在这里插入图片描述

  • 删除服务
    (1) 在集群管理节点Manager上对于不需要的服务,进行删除:
    $ docker service rm helloworld
    在这里插入图片描述

  • 访问服务
    (1) 在集群管理节点Manager上执行docker network ls指令查看网络列表:
    $ docker network ls
    在这里插入图片描述
    在集群中发布任务时,如果没有指定网络,那么默认使用ingress网络连接,实际开发中,则会使用自定义为overlay的驱动网络进行网络管理。
    (2) 在集群管理节点Manager上,a创建以overlay为驱动的自定义网络:
    $ docker network create \
    --driver overlay \
    my-multi-host-network
    在这里插入图片描述
    (3) 在集群管理节点Manager,部署使用my-multi-host-network网络,服务名为my-web,对外服务端口为80,服务副本数量为2,基于nginx镜像的服务:
    $ docker service create \
    --network my-multi-host-network \
    --name my-web \
    --publish 8080:80
    --replicas 2 \
    nginx
    在这里插入图片描述
    (4) 在集群管理节点Manager上,使用docker service ps my-web指令查看服务的两个副本运行情况:
    $ docker service ps my-web
    在这里插入图片描述
    (5) 打开外界浏览器,使用任意一台节点机器“IP+8080”端口进行访问:
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述

Docker数据存储方式

  • volumes: 存储在主机文件系统中(在Linux系统下存储在/var/lib/Docker/volumes/目录),并由Docker管理,非Docker进程无法修改文件系统的部分。
  • bind mounts:可以存储在主机系统的任意位置,甚至可能是重要的系统文件或目录,在Docker主机或容器上的非Docker进程可以对它们进行任意修改。
  • tmpfs mounts:只存储在主机系统的内存中,并没有写入到主机的文件系统中。

Volumes数据卷管理

1、Volumes数据卷使用
  • 创建并管理数据卷
    (1) 创建数据卷,在Docker主机终端,通过docker volume create指令创建一个名为my-vol的数据卷:
    $ docker volume create my-vol
    在这里插入图片描述
    (2) 查看本地数据卷列表:
    $ docker volume ls
    在这里插入图片描述
    (3) 核查数据卷,查看my-vol数据卷详情:
    $ docker volume inspect my-vol
    在这里插入图片描述
    (4) 删除数据卷,删除my-vol数据卷:
    $ docker volume rm my-vol
    在这里插入图片描述

  • 启动容器并加载数据卷
    (1) 查看本机容器和数据卷,在Docker主机终端,通过docker ps-a和docker volume ls指令查看本地Docker机器上存在的容器和数据卷:
    $ docker ps-a
    $ docker volume ls
    在这里插入图片描述
    (2) 确认查看本机Docker文件系统中的容器和数据卷:
    使用root用户,进入/var/lib/docker目录,即Docker默认在本机上的文件系统目录,查看信息。
    $ su
    # cd /var/lib/docker
    # ll
    在这里插入图片描述
    此时containers和volumes目录为空
    (3) 启动容器挂载数据卷:
    使用docker run 指令创建并启动一个容器,同时挂载一个数据卷。
    $ docker run -d \
    -it \
    --name devtest \
    --mount source=myvol,target=/app \
    busybox:latest
    在这里插入图片描述
    也可以使用-v参数关注数据卷:
    $ docker run -d \
    -it \
    --name devtest \
    -v myvol:/app \
    busybox:latest
    (4) 再次查看本机容器和数据卷列表:
    $ docker ps-a
    $ docker volume ls
    在这里插入图片描述
    在这里插入图片描述
    (5)检查容器详情:
    $ docker inspect
    在这里插入图片描述
    (6)再次确认本机Docker文件系统中的容器和数据卷:
    使用root用户,进入/var/lib/docker目录,即Docker默认在本机上的文件系统目录,然后分别进入containers和volumes目录查看信息。
    $ su
    # cd /var/lib/docker
    # ll
    # cd containers
    # ll
    # cd volumes
    # ll
    在这里插入图片描述

知识点:

  • 网络: Docker中默认非集群环境下有三种网络:bridge、host、none
       bridge:容器创建时默认的网络管理方式,实现宿主机与互联网的通信功能。
       host、none:属于无网络,容器添加这两个网络时不能与外界通信。
    Docker Swarm集群网络列表中增加了一个以bridgeoverlay为驱动的网络。在集群中发布服务时,如果没有指定网络,那么默认使用ingress网络连接,在实际开发中,则会使用自定义的overlay驱动网络进行服务连接。

  • Docker数据存储: 默认情况下,Docker中的数据存放在容器层,有较多的缺点
       当容器不运行的时候,容器中的数据无法持久保持,很难从容器中获取数据;
       当容器与正在运行的主机结合,不能轻易地移动数据;
       容器层需要一个存储驱动程序来管理文件系统,存储驱动程序提供了一个使用Linux内核的联合文件系统,这种额外的抽象化降低了性能。

  • mount的参数

  • type (挂载的类型):可以为bindvolumetmpfs

  • source (挂载源):数据卷名称,对匿名数据卷来说,该字段被省略,该字段可以用sourcesrc表示。

  • destination (挂载点):将文件或目录挂载到容器中的具体路径,该字段可用destinationdsttarget

  • readonly :表示只读。

  • -v (-volume的缩写) 参数

  • 命名卷:第一个字段为数据卷的名称,在给定的主机中是唯一的;
    匿名卷:省略第一个字段。

  • 第二个字段为在容器中挂载数据的文件或目录的路径。

  • 第三个字段是可选字段,为逗号分隔的参数列表,如ro(readyonly,即只读)

注:–mount的参数的顺序可以改变,-v的参数不能改变。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值