docker學習一docker容器映象打包以及建立網路
阿新 • • 發佈:2018-12-26
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