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