1. docker 将容器导出
为了将容器迁移到其他的地方运行,可以将容器导出,
docker export container_name/container_id > service_name.tar.gz
拷贝到其他的机器后,可以导入该容器:
cat service_name.tar.gz|docker import - container_name:tag
2. docker 镜像导入导出
镜像保存,迁移到其他地方
docker save image_name | gzip images_name.tar.gz
当拷贝到其他的地方后,导入方式如下:
docker load -i image_name.tar.gz
3. 两者区别
容器导入导出会丢失元数据和历史层,无法通过docker tag [layer_id] [image_name]进行回滚,而镜像的方式可以
4. docker创建网络
docker创建的网络类似于一个交换机,连接到此网络的容器可以相互通信
Create a network
Options:
--aux-address value Auxiliary IPv4 or IPv6 addresses used by Network
driver (default map[])
-d, --driver string Driver to manage the Network (default "bridge")
--gateway value IPv4 or IPv6 Gateway for the master subnet (default [])
--help Print usage
--internal Restrict external access to the network
--ip-range value Allocate container ip from a sub-range (default [])
--ipam-driver string IP Address Management Driver (default "default")
--ipam-opt value Set IPAM driver specific options (default map[])
--ipv6 Enable IPv6 networking
--label value Set metadata on a network (default [])
-o, --opt value Set driver specific options (default map[])
--subnet value Subnet in CIDR format that represents a
network segment (default [])
以在单机环境搭建bgp网络协议为例,网络拓扑如下:
首先新建三个网络,指定网段和网关:
docker network create [-d bridge] --subnet=10.10.0.1/24 - -gateway=10.10.0.1 net
docker network create [-d bridge] --subnet=10.0.10.1/24 - -gateway=10.0.10.1 net1
docker network create [-d bridge] --subnet=10.0.11.1/24 –gateway=10.0.11.1 net2
启动两个容器:
docker run –d - - name Quagga_a --network=net1 [ -- ip 10.0.10.x] cumulusnetworks/quagga:latest #可以指定该网段的任意IP
docker run –d - - name Quagga_b --network=net2 [ -- ip 10.0.11.x] cumulusnetworks/quagga:latest
将 Quagga_a和Quagga_b连接到net网络:
docker network connect net Quagga_a
docker network connect net Quagga_b
然后检查net分配给两个容器的ip地址,作为bgp的邻居
分别进行容器,配置bgp:
docker exec –it quagga_a bash # 已进入容器a
vtysh # 进入配置终端
configure t
router bgp 100
neighbor 10.10.0.3 remote-as 200
network 10.0.10.1/24 #此处的网络前缀是指AS=100的网络前缀
exit
exit
write # 保存配置
show ip bgp summary
容器b的配置类似
此时net1和net2可以通过bgp进行通信。
如果不创建net网络,可以使用如下方式创建一对接口:
Pid1=docker inspect –f ‘{{.State.Pid}}’ container1_id
Pid2=docker inspcetr –f ‘{{.State.Pid}}’ container2_id
Mkdir –p /var/run/netns
Ln -s /proc/$pid1/ns/net /var/run/netns/$pid1
Ln -s /proc/$pid2/ns/net /var/run/netns$/pid2
创建一对peer接口,配置路由
Ip link add A type veth peer name B
Ip link set A netns $pid1
Ip netns exec $pid1 ip addr add 10.1.1.1/24 dev A
Ip netns exec $pid1 ip link set A up
Ip netns exec $pid1 ip route add 10.1.1.2/24 dev A
Ip link setr B netns $pid2
Ip netns exec $pid2 ip addr add 10.1.2.1/24 dev B
Ip netns exec $pid2 ip link set B up
Ip netns exec $pid2 ip route add 10.1.2.1/24 dev B