欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Docker学习笔记(Docker中网络与数据管理)

程序员文章站 2022-06-03 10:00:49
...

前言

docker默认使用bridge(单主机互联)和overlay(可跨主机互联)两种网络驱动来进行容器的网络管理,其中bridge适用于小型的网络环境,而overlay适用于大型的网络集群

实验步骤

  • Docker网络管理
  • Docker Swarm集群的搭建及测试
  • Volume 数据卷的使用

Docker网络管理

网络的搭建

在进行Docker安装时,Docker就会自动创建三种网络,客户端可以通过网络管理指令进行查看

     docker  network ls

Docker学习笔记(Docker中网络与数据管理)
创建并启动容器(用默认的bridge网络管理方式)

   docker  run -itd  --name = networktest  ubuntu

使用代码,查看当前仓库中所有的镜像文件

    docker ps -a

如图所示:
Docker学习笔记(Docker中网络与数据管理)

后台启动了一个镜像名称为ubtuntu的容器,并为启动后的容器命名为networktest,指令如下:
Docker学习笔记(Docker中网络与数据管理)

使用网络查看指令查看网络详情,具体操作指令如下

   docker network inspect bridge

Docker学习笔记(Docker中网络与数据管理)

自定义网络

Docker中虽然提供了默认网络且使用简单,但为了安全性,更推荐使用自定义的网络进行容器管理
自定义网络分为:

  • Bridge networks(桥接网络)
  • Overlay network(覆盖网络)
  • Custom network plugins(定制网络插件)

自定义bridge网络

在Docker主机上可以使用docker network create来创建网络,指令如下

   docker network create --driver bridge isolated_nw

Docker学习笔记(Docker中网络与数据管理)
使用自定义网络启动容器

   docker run --network=isolated_nw -itd  --name=nwtest busybox

并为其容器添加网络管理

   docker network connect bridge nwtest

其中isolated_nw是自定义创建的网络,而bridge是之后添加的网络管理
Docker学习笔记(Docker中网络与数据管理)
断开容器网络连接

   docker network disconnect isolated_nw nwtest

移除自定义网络

   docker network rm isolated_nw

容器之间的通信

创建容器

   docker run -itd --name =container1 busybox
   docker run -itd --name = container2 busybox

执行上述的指令,会创建两个命名为contain1和contain2的容器,使用默认的bridge方式连接网络

创建一个使用自定义的isolated_nw的网络(之前有创建,若果不小心删除,重新创建即可)的容器,指令如下

   docker run --network =isolated_nw -itd --name=container3 busybox

为container2容器新增一个自定义的isolated_nw网络连接,指令如下

    docker network connect isolated_nw container2

最终,三个镜像之间的关系,如图所示
Docker学习笔记(Docker中网络与数据管理)
因此我们可知,Container2可以与Container1,Container3通讯,而Container1和Container3之间不能进行通讯

Container1网络信息
Docker学习笔记(Docker中网络与数据管理)

Container2网络信息
Docker学习笔记(Docker中网络与数据管理)
Container3网络信息
Docker学习笔记(Docker中网络与数据管理)

最终验证
Docker学习笔记(Docker中网络与数据管理)
在Container2中ping Container2
Docker学习笔记(Docker中网络与数据管理)

Docker Swarm集群的搭建及测试

实验环境

三台运行有Ubuntu 16.04 操作系统的虚拟机,并每台主机中已安装docker环境;

Ip地址说明:

  • manager1 :192.168.43.12

  • worker1 :192.168.43.11

  • worker2 :192.168.43.13

创建Docker Swarm集群

   docker swarm init --advertise-addr 192.168.43.12

此时,Docker已经自动在IP为192.168.43.12的住居上,创建了一个Swarm集群,并将该IP设置为一个管理的节点

执行结果验证:
输入命令:

 docker node ls

出现结果:
Docker学习笔记(Docker中网络与数据管理)

在另外两台主机输入命令

   docker swarm join --token ...........

特别注意:该命令是创建swarm之后,系统反馈的命令,是用于worker节点加入到swarm集群的命令,类似于QQ或者微信的面对面建群,通过输入密码信息加入,此处…省略内容即为密码

如果忘记了该命令可以在管理节点使用命令

   docker swarm join-token worker

该命令会将命令再度出现

Docker学习笔记(Docker中网络与数据管理)

向Docker Swarm集群搭建服务

在集群管理节点上,创建以overlay为驱动的自定义网络,具体操作指令如下:

   docker network create --driver overlay  my-multi-host-network

上述指令以overlay为驱动,创建了一个名为my-multi-host-network的网络

   docker service create --network my-multi-host-network --name my-web \
   --publish 8080:80  --replicas 2   nginx

上述部署命令中,–network参数用于指定服务使用自定义的overlay 驱动网络,my-multi-host-network连接;
–name参数用于制定服务启动后的名称;–publish 参数用于映射对外服务端口;–replicas参数用书指定该服务的副本数量

在管理节点上使用命令

   docker service ps my-web指令查找服务

Docker学习笔记(Docker中网络与数据管理)
最终验证

Docker学习笔记(Docker中网络与数据管理)
Docker学习笔记(Docker中网络与数据管理)

Docker的数据管理

Volumes数据管理

在Docker主机终端,通过docker volumer create指令创建一个名为my-vol的数据卷

     docker volume create my-vol

查看数据卷

    docker volume ls

Docker学习笔记(Docker中网络与数据管理)
核查数据卷

   docker volume  inspect my-vol

显示数据卷的详细情况
Docker学习笔记(Docker中网络与数据管理)

删除数据卷

   docker volume rm my-vol

Volumes使用

查看本机容器和数据卷

     docker ps -a 
     docker volume  ls

确认查看本机Docker文件系统中的容器和数据卷
Docker学习笔记(Docker中网络与数据管理)
这两个目录就是用于存放用户创建的容器和数据卷的。在没有数据卷时,volumes是空的,没有容器时,containers是空的

启动并挂载数据卷

    docker  run -d -it --name --mount source=myvol ,target=/app  busybox:latest

最终,在volumes和containers中将会出现内容
Docker学习笔记(Docker中网络与数据管理)

Docker学习笔记(Docker中网络与数据管理)

错误总结

1.问题描述:该错误是因为容器名已经被占用,所以不能使用该名字,如果非要使用这个名字,则可以先将其删除
Docker学习笔记(Docker中网络与数据管理)
解决方法:输入命令

    docker rm +ID /NAMES  

Docker学习笔记(Docker中网络与数据管理)
Docker学习笔记(Docker中网络与数据管理)

2.问题描述:进入容器时,被拒绝提示说你没有打开容器,但之前已经有过了打开操作

Docker学习笔记(Docker中网络与数据管理)
Docker学习笔记(Docker中网络与数据管理)

解决方法:这是因为在上一次进入之后,退出时,你输入了 exit 或者退出时直接使用了Ctrl+C
这两种退出方式,实际上是关闭了镜像。所以正确的退出方法因该是Ctrl+P+QDocker学习笔记(Docker中网络与数据管理)

结束语

本次的实验,主要是针对了Docker网络与存储进行了指令的熟悉,整体内容呈现,但该篇幅过长,下一次书写博客的时候一定注意。希望大家能够喜欢。