🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] > 实现目标 **一台机器多个容器,每个容器都有独立的ip暴露在局域网,不需要映射端口到宿主机。** ### **准备** **** `docker` ``` $ yum install -y docker ``` `pipework` 配置`Docker`固定IP ``` wget https://github.com/jpetazzo/pipework/archive/master.zip yum install -y unzip unzip master.zip //拷贝pipework到 /usr/bin/下 cp pipework\-master/pipework /usr/bin/ //赋予该命令执行权限 chmod +x /usr/bin/pipework ``` 安装`brctl` ``` yum install -y bridge-utils ``` ### **开始** **** 停止docker ``` /etc/init.d/docker stop ``` 停止docker默认网桥 删除`docker`默认网桥,docker 重启之后又会自动出现(不必理会这一步) ``` # ifconfig docker0 down // 如果没有ifconfig指令 yum install -y net-tools brctl delbr docker0 ``` 自定义网桥 ``` //自定义网桥 brctl addbr br0 //给自定义网桥指定IP和子网(宿主机的ip) ifconfig br0 192.168.0.116 netmask 255.255.255.0 //查看发现自定义网桥已经启动 ifconfig | grep br0 //查看ip信息 ifconfig ``` 网络设置注意事项 (新建网桥`br0`之后需要写配置文件) ``` 在 /etc/sysconfig/network-script/ 目录下 # 宿主机的网卡设置 ifcfg-eth0配置: DEVICE=eth0 TYPE=Ethernet ONBOOT=yes BRIDGE=br0                       #注意添加此项 不要奇怪,这里没有BOOTPROTO项是完全正常的,请继续操作。(如果有把他注释掉) # docker的网卡设置 ifcfg-br0的配置: DEVICE=br0 TYPE = Bridge STP=no //重要 如果是on 则宿主机不能上网 ONBOOT=yes BOOTPROTO=static IPADDR=192.168.0.116                     #原先eth0的IP 宿主机的ip NETMASK=255.255.254.0            #原先eth0的子网掩码 GATEWAY=192.168.0.1             #网关 DNS1=114.114.114.114 ``` 指定网桥写入`docker`配置文件 ``` //指定网桥写入docker配置文件 echo 'DOCKER_OPTS="-b=br0" ' >> /etc/default/docker //启动docker service docker start //成功启动,并且成功加载了br0 ps -ef | grep docker ``` 使用`pipework`给docker容器分配ip ``` pipework 网桥 容器名称 ip@网关 pipework br0 javadocker 192.168.0.100/23@192.168.0.1 ``` **注意事项** ``` 设值网桥跟网桥的配置文件顺序不重要。重要的是网桥设置的ip要跟配置文件的ip一样 不然会出现网络重启的错误 ping不通baidu 设置docker的网卡文件 ifcfg-br0的时候 设置参数 `STP=off` ``` ***** ### **第二种方法** **** 使用docker 的新特性 **macvlan** ``` docker network create -d macvlan --subnet=192.168.0.0/24 --gateway=192.168.0.1 -o parent=eth1 mynet docker run --restart always --net mynet --name s1 --ip 192.168.0.112 --privileged=true -itd b398467eb4fe /bin/bash docker run --net mynet --ip 192.168.0.117 --name s1 -it centos7/im_server:v1 /bin/bash ``` 设置macvlan脚本 `mynte.sh` ``` docker network create -d macvlan --subnet=192.168.0.0/24 --gateway=192.168.0.1 -o parent=eth1 mynet ``` Dockerfile ``` FROM centos:7.2.1511 RUN yum install -y net-tools libgomp.x86_64 WORKDIR /usr/src/ ADD ./im_server/im_server_2019-08-20-09-47-54.tar.gz /usr/src/ RUN cd /usr/src/oneinstack \ && ./install.sh -a CMD ["/etc/init.d/bigant_root"] ``` 创建镜像跟容器的脚本docker.sh ``` docker build -t centos7/im_server:v1 . docker run --net=mynet --ip=192.168.0.112 -itd centos7/im_server --name s1 /bin/bash ```