橙子建站輸入了驗(yàn)證碼有危險嗎sem工具是什么
目錄
1、前言
2、Docker實(shí)現(xiàn)數(shù)據(jù)管理的方式
2.1、數(shù)據(jù)卷(Data Volumes)
2.2、數(shù)據(jù)卷容器(Data Volume Containers)
3、簡單示例
3.1、數(shù)據(jù)卷示例
3.2、數(shù)據(jù)卷容器示例
1、前言
在生產(chǎn)環(huán)境中使用 Docker,一方面,需要對數(shù)據(jù)進(jìn)行保存或者在多個容器之間進(jìn)行數(shù)據(jù)共享;另一方面,在 Docker 的容器被刪除后,并不會保留容器的狀態(tài)信息。那么如何實(shí)現(xiàn)信息的持久化呢?這必然涉及容器的數(shù)據(jù)管理。
2、Docker實(shí)現(xiàn)數(shù)據(jù)管理的方式
在 Docker 容器中實(shí)現(xiàn)數(shù)據(jù)管理(或者說實(shí)現(xiàn)數(shù)據(jù)的持久化)主要有以下兩種方式:
2.1、數(shù)據(jù)卷(Data Volumes)
數(shù)據(jù)卷本質(zhì)上是一個掛載目錄,類似使用 Linux的 mount 命令掛載的目錄。數(shù)據(jù)卷可以供容器使用,并且可以在不同的容器之間共享和重用數(shù)據(jù)卷。對數(shù)據(jù)卷的修改會立即生效。數(shù)據(jù)卷與容器彼此獨(dú)立,對數(shù)據(jù)卷的更新不會影響鏡像。
即使容器被刪除,數(shù)據(jù)卷默認(rèn)也會一直存在,直到數(shù)據(jù)卷被刪除為止。
在Docker 中可以使用-mount和-v 兩種方式給容器掛載數(shù)據(jù)卷。
2.2、數(shù)據(jù)卷容器(Data Volume Containers)
數(shù)據(jù)卷容器是一種特殊的容器,用來維護(hù)數(shù)據(jù)卷。它可以在多個容器之間共享數(shù)據(jù)信息。利用數(shù)據(jù)卷容器可以很方便地完成數(shù)據(jù)遷移。
3、簡單示例
3.1、數(shù)據(jù)卷示例
可以使用-mount或-v兩種方式給容器掛在數(shù)據(jù)卷。
-mount和-v的區(qū)別在于,-mount如果宿主機(jī)目錄不存在會直接報錯,而-v會自動創(chuàng)建。
1)創(chuàng)建一個數(shù)據(jù)卷“myvolume”。
docker volume create myvolume
創(chuàng)建后,查看所有數(shù)據(jù)卷。
docker volume ls
也可以通過inspect命令查看數(shù)據(jù)卷詳細(xì)信息。
docker inspect myvolume
2)啟動一個容器,并使用數(shù)據(jù)卷。
這里使用Nginx鏡像創(chuàng)建一個容器,名稱為mynginx,端口映射為1234:80。
docker run -d -p 1234:80 --name=mynginx --mount type=volume,source=myvolume,target=/usr/share/nginx/html/ nginx
然而我這里卻提示無法識別--mount,通過docker run --help并沒有發(fā)現(xiàn)--mount命令。猜測跟docker版本有關(guān)系,我這里使用的是docker 1.13.0版本。網(wǎng)上找了一圈之后發(fā)現(xiàn),需要docker-ce 75.06以上版本才可以。這里大家可以自行驗(yàn)證。
參數(shù)說明:
- --mount :指定在容器啟動時掛載數(shù)據(jù)卷。
- type:指定數(shù)據(jù)卷掛載的方式。有以下幾個參數(shù):
- volume。普通數(shù)據(jù)卷,默認(rèn)的type類型。其函數(shù)映射到主機(jī)“ar/lib/docker/volumes”目錄下。
- bind。綁定數(shù)據(jù)卷。使用這種類型可以在掛載數(shù)據(jù)卷時將其映射到主機(jī)的指定目錄下。
- tmpfs。臨時數(shù)據(jù)卷,只將容器的目錄掛載到宿主機(jī)的內(nèi)存中。一般在實(shí)際環(huán)境中不會使用這種方式。
- source:指定宿主機(jī)上的目錄或者數(shù)據(jù)卷。這里使用的是第(1)步所創(chuàng)建的數(shù)據(jù)卷myvolume。
- target:將容器中的“/usr/share/nginx/htm/”目錄掛載到宿主機(jī)。
3)也可以使用-v參數(shù)進(jìn)行掛載。
使用-v我們將宿主機(jī)/home/data目錄掛載到容器內(nèi)的/data/mydatavolume目錄下。
# --privileged=true 不加這個,容器內(nèi)使用ls會提示權(quán)限問題
docker run -it --privileged=true -v /home/data/:/data/mydatavolume centos /bin/bash
容器內(nèi):
宿主機(jī):
可以看到目錄已經(jīng)成功掛載,且當(dāng)你在宿主機(jī)修改的內(nèi)容,會直接同步到容器內(nèi)部。
-v命令格式為:
-v 宿主機(jī)目錄:容器內(nèi)部目錄
3.2、數(shù)據(jù)卷容器示例
數(shù)據(jù)卷容器也是一個容器,專門用來提供數(shù)據(jù)卷供其他容器掛載。如果用戶需要在多個容器之間共享一些持續(xù)更新的數(shù)據(jù),則最簡單的方式是使用數(shù)據(jù)卷容器。
1)創(chuàng)建數(shù)據(jù)卷容器。
創(chuàng)建一個數(shù)據(jù)卷容器 dbdata,并在其中創(chuàng)建一個數(shù)據(jù)卷掛載到“/dbdata”下:
docker run -it -v /dbdata --name dbdata centos
2)數(shù)據(jù)卷容器內(nèi)生成一些文件。
echo hello world > a.txt
3)創(chuàng)建一個容器container1,并使用--volumes-from掛載dbdata容器的數(shù)據(jù)卷。
docker run -it --volumes-from dbdata --name=container1 centos
在容器container1中可以查看目錄/dbdata,其中已經(jīng)有了剛生成的a.txt:
4)同理可以繼續(xù)建容器container2,并使用--volumes-from掛載dbdata容器的數(shù)據(jù)卷。
docker run -it --volumes-from dbdata --name=container2 centos
并創(chuàng)建b.txt:
5)在容器container1中也能看到該數(shù)據(jù)。
從結(jié)果可以看出兩個容器container1和container2掛載了同一個數(shù)據(jù)卷,并且數(shù)據(jù)卷都在相同的、dbdata目錄下。這樣容器的任何一方在該目錄下寫入,其他容器也都可以看到。這樣很方便的實(shí)現(xiàn)了不同容器之間的數(shù)據(jù)共享,并且利用這種方式很容易的實(shí)現(xiàn)容器數(shù)據(jù)的遷移。