本站教程收集整理的这篇文章主要介绍了Docker数据管理,本站教程本站觉得挺不错的,现在分享给大家,也给大家做个参考。
一.Docker数据管理方式简介
Docker提供三种不同的方式将数据从宿主机挂载到容器中:volumes,bind mounts和tmpfs。
1.Volumes:Docker管理宿主机文件系统的一部分(/var/lib/docker/volumes)。
2.bind mounts:可以挂载在宿主机系统的任意位置。
3.tmpfs: 挂载存储在宿主机系统的内存中,而不会写入宿主机的文系统。
二管理volume卷
1.管理volume卷
#显示卷
[root@docker sky9890]# docker volume ls
DRIVER????????????? VOLUME NAME
local?? ???????0b37cdeff2004e6f6293ba0175df953e93a0244c945dd030a27c9c2d70015473
……
#创建卷
?[root@docker sky9890]# docker volume create Nginx-vol
Nginx-vol
[root@docker sky9890]# docker volume ls
local?????????????? Nginx-vol
[root@docker sky9890]# docker volume inspect Nginx-vol
[
??? {
??????? “Driver”: “local”,
??????? “Labels”: {},
??????? “Mountpoint”: “/var/lib/docker/volumes/Nginx-vol/_data”,
??????? “Name”: “Nginx-vol”,
??????? “Options”: {},
??????? “Scope”: “local”
??? }
]
2.用卷创建一个容器:
[root@docker sky9890]#
docker run -d? –name=Nginx-test –mount src=Nginx-vol,dst=/usr/share/Nginx/html Nginx????????
unkNown flag: –mount
[root@docker sky9890]# docker run -d -it –name=Nginx-001? -v Nginx-vol:/usr/share/Nginx/html 便宜香港vps Nginx? ?
2c3e14431a622a4c9af303596853cc5b59696c42c4da5e264dfc190e7f5f4c71
#执行Nginx-001容器
[root@docker sky9890]# docker exec -it Nginx-001 bash
root@2c3e14431a62:/#
root@2c3e14431a62:/# cd /usr/share/Nginx/html/
root@2c3e14431a62:/usr/share/Nginx/html# ls
50x.html? index.html
#在容器中创建一个test.html文件
root@2c3e14431a62:/usr/share/Nginx/html# touch test.html
root@2c3e14431a62:/usr/share/Nginx/html# ls
50x.html? index.html? test.html
root@2c3e14431a62:/usr/share/Nginx/html# vim test.html
<html>
<Meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />
<h1>欢迎学习Docker!</h1>
</html>
#在volumes数据卷中同步了容器中创建的文件
[root@docker sky9890]# cd /var/lib/docker/volumes/Nginx-vol/_data/
[root@docker _data]# ls
50x.html? index.html
[root@docker _data]# ls
50x.html? index.html? test.html
#删除所有容器
#Docker rm –f $(docker ps –q –a)
#Docker ps -a
#创建Nginx-003容器?
[root@docker _data]# docker run -d -it –name=Nginx-003? -p 8081:80 -v Nginx-vol:/usr/share/Nginx/html Nginx????
7aACBe13f3817e54965e0c7d48969d465665a28e4413b418066385805a08b60f
#停止Nginx-test容器
[root@docker _data]# docker container stop Nginx-test
Nginx-test
#删除Nginx-test容器
[root@docker _data]# docker container rm Nginx-test
Nginx-test
#无法删除Nginx-vol卷,原因是还在使用
[root@docker _data]# docker volume rm Nginx-vol
Error response from daemon: Unable to remove volume, volume still in use: remove Nginx-vol: volume is in use – [2c3e14431a622a4c9af303596853cc5b59696c42c4da5e264dfc190e7f5f4c71, e64dab498554ee101b0157cbbf4fbe5d5295ec2519327c6afbe042e60222d618, 7aACBe13f3817e54965e0c7d48969d465665a28e4413b418066385805a08b60f]
docker stop Nginx-vol
docker volume rm Nginx-vol
docker stop Nginx-001
docker stop Nginx-002
docker stop Nginx-003
[root@docker _data]# docker ps
#将所有容器停止了也法删除Nginx-vol卷
小结:
1.如果没有指定卷,则会自动创建。
2.教练建议使用—mount,更通用。但是使用mount就报错。
三.bind Mounts
#先删除所有容器
[root@docker sky9890]# docker rm -f $(docker ps -q -a)
7aACBe13f381
e64dab498554
2c3e14431a62
01791c36ed28
……
fe6672a1ba22
#创建卷
#方式一:必须先创建原有目录,否则报错
[root@docker sky9890]# mkdir -p /app/wwwrott
[root@docker sky9890]#
docker run -d -it –name=Nginx-test
–mount type=bind,src=/app/wwwroot,dst=/usr/share/Nginx/html Nginx
unkNown flag: –mount?
#mount报错
?方式二:
[root@docker sky9890]# docker run -d -it –name=Nginx-test
-v? /app/wwwroot:/usr/share/Nginx/html Nginx
ee97dec7d52b310eb3d93f42e05f272e3f97e23b5c49625966310d86b834ab0d
#执行容器
[root@docker sky9890]# docker exec -it Nginx-test bash
root@ee97dec7d52b:/#
root@ee97dec7d52b:/usr/share/Nginx/html# ls
root@ee97dec7d52b:/usr/share/Nginx/html# ls
index.html
root@ee97dec7d52b:/usr/share/Nginx/html# cat index.html
<html>
<Meta http-equive=”Cent-Type” content=”text/html; charset=utf-8″ />
<h1>欢迎学习Docker!</h1>
</html>
?#在宿主机上创建index.html,会同步到容器指定目录中
[root@docker wwwroot]# pwd
/app/wwwroot
[root@docker wwwroot]# ls
[root@docker wwwroot]# touch index.html
[root@docker wwwroot]# ls
index.html
[root@docker wwwroot]# vim index.html
<html>
<Meta http-equive=”Cent-Type” content=”text/html; charset=utf-8″ />
<h1>欢迎学习Docker!</h1>
</html>
#验证绑定
[root@docker wwwroot]# docker inspect Nginx-test
#docker container stop Nginx-test
#docker container rm Nginx-test
小结:
1.如果源文件/目录没有存在,不会自动创建,会抛出一个错误 。
2.如果挂载目录在容器中非空目录,则该目录现有内容将被隐藏。
四.创建数据卷容器过程中的问题
在使用volume与Bind Mounts创建容器中使用的mount参数会报如下错误:
Docker UnkNown flag –mount
原因如下:
docker run?support for the?–R_695_11845@ount?option was only introduced in Docker?17.06. You are using Docker?1.13.1. You have two choices:
1.?UPDATE to Docker?17.06?or later if you can;
2.?Use the?-v?approach to bind mount the volume you require e.g.?docker run -v $(pwd):/home
解决步骤:升级docker版本
1.查找主机上相关软件包
[root@docker /]# rpm -qa|grep docker
docker-1.13.1-108.git4ef4b30.el7.centos.x86_64
docker-client-1.13.1-108.git4ef4b30.el7.centos.x86_64
docker-common-1.13.1-108.git4ef4b30.el7.centos.x86_64
2.卸载软件相关包
[root@docker /]# yum remove docker-1.13.1-108.git4ef4b30.el7.centos.x86_64
警告:/etc/sysconfig/docker-storage 已另存为 /etc/sysconfig/docker-storage.rpmsave
警告:/etc/docker/daemon.json 已另存为 /etc/docker/daemon.json.rpmsave
[root@docker /]#yum remove docker-client-1.13.1-108.git4ef4b30.el7.centos.x86_64
[root@docker /]# ym remove docker-common-1.13.1-108.git4ef4b30.el7.centos.x86_64
[root@docker sky9890]# docker
bash: docker: 未找到命令
3.升级到最新版本
?[root@docker sky9890]# curl -fssl https://get.docker.com/ |sh
If you would like to use Docker as a non-root user, you should Now consider
adding your user to the “docker” group with something like:
?? sudo usermod -aG docker your-user
?remember that you will have to log out and BACk in for this to take effect!
?WARNING: Adding a user to the “docker” group will grant the ability to run
???????? containers which can be used to obtain root privileges on the
???????? docker host.
???????? Refer to https://docs.docker.com/ENGIne/security/security/#docker-daemon-attack-surface
???????? for more @R_320_4036@ion.
4.重启Docker
#systemctl rstart docker
5.设置开机启动
#systemctl enable docker
6.查看docker版本信息
[root@docker sky9890]# docker version
Client: Docker ENGIne – Community
?Version:?????????? 19.03.7
?API version:?????? 1.40
?Go version:??????? go1.12.17
?Git commit:??????? 7141c199a2
?Built:???????????? Wed Mar? 4 01:24:10 2020
?OS/Arch:?????????? linux/amd64
?Experimental:????? false
……
7.查看容器信息
[root@docker sky9890]# docker info
Client:
……
?Kernel Version: 3.10.0-862.11.6.el7.x86_64
?OperaTing System: CentOS Linux 7 (CorE)
?OSType: linux
?architecture: x86_64
?cpus: 1
?@R_834_10586@l Memory: 983.3MiB
?NAME: docker
?ID: E33X:T43J:BY3N:CFKG:6L7Q:XSGB:JZPA:GFNI:QHT5:LSAU:YDZW:BPAI
?Docker Root Dir: /var/lib/docker
?Debug Mode: false
?registry: https://index.docker.io/v1/
?Labels:
?Experimental: false
?Insecure RegiStries:
? 127.0.0.0/8
?Live Restore Enabled: false
WARNING: IPv4 forWARDing is disabled
WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-iP6tables is disabled
8.查看镜像
[root@docker sky9890]# docker images
REPOSITORY????????? TAG???????????????? IMAGE ID??????????? CREATED???????????? SIZE
sky9899???????????? self??????????????? 1302c27299d6??????? 20 hours ago??????? 1.22MB
busyBox???????????? v2????????????????? 6e9545b1e2a2??????? 20 hours ago??????? 1.22MB
tomcat????????????? latest????????????? 4e7840b49fad??????? 6 days ago????????? 529MB
Nginx?????????????? latest????????????? a1523e859360??????? 7 days ago????????? 127MB
python????????????? 3.5???????????????? 0320ef7199ca??????? 7 days ago????????? 909MB
@H_469_0@mysqL?????????????? latest????????????? c8ad2be69a22??????? 7 days ago????????? 465MB
@R_675_11161@???????????????? latest????????????? e66ae809d99a??????? 7 days ago????????? 405MB
httpd?????????????? latest????????????? c5a012f9cf45??????? 7 days ago????????? 165MB
@H_469_0@mongo?????????????? latest????????????? bcef5fd2979d??????? 12 days ago???????? 386MB
ubuntu????????????? latest????????????? 72300a873c2c??????? 12 days ago??????? ?64.2MB
centos????????????? latest????????????? 470671670cac??????? 6 weeks ago???????? 237MB
busyBox???????????? latest????????????? 6d5fcfe5ff17??????? 2 months ago??????? 1.22MB
Nginx?????????????? 1.11??????????????? 5766334bdaa0??????? 2 years ago??? ?????183MB
Nginx?????????????? 1.11??????????????? 5766334bdaa0??????? 2 years ago???????? 183MB
Nginx?????????????? v1????????????????? 5766334bdaa0??????? 2 years ago???????? 183MB
?WARNING: IPv4 forWARDing is disabled
?WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-iP6tables is disabled
9.解决上述三年报警问题
[root@docker sky9890]# vim /etc/sysctl.conf
net.ipv4.ip_forWARD=1
net.bridge.bridge-nf-call-iP6tables=1
net.bridge.bridge-nf-call-iptables=1
[root@docker sky9890]# sysctl -p
10.测试mount
[root@docker sky9890]# docker run -d -it –name=Nginx-test –mount type=bind,src=/app/wwwroot,dst=/usr/share/Nginx/html Nginx
Unable to find image ‘Nginx:latest’ locally
latest: Pulling from library/Nginx
68ced04f60ab: Already exists
28252775b295: Pull complete
a616aa3b0bf2: Pull complete
Digest: sha256:2539d4344dd18e1df02be842ffc435f8e1f699cfc55516e2cf2cb16b7a9aea0b
Status: Downloaded newer image for Nginx:latest
docker: Error response from daemon: Conflict. The container name “/Nginx-test” is already in use by container “ee97dec7d52b310eb3d93f42e05f272e3f97e23b5c49625966310d86b834ab0d”. You have to remove (or reName) that container to be able to reuse that name.
See ‘docker run –Help’.
[root@docker sky9890]# docker run -d -it –name=Nginx? –mount type=bind,src=/app/wwwroot,dst=/usr/share/Nginx/html Nginx????
15ef64d51e113d571b0cb6fb89d3b891bcba826f4cc2ae2e3ad584294274aa9d
[root@docker sky9890]# docker start Nginx
Nginx
[root@docker sky9890]# docker exec -it Nginx bash
root@15ef64d51e11:/#
root@15ef64d51e11:/# ls /usr/share/Nginx/html/test.html
/usr/share/Nginx/html/test.html
root@15ef64d51e11:/# cat? /usr/share/Nginx/html/test.html??
<html>
<Meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />
<h1>
Sovle Docker UnkNown flag –mount
</h1>
</html>
#在宿舍机上创建一个文件,会同步到容器指定目录下
[root@docker wwwroot]# vim? test.html
<html>
<Meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />
<h1>
Sovle Docker UnkNown flag –mount
</h1>
</html>
?#重新创建一个容器,并指一个端口?
[root@docker sky9890]# docker run -d -it –name=Nginx01? -p 8080:80? –mount type=bind,src=/app/wwwroot,dst=/usr/share/Nginx/html Nginx????
6cc7f85a4cd1cc0fb23f2a60a1ae74bec2812d7a607ce7800f9f2db97ba8a052
#测试成功
本站总结
以上是本站教程为你收集整理的Docker数据管理全部内容,希望文章能够帮你解决Docker数据管理所遇到的程序开发问题。
如果觉得本站教程网站内容还不错,欢迎将本站教程推荐给好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。