Docker數據卷和網絡設置

本次將主要介紹Docker的兩個重要技術點:網絡設置和數據卷。

1. 數據卷

數據卷提供了一種宿主機和容器共享數據的方式,有些時候需要用它來做持久化和數據共享。當做持久化時,通常數據卷會比較大,可以將其放在單獨的磁盤、捲上,這個時候容器只是一個執行環境。當做數據共享時,可以用於開發和測試分佈式系統。數據卷主要通過參數-v來指定。

1.1創建一個數據卷

[root@izuf6bh06kx49y4h12z95sz ~]#docker run -it --name evcgtest -v /evcgdata lnt-evcg:1.0 /bin/bash

該命令創建了一個容器evcgtest,同時爲容器創建了一個/evcgdata數據卷,/evcgdata是容器內部的目錄,對應的宿主上目錄在/var/lib/docker/volumes下面,可以通過docker inspect命令查看。

[root@izuf6bh06kx49y4h12z95sz ~]#docker inspect 2e277999f107
[
    {
	......
        "Mounts": [
            {
                "Type": "volume",
                "Name": "f18a8393c21f88e18841f69340a836c8b4a330998aaa4387baa0e016c0f32198",
                "Source": "/var/lib/docker/volumes/f18a8393c21f88e18841f69340a836c8b4a330998aaa4387baa0e016c0f32198/_data",
                "Destination": "/evcgdata",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ],
       ......
    }
]

可以看出"Destination": "/evcgdata"是容器的持久化目錄,"Source": "/var/lib/docker/volumes/f18a8393c21f88e18841f69340a836c8b4a330998aaa4387baa0e016c0f32198/_data"是對應宿主機的目錄。

1.2映射一個外部卷

如果以-v src:des的方式指定,那麼容器會直接將宿主機的指定目錄掛載到容器內部。

[root@izuf6bh06kx49y4h12z95sz ~]#docker run -it --name evcgtest -v /mnt/evcg/data:/evcgdata lnt-evcg:1.0 /bin/bash

上面命令直接將宿主機/mnt/evcg/data目錄映射到了容器/evcgdata目錄。實際使用中,我們可以將信息系統產生的日誌、上傳的圖片等資源通過數據卷存放到宿主機指定目錄,進行持久化保存。

1.3容器數據卷

由於容器本身包含文件系統,那麼當然也可以把容器的卷分享給另一個容器,通過--volumes-form來映射。創建一個容器數據卷,注意使用create創建即可。具體步驟如下:

[root@izuf6bh06kx49y4h12z95sz ~]#docker create -v /sharedata --name sharedata centos

通過—volumes-form使用容器數據卷。

[root@izuf6bh06kx49y4h12z95sz ~]# docker run -it --name dbtest --volumes-from sharedata centos /bin/bash
[root@a1e26bd877d7 /]# ls
bin dev etc home lib lib64 media mnt opt proc root run sbin sharedata srv sys tmp usr var

可以看到新創建的dbtest容器中有容器卷的sharedata目錄。

2. 網絡設置

Dokcer 通過使用 Linux 橋接提供容器之間的通信,Docker的網絡模式有四種,默認使用bridge模式,通過主機和容器的端口映射通信。

none

使用--net=none 指定,容器不能訪問外部網絡,內部存在迴路地址。

bridge

使用--net=bridge 指定,bridge是docker的默認網絡設置,橋接是在主機上的,通常爲docker0,每啓動一個容器時,會爲該容器創建一個veth,veth一端連接到docker0,另一端連接到容器eth0.

host

使用--net=host 指定,host就是使用宿主機的網絡,和宿主機公用一個Network Namespace,容器不會虛擬出自己的網卡和IP等,而是使用宿主機的IP和端口。但容器的文件系統、進程列表等還是與宿主機隔離的。

container

使用--net=container:containerid 指定,該模式指定新創建的容器和已經存在的另一個容器共享一個Network Namespace,而不是和宿主機共享。同樣兩個容器除了網絡方面,其它仍然是隔離的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章