Docker数据持久化
Data Volume:
Bind mount:

持久化存储:本质上是DockerHost文件系统中的目录或文件,能够直接被Mount 容器的文件系统中,在运行容器时,可以通过-v实现
特点:
1、Data Volume是目录或文件,不能是没有格式化的磁盘(块设备)
2、容器可以读写volume中的数据
3、volume数据可以永久保存,即使使用它的容器已经被销毁

测试的小实验
运行一个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.2

PS:DockerHost上需要挂在的源文件或目录,必须是已经存在的,否则,当做一个目录挂载到容器中

默认挂载到容器内的文件,容器是有读写权限,可以在运行容器时-v后边加":ro"限制容器的写入权限

并且还可以挂在单独文件到容器内部,一般它的使用场景是:如果不想对整个目录进行覆盖,而只希望添加某个文件,就可以使用挂载单个文件

Docker Manager Volume

[root@docker01 ~]# docker run -itd --name t2 -P -v /usr/share/nginx/html nginx:latest
docker数据持久化,容器与容器的数据共享,企业级私有仓库Harbor。_第1张图片
/var/lib/docker/volumes/2651ce42d3c92f31954a01ef6674f9b846c5a8417df61b134279257a0498c2e7/_data
curl 127.0.0.1:32773
他会自动将容器里的目录挂载到本地,不用手动指定挂载位置
删除容器的操作,默认不会对dockerHost上的文件操作,如果想要在删除容器时把源文件也删除,可以在删除容器时添加-v选型(一般不推荐使用这种方式,因为文件有可能被其他容器使用)

容器与容器的数据共享(可以进行多个挂载)

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
docker数据持久化,容器与容器的数据共享,企业级私有仓库Harbor。_第2张图片
docker数据持久化,容器与容器的数据共享,企业级私有仓库Harbor。_第3张图片
vim Dockerfile

FROM 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

*

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
docker数据持久化,容器与容器的数据共享,企业级私有仓库Harbor。
docker数据持久化,容器与容器的数据共享,企业级私有仓库Harbor。_第4张图片
此时,用浏览器访问,两个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 lvm2

docker-compose -v
docker数据持久化,容器与容器的数据共享,企业级私有仓库Harbor。

导入harbor离线安装包,并解压。
tar -zxf harbor-offline-installer-v1.7.4.tgz -C /usr/local/
修改harbor配置文件
docker数据持久化,容器与容器的数据共享,企业级私有仓库Harbor。
docker数据持久化,容器与容器的数据共享,企业级私有仓库Harbor。
./install.sh (更改完harbor配置文件后使用的命令)
docker数据持久化,容器与容器的数据共享,企业级私有仓库Harbor。
http://192.168.1.1:80
docker数据持久化,容器与容器的数据共享,企业级私有仓库Harbor。_第5张图片
密码开头大写
docker数据持久化,容器与容器的数据共享,企业级私有仓库Harbor。_第6张图片
修改docker配置问件
docker数据持久化,容器与容器的数据共享,企业级私有仓库Harbor。
表示支持的版本
docker-compose.yml
docker数据持久化,容器与容器的数据共享,企业级私有仓库Harbor。
需要与docker-compose.yml在一个目录执行
docker数据持久化,容器与容器的数据共享,企业级私有仓库Harbor。_第7张图片
Docker01上
docker login -u admin -p Harbor12345 192.168.1.1登录
docker数据持久化,容器与容器的数据共享,企业级私有仓库Harbor。
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