欢迎光临
我们一直在努力

Docker数据管理

本站教程收集整理的这篇文章主要介绍了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数据管理所遇到的程序开发问题。

如果觉得本站教程网站内容还不错,欢迎将本站教程推荐给好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。

赞(0)
【声明】:本博客不参与任何交易,也非中介,仅记录个人感兴趣的主机测评结果和优惠活动,内容均不作直接、间接、法定、约定的保证。访问本博客请务必遵守有关互联网的相关法律、规定与规则。一旦您访问本博客,即表示您已经知晓并接受了此声明通告。