容器一般是用來封裝打包軟件,源碼等環(huán)境配置的废岂,而且重啟一個(gè)容器很簡單,所以容器經(jīng)常被刪除狱意,因此不會(huì)輕易將數(shù)據(jù)或文件放在容器中湖苞,這時(shí)我們會(huì)在宿主機(jī)的某個(gè)地方或空間掛在到容器指定的位置,這就是容器的數(shù)據(jù)卷膏蚓。
數(shù)據(jù)卷的作用:
1:持久化容器運(yùn)行過程中產(chǎn)生的數(shù)據(jù)文件
2:實(shí)現(xiàn)多個(gè)容器間的文件共享崩哩。
正常情況下,刪除容器呀酸,容器中所有的文件也會(huì)被刪除隆箩。
創(chuàng)建一個(gè)數(shù)據(jù)卷 :docker volume create
查看數(shù)據(jù)卷列表 :docker volume ls
刪除一個(gè)數(shù)據(jù)卷 :docker volume rm
查看一個(gè)數(shù)據(jù)卷的屬性 : docker volume inspect
[root@docker01 ~]# docker volume create fxw
fxw
[root@docker01 ~]# docker volume ls
DRIVER VOLUME NAME
local fxw
[root@docker01 ~]# docker volume inspect fxw
[
{
"CreatedAt": "2019-07-24T14:08:11+08:00",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/fxw/_data",
"Name": "fxw",
"Options": {},
"Scope": "local"
}
]
[root@docker01 _data]#
啟動(dòng)容器并將數(shù)據(jù)卷fxw掛載到nginx容器中:
-v fxw:/usr/share/nginx/html 该贾,指定數(shù)據(jù)卷名稱:容器指定目錄
[root@docker01 _data]# docker run -d -p 80:80 -v fxw:/usr/share/nginx/html nginx:latest
1097890e5c43d57ffe2cd3c67ab05172151ffaba1dbd5680b0be703aa4d4b1cf
[root@docker01 _data]# docker ps -a -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1097890e5c43 nginx:latest "nginx -g 'daemon of…" 10 seconds ago Up 9 seconds 0.0.0.0:80->80/t
[root@docker01 _data]# docker volume inspect fxw
[
{
"CreatedAt": "2019-07-24T14:12:35+08:00",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/fxw/_data",
"Name": "fxw",
"Options": {},
"Scope": "local"
}
]
通過查看數(shù)據(jù)卷fxw,可以發(fā)現(xiàn)數(shù)據(jù)卷fxw在宿主機(jī)上的真實(shí)地址為:/var/lib/docker/volumes/fxw/_data捌臊,相當(dāng)于將改地址掛載到容器nginx的/usr/share/nginx/html目錄杨蛋,這是我們?nèi)ジ淖?var/lib/docker/volumes/fxw/_data中的內(nèi)容,先刪除舊的文件理澎,然后放入編寫好的網(wǎng)頁index.html逞力,然后訪問10.0.0.11:
old page
new page
因此nginx的數(shù)據(jù)放在宿主機(jī)的數(shù)據(jù)卷fxw上,這樣既保證了數(shù)據(jù)的安全糠爬,又給開發(fā)人員提供了方便寇荧,同時(shí)當(dāng)你部署分布式集群時(shí),又能起到文件共享的作用执隧,一舉多得揩抡。
如果是集群共享,我們就不用每次都指定數(shù)據(jù)卷的路徑镀琉,這里還有一個(gè)命令:
--volumes-from containerName 表示與容器containerName保持一致的數(shù)據(jù)卷峦嗤,也是fxw數(shù)據(jù)卷(這里指定81端口映射到容器80端口)
[root@docker01 _data]# docker run -d -p 81:80 --volumes-from elegant_ardinghelli nginx:latest
2860f3a057d861105ab996732029f22af392e0a04d841fc41726f6893f1f4a78
[root@docker01 _data]#
上面已經(jīng)對數(shù)據(jù)進(jìn)行了持久化,此時(shí)刪掉容器滚粟,數(shù)據(jù)依然在宿主機(jī)寻仗。
[root@docker01 _data]# docker rm -f `docker ps -a -q`
2860f3a057d8
1097890e5c43
e4e1264fa87c
c1288955af2a
[root@docker01 _data]# docker volume inspect fxw
[
{
"CreatedAt": "2019-07-24T14:12:35+08:00",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/fxw/_data",
"Name": "fxw",
"Options": {},
"Scope": "local"
}
]
[root@docker01 _data]# ll /var/lib/docker/volumes/fxw/_data/
total 4
-rw-r--r-- 1 root root 3094 Jul 23 16:41 index.html
[root@docker01 _data]#
除了采用數(shù)據(jù)卷的方式掛載之外,還可以直接掛載宿主機(jī)目錄(90端口):
[root@docker01 abc]# docker run -d -p 90:80 -v /opt/abc/:/usr/share/nginx/html nginx:latest
52bfde2cbef6171594e7f8b7dc2ac859b22b4a8e3a13a380c7b1ffedab35fddc
[root@docker01 abc]# ll
total 4
-rw-r--r-- 1 root root 3094 Jul 23 16:41 index.html
[root@docker01 abc]#