Docker數據持久化
Data Volume:
Bind mount:
持久化存儲:本質上是DockerHost文件系統中的目錄或文件,可以直接被Mount 容器的文件系統中,在運行容器時,能夠經過-v實現
特色:
一、Data Volume是目錄或文件,不能是沒有格式化的磁盤(塊設備)
二、容器能夠讀寫volume中的數據
三、volume數據能夠永久保存,即便使用它的容器已經被銷燬html
測試的小實驗
運行一個nginx服務,作數據持久化。
[root@docker nginx]# cd
[root@docker ~]# mkdir html
[root@docker ~]# cd html/
[root@docker html]# ls
[root@docker html]# echo "This is a testfile in dockerHost." > index.html
[root@docker html]# cat index.html
This is a testfile in dockerHost.
建立容器,-v 過載html目錄到nginx服務的/usr/share/nginx/html下
docker run -itd --name testweb -v /root/html:/usr/share/nginx/html nginx:latest
docker inspect testweb
curl 172.17.0.2nginxPS:DockerHost上須要掛在的源文件或目錄,必須是已經存在的,不然,當作一個目錄掛載到容器中git
默認掛載到容器內的文件,容器是有讀寫權限,能夠在運行容器時-v後邊加":ro"限制容器的寫入權限github
而且還能夠掛在單獨文件到容器內部,通常它的使用場景是:若是不想對整個目錄進行覆蓋,而只但願添加某個文件,就能夠使用掛載單個文件web
Docker Manager Volumedocker
[root@docker01 ~]# docker run -itd --name t2 -P -v /usr/share/nginx/html nginx:latest
/var/lib/docker/volumes/2651ce42d3c92f31954a01ef6674f9b846c5a8417df61b134279257a0498c2e7/_data
curl 127.0.0.1:32773
他會自動將容器裏的目錄掛載到本地,不用手動指定掛載位置
刪除容器的操做,默認不會對dockerHost上的文件操做,若是想要在刪除容器時把源文件也刪除,能夠在刪除容器時添加-v選型(通常不推薦使用這種方式,由於文件有可能被其餘容器使用)apache
容器與容器的數據共享(能夠進行多個掛載)vim
Volume container:給其餘容器提供volume存儲卷的容器,而且它能夠提供bind mount,也能夠提供docker manager volume
建立一個vc_data容器
docker create --name vc_data -v ~/html:/usr/share/nginx/html
-v /other/useful/tools busybox
vim Dockerfile centosFROM busybox
ADD index.html /usr/local/apache2/htdocs/index.html
VOLUME /usr/local/apache2/htdocs瀏覽器
docker create --name vc_data aaa:latest
docker run -itd --name new-web1 -P --volumes-from vc-new httpd:latest
*安全:
容器的跨主機數據共享
Docker01 docker02 docker03
Httpd httpd nfs
要求:docker01和docker02的主目錄,是同樣的
Docker03上的操作(須要關閉防火牆)
mkdir /datashare
> vim /etc/exports
/datashare (rw,sync,norootsquash)
cd datashare/
vim index.html
lbs
<div id="datetime">*
<script>
setInterval("document.getElementById('datetime').innerHTML=new Date().toLocaleString();", 1000);
</script>
</div>
cat index.html
[root@docker3 ~]# systemctl start rpcbind
systemctl enable rpcbind
[root@docker3 ~]# systemctl start nfs-server
[root@docker3 ~]# systemctl enable nfs-server
Docker01上
[root@docker ~]# showmount -e 192.168.1.30
Export list for 192.168.1.30:
/datashare *
Mkdir /htdocs
mount -t nfs 192.168.1.30:/datashare /htdocs/
mount | tail -1(驗證)
cd htdocs/
cat index.html
Docker02上(與docker01上同樣)
[root@docker2 ~]# showmount -e 192.168.1.30
Export list for 192.168.1.30:
/datashare *
Docker02的操作與docker01的同樣
這裏先不考慮將代碼,寫入鏡像
docker run -itd --name bdqn-web -P -v /htdocs:/usr/local/apache2/htdocs httpd:latest
docker run -itd --name bdqn-web1 -P -v /htdocs:/usr/local/apache2/htdocs httpd:latest
此時,用瀏覽器訪問,兩個WEB服務的主界面是同樣的。但若是,NFS服務器上的源文件丟失,則兩個web服務都會異常。
想辦法將源數據寫入鏡像內,在基於鏡像作一個vc_data容器。這裏由於沒有接觸到docker-compose和docker swarm等docker編排工具,因此咱們在docker01和dcker02上手動建立鏡像
Docker01上
cd /htdocs/
vim Dockerfile
FROM busybox
ADD index.html /usr/local/apache2/htdocs/index.html
VOLUME /usr/local/apache2/htdocs
docker build -t aaa .
docker create --name vc_data aaa:latest
docker run -itd --name new1 -P --volumes-from vc_data httpd:latest
docker02操作相同
docker create --name vc_data aaa:latest
docker run -itd --name new2 -P --volumes-from vc_data httpd:latest
企業級私有倉庫鏡像倉庫Harbor
下載一個docker-compose.tar.gz 工具
從github上下https://github.com/docker/compose/releases網址
curl -L https://github.com/docker/compose/releases/download/1.25.0/docker-compose-`uname -s-
uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose[root@docker htdocs]# tar zxf docker-compose.tar.gz -C /usr/local/bin/
[root@docker htdocs]# chmod +x /usr/local/bin/docker-compose
安裝依賴
yum -y install yum-utils device-mapper-persistent-data lvm2docker-compose -v
導入harbor離線安裝包,並解壓。
tar -zxf harbor-offline-installer-v1.7.4.tgz -C /usr/local/
修改harbor配置文件
./install.sh (更改完harbor配置文件後使用的命令)
http://192.168.1.1:80
密碼開頭大寫
修改docker配置問件
表示支持的版本
docker-compose.yml
須要與docker-compose.yml在一個目錄執行
Docker01上
docker login -u admin -p Harbor12345 192.168.1.1登陸
docker tag centos:7 192.168.1.1/bdqn1/centos:7更更名字
docker push 192.168.1.1/bdqn1/centos:7 上傳鏡像scp /usr/lib/systemd/system/docker.service 192.168.1.20:/usr/lib/systemd/system/docker.service 將配置文件導入到192.168.1.20中重啓[root@docker2 htdocs]# systemctl daemon-reload [root@docker2 htdocs]# systemctl restart docker拉取鏡像docker pull 192.168.1.1/bdqn1/centos:7