Docker基础-Docker数据管理
1、數(shù)據(jù)卷
數(shù)據(jù)卷是一個(gè)可供容器使用的特殊目錄,它將主機(jī)操作系統(tǒng)目錄直接映射進(jìn)容器,類似于Linux中的mount操作。
數(shù)據(jù)卷可以提供很多有用的特性:
1.在容器內(nèi)創(chuàng)建一個(gè)數(shù)據(jù)卷
在使用docker run命令的時(shí)候,使用-v參數(shù)在容器內(nèi)創(chuàng)建一個(gè)數(shù)據(jù)卷。多次重復(fù)使用可以創(chuàng)建多個(gè)數(shù)據(jù)卷。
舉例如下:
可以看到容器里內(nèi)已經(jīng)存在一個(gè)數(shù)據(jù)卷:nginxdata
-p參數(shù)是暴露指定的容器服務(wù)端口到宿主機(jī),其中 -p 80:80中,:前面的是宿主機(jī)的端口,:后面的是容器內(nèi)暴露的端口,可以理解為將容器內(nèi)暴露的端口綁定到宿主機(jī)。
2.掛載一個(gè)主機(jī)目錄作為數(shù)據(jù)卷
使用-v參數(shù)也可以指定掛載一個(gè)本地目錄到容器中去作為數(shù)據(jù)卷(推薦方式)。
舉例如下:
上面的:-v /data/nginxdata/:/opt/nginxdata是指將本地的/data/nginxdata/掛載到容器中的/opt/nginxdata作為數(shù)據(jù)卷。
在容器nginx_3中的/opt/nginxdata目錄中創(chuàng)建一個(gè)test.txt并寫入"write in container"然后退出容器,在/data/nginxdata/中也存在這個(gè)文件和內(nèi)容。
當(dāng)然,在本地寫入數(shù)據(jù)之后,在容器中也是立即生效的:
3.掛載一個(gè)本地文件作為數(shù)據(jù)卷
-v參數(shù)也可以指定一個(gè)本地文件掛載到容器中作為數(shù)據(jù)卷(不推薦)。
[root@docker ~]# docker run --rm -itd --name nginx_4 -v /data/nginxdata/index.html:/usr/share/nginx/html/index.html -p 8084:80 nginx:latest 9838611b1230ad85c96a4215151c281199e330c4b101b9e13f4179976aa338b3 [root@docker ~]# 把指定的index.html文件掛載到容器中nginx的網(wǎng)站空間/usr/share/nginx/html/中,并把原先的index.html替換掉了。
注意:
如果直接掛載一個(gè)文件到容器中,使用文件編輯工具,包括vi、vim或者sed --in-place的時(shí)候可能會(huì)造成文件inode的改變,從Dcker1.1.0起,會(huì)報(bào)錯(cuò);推薦使用的方式是直接掛載文件所在的目錄。
2、數(shù)據(jù)卷容器
如果用戶需要在多個(gè)容器之間共享一些持續(xù)更新的數(shù)據(jù),最簡單的方式是使用數(shù)據(jù)卷容器。數(shù)據(jù)卷容器也是一個(gè)容器,但是它的目的是專門用來提供數(shù)據(jù)卷供其他容器掛載。
首先,創(chuàng)建一個(gè)數(shù)據(jù)卷容器,并在容器內(nèi)創(chuàng)建一個(gè)數(shù)據(jù)卷掛載到/dbdata:
查看/dbdata目錄:
[root@695f96ac5b87 /]# ls anaconda-post.log bin dbdata dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var [root@695f96ac5b87 /]# cd dbdata/ [root@695f96ac5b87 dbdata]# ls [root@695f96ac5b87 dbdata]# 在其他容器中使用--volumes-from來掛載dbdata容器中的數(shù)據(jù)卷:
創(chuàng)建db1和db2兩個(gè)容器,都掛載在dbdata上,可以在兩個(gè)容器中都能看到dbdata目錄:
在dbdata容器的dbdata目錄中寫入數(shù)據(jù):
[root@695f96ac5b87 /]# cd /dbdata/ [root@695f96ac5b87 dbdata]# ls [root@695f96ac5b87 dbdata]# echo "write in dbdata:/dbdata" > test.txt [root@695f96ac5b87 dbdata]# cat test.txt write in dbdata:/dbdata [root@695f96ac5b87 dbdata]#分別在db1和db2中查看:
db1中查看:
[root@docker ~]# docker exec -it db1 /bin/bash [root@6adc3ecfe19d /]# ls anaconda-post.log bin dbdata dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var [root@6adc3ecfe19d /]# cd dbdata/ [root@6adc3ecfe19d dbdata]# ls test.txt [root@6adc3ecfe19d dbdata]# cat test.txt write in dbdata:/dbdata [root@6adc3ecfe19d dbdata]# echo "write in db1:/dbdata" >> test.txt [root@6adc3ecfe19d dbdata]# cat test.txt write in dbdata:/dbdata write in db1:/dbdata [root@6adc3ecfe19d dbdata]#db2中查看:
[root@docker ~]# docker exec -it db2 /bin/bash [root@c9cade8bc911 /]# cd dbdata/ [root@c9cade8bc911 dbdata]# ls test.txt [root@c9cade8bc911 dbdata]# cat test.txt write in dbdata:/dbdata write in db1:/dbdata [root@c9cade8bc911 dbdata]# echo "write in db2:/dbdata" >> test.txt [root@c9cade8bc911 dbdata]# cat test.txt write in dbdata:/dbdata write in db1:/dbdata write in db2:/dbdata [root@c9cade8bc911 dbdata]#最后在dbdata容器中查看分別在db1和db2中寫入的數(shù)據(jù):
[root@695f96ac5b87 dbdata]# cat test.txt write in dbdata:/dbdata write in db1:/dbdata write in db2:/dbdata [root@695f96ac5b87 dbdata]# 可以多次使用--volumes-from參數(shù)來從多個(gè)容器掛載多個(gè)數(shù)據(jù)卷。還可以從其他已經(jīng)掛載了容器卷的容器來掛載數(shù)據(jù)卷。
舉例如下:
注意:
1.使用--volumes-from參數(shù)所掛載數(shù)據(jù)卷的容器自身并不需要保持在運(yùn)行狀態(tài)。
2.如果刪除了掛載的容器(包括dbdata、db1和db2),數(shù)據(jù)卷并不會(huì)自動(dòng)刪除。如果要?jiǎng)h除一個(gè)數(shù)據(jù)卷,必須在刪除最后一個(gè)還掛載著它的容器時(shí)使用docker rm -v命令來指定同時(shí)刪除關(guān)聯(lián)的容器。
3、利用數(shù)據(jù)卷容器來遷移數(shù)據(jù)
可以利用數(shù)據(jù)卷容器對其中的數(shù)據(jù)卷進(jìn)行備份、恢復(fù),以實(shí)現(xiàn)數(shù)據(jù)的遷移。=
1.備份
[root@docker ~]# docker run --volumes-from dbdata -v $(pwd):/backup --name worker centos:latest tar zcf backup/backup.tar dbdata命令解釋:
1.首先利用centos:latest鏡像創(chuàng)建了一個(gè)名為worker的容器,使用--volumes-from參數(shù)讓worker容器掛載dbdata容器的數(shù)據(jù)卷/dbdata,使用-v $(pwd):/backup參數(shù)來掛載本地當(dāng)前目錄到worker容器的/backup目錄。 2.worker容器啟動(dòng)后,使用了tar zcf backup/backup.tar /dbdata命令來將/dbdata下內(nèi)容備份到/backup/backup.tar,即當(dāng)前目錄下會(huì)生成一個(gè)backup.tar的文件。查看本地當(dāng)前目錄:
[root@docker ~]# ll total 525288 -rw-------. 1 root root 1071 Jan 19 2017 anaconda-ks.cfg -rw-r--r-- 1 root root 180 Nov 29 12:11 backup.tar -rw-r--r-- 1 root root 109 Nov 29 10:00 daemon.json -rwxr-xr-x 1 root root 67 Nov 28 16:13 docker-pid [root@docker ~]#2.恢復(fù)
要將備份好的數(shù)據(jù)恢復(fù)到一個(gè)容器,先要?jiǎng)?chuàng)建一個(gè)帶有數(shù)據(jù)卷的容器dbdata2,然后另建一個(gè)新的容器,掛載dbdata2的,并使用untar解壓備份文件到所掛載的容器卷中。
舉例如下:
在新的數(shù)據(jù)卷容器dbdata2中可以查案恢復(fù)結(jié)果:
[root@docker ~]# docker exec -it dbdata2 /bin/bash [root@60919fece4a7 /]# ls anaconda-post.log bin dbdata dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var [root@60919fece4a7 /]# cd dbdata/ [root@60919fece4a7 dbdata]# ls test.txt [root@60919fece4a7 dbdata]# cat test.txt write in dbdata:/dbdata write in db1:/dbdata write in db2:/dbdata [root@60919fece4a7 dbdata]#?
轉(zhuǎn)載于:https://www.cnblogs.com/jie-fang/p/7920201.html
總結(jié)
以上是生活随笔為你收集整理的Docker基础-Docker数据管理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 统计语言模型(Statistical L
- 下一篇: POJ2417 Discrete Log