实现docker之跨主机container通信的方法

    

一、实验环境准备

准备好两台主机作为宿主机,主机应设静态ip,且在同一网段并能联网。

宿主机信息:

Host1-ip192.168.135.77(网卡设备为ens33,作为私有仓库服务端)

Host2-ip192.168.135.75(网卡设备为ens33,作为私有仓库客户端)

gateway192.168.128.1

netmask255.255.248.0

二、安装docker与搭建本地私有镜像仓库

1、关闭防火墙和Selinux

vi /etc/selinux/config enforceing改为disabled

chkconfig firewall off      关闭防火墙

reboot 重启系统使之生效

步骤1的主要作用是便于安装docker和其他系统设置

2、安装docker

yum install docker

service docker restart       重启docker服务

3、搭建docker本地私有库

docker pull registry   拉取仓库镜像

docker run –d –p5000:5000 –v /opt/data/registry:/tmp/registry registry 

这里要注意的是,docker的本地私有仓库镜像默认放在容器内的/tmp/registry,要想保存该仓库内的镜像,必须将本地的某个文件夹挂载在该目录下。

docker runregistry_iamge_id /bin/sh          启动该仓库镜像

启动该仓库镜像后才能在本地pullpush镜像

push镜像时可能会失败,可执行如下操作解决:在”/etc/docker/“目录下,编辑”daemon.json“文件。

在文件中写入{ "insecure-registries":["192.168.135.77:5000"]}

注意:私有仓库的服务端和客户端都要进行这一操作。

三、制作自己需要的基础镜像

大多数情况下,可以去官方仓库拉取基础镜像。

docker  pull linux_image

也可以自己制作基础镜像

1、制作docker的基础的Linux系统镜像

运行下面命令

tar-cvpf /tmp/system.tar --directory=/ --exclude=proc --exclude=sys --exclude=dev--exclude=run --exclude=boot .(“不要忽略结尾处的”.””)

此命令是,将宿主机的根目录下大部分文件打成tar包并存放在当前目录,也可以设置其他目录替换“.”。

tar文件导入到docker

dockerimport system.tar centos:7 system.tartar包名,centos:7为导入docker后的镜像名。

2、启动该镜像制作容器

通过Dockerfile的方式启动镜像,制作容器,此为其中一种方式。

dockerbuild –t=’centos’ .

这一操作可以启动定制的容器,且Dockerfile与其他需要配合的软件需处于当前目录。(注意:不要落下最后的“.”,它表示dockerfile所处位置)

dockerfile内,可以配置容器的ssh服务,以及安装其他软件和配置其运行环境。

另一种方式为直接启动新建的docker基础系统镜像

dockerrun -it centos:7 /bin/bash

可以选择重命名容器名

dockerrename old容器名  new容器名

登录第一个方法新建的容器

dockerexec –it 容器id/bin/bash

可以选择对容器进行操作,然后将容器状态制作成新的image

docker  commit container_id new_image_name

四、push刚建好的新镜像至本地私有仓库

push镜像之前需要对目标镜像tag

docker tag des_image localhost_ip:5000/des_image

然后push镜像

docker push local_ip:5000/des_image

查看上传的image

curl-XGET 192.168.135.77:5000/v2/_catalog

从私有仓库pull镜像

dockerpull 192.168.135.77:5000/centos:tag_name

五、安装pipework并新建网桥

1、安装各类工具

安装git

yum install git

安装pipework

git clone https://github.com/jpetazzo/pipework

使pipework命令生效

cp ~/pipework/pipework /usr/local/bin/

安装相应依赖软件bridge-utils(网桥)

yum install iputils-arping bridge-utils –y

2、更改宿主机网络配置文件

网络配置如下:

cd /etc/sysconfig/network-scripts/ifcfg-ens33

cp ifcfg-ens33 ifcfg-br0

vi  ifcfg-ens33删除ipnetmask,新增BRIDGE=br0

vi  ifcfg-br0 TYPE=BridgeDEVICE=br0

Service network restart

Service docker restart

六、开启容器并为容器配置ip

开启一个image并指定网络模式为none(这样,创建的容器就不会通过docker0自动分配ip了,而是根据pipework工具自定ip指定)

docker run -itd --net=none --name=my_centos image_id /bin/bash

给该容器配置网络(注意网卡里的gateway不能缺失)

pipework  br0 –i ens33 my_centos192.168.135.73/[email protected]

-i指定网卡名,后面为指定containeripnetmaskgateway

登录该容器

docker exec -it my_centos /bin/bash

ifconfig ens33 若无ifconfig则可yum安装net-tools工具

七、Host-2制作dockercontainer

从私有仓库pull镜像

dockerpull 192.168.135.77:5000/centos:tag_name

安装docker,重复步骤五、六。

八、Host-1Host-2内的docker container互相ping

验证是否能ping通。

互联网参考资料:

1https://blog.csdn.net/linux_player_c/article/details/53117238

2https://www.cnblogs.com/chen110xi/p/6349454.html

你可能感兴趣的:(实现docker之跨主机container通信的方法)