管理应用程序数据

IT
IT
IT
285
文章
1
评论
2020年5月15日13:41:15 评论 100 2955字阅读9分51秒

将宿主机数据挂载到容器中的三种方式

• volumes:Docker管理宿主机文件系统的一部分(/var/lib/docker/volumes)。保存数据的最佳方式。

• bind mounts:将宿主机上的任意位置的文件或者目录挂载到容器中。

• tmpfs:挂载存储在主机系统的内存中,而不会写入主机的文件系统。如果不希望将数据持久存储在任何位置,可以使用 tmpfs,同时避免写入容器可写层提高性能。

管理应用程序数据

Volume数据卷管理

创建nginx的数据卷

[root@VM_0_8_centos ~]# docker volume create nginx_vol
nginx_vol
[root@VM_0_8_centos ~]# docker volume ls
DRIVER VOLUME NAME
local nginx_vol

查看数据卷

[root@VM_0_8_centos ~]# docker volume inspect nginx_vol 
[
{
"CreatedAt": "2019-09-05T20:20:19+08:00",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/nginx_vol/_data",
"Name": "nginx_vol",
"Options": {},
"Scope": "local"
}
]

删除所有的容器

[root@VM_0_8_centos ~]# docker rm -f $(docker ps -a |awk '{print $1}') 
19fc30aa95c2
7ddab59d9cd2
df53608eeaa9
Error: No such container: CONTAINER

用数据卷创建一个容器

[root@VM_0_8_centos ~]# docker run -d --name=nginx01 --mount src=nginx-vol,dst=/usr/share/nginx/html nginx 
b94dd4cedf87b394619d82652473e4916d2666d7219a49a8196b30ced373398c
[root@VM_0_8_centos ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b94dd4cedf87 nginx "nginx -g 'daemon of…" 10 seconds ago Up 9 seconds 80/tcp nginx01

查看有没有加载容器

[root@VM_0_8_centos ~]# docker inspect nginx01

创建数据卷并映射端口

[root@VM_0_8_centos ~]# docker run -d --name=nginx02 -p 88:80 --mount src=nginx-vol,dst=/usr/share/nginx/html nginx 
abbeadd98dfba460090ea693f3209c6497a3bc7ba5a7c2011937b410de994310

查看映射的端口

[root@VM_0_8_centos ~]# docker port nginx02
80/tcp -> 0.0.0.0:88

删除容器卷(删除之后里面的数据会消失)

[root@VM_0_8_centos ~]# docker ps 
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
abbeadd98dfb nginx "nginx -g 'daemon of…" 6 minutes ago Up 6 minutes 0.0.0.0:88->80/tcp nginx02
b94dd4cedf87 nginx "nginx -g 'daemon of…" 10 minutes ago Up 10 minutes 80/tcp nginx01
[root@VM_0_8_centos ~]# docker rm -f nginx01
nginx01
[root@VM_0_8_centos ~]# docker rm -f nginx02
nginx02
[root@VM_0_8_centos ~]# ls /var/lib/docker/volumes/nginx-vol/_data
50x.html index.html
[root@VM_0_8_centos ~]# docker volume rm nginx-vol 
nginx-vol
[root@VM_0_8_centos ~]# ls /var/lib/docker/volumes/nginx-vol/_data
ls: cannot access /var/lib/docker/volumes/nginx-vol/_data: No such file or directory

注意:

1. 如果没有指定卷,自动创建。

2. 建议使用--mount,更通用。

Bind Mounts

把你宿主机的目录或者文件挂载到容器中

[root@VM_0_8_centos ~]# docker run -d --name=nginx01 -p 88:80 --mount type=bind,src=/mnt/,dst=/usr/share/nginx/html nginx 
f28911367bc28b83cfff28bdfd768ca40771fe3840bfafb252e9edc4a49d9ad9
[root@VM_0_8_centos ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f28911367bc2 nginx "nginx -g 'daemon of…" 4 seconds ago Up 4 seconds 0.0.0.0:88->80/tcp nginx01

注意:

1. 如果源文件/目录没有存在,不会自动创建,会抛出一个错误。

2. 如果挂载目标在容器中非空目录,则该目录现有内容将被隐藏。

 

验证绑定

[root@VM_0_8_centos ~]# docker inspect nginx01

 "Mounts": [
{
"Type": "bind",
"Source": "/mnt/",
"Target": "/usr/share/nginx/html"
}
],

网页验证

[root@VM_0_8_centos ~]# cd /mnt/
[root@VM_0_8_centos mnt]# echo "bbs.centoscn.vip" > index.html

管理应用程序数据

Volume特点:

• 多个运行容器之间共享数据。

• 当容器停止或被移除时,该卷依然存在。

• 多个容器可以同时挂载相同的卷。

• 当明确删除卷时,卷才会被删除。

• 将容器的数据存储在远程主机或其他存储上

• 将数据从一台Docker主机迁移到另一台时,先停止容器,然后备份卷的目录(/var/lib/docker/volumes/)

Bind Mounts特点:

• 从主机共享配置文件到容器。默认情况下,挂载主机/etc/resolv.conf到每个容器,提供DNS解析。

• 在Docker主机上的开发环境和容器之间共享源代码。例如,可以将Maven target目录挂载到容器中,每次在Docker主机 上构建Maven项目时,容器都可以访问构建的项目包。

• 当Docker主机的文件或目录结构保证与容器所需的绑定挂载一致时

 

继续阅读
  • 我的QQ
  • QQ扫一扫
  • weinxin
  • 我的头条
  • 头条扫一扫
  • weinxin
IT
  • 本文由 发表于 2020年5月15日13:41:15
  • 除非特殊声明,本站文章均为原创,转载请务必保留本文链接
Centos8.1安装docker Docker

Centos8.1安装docker

yum方式安装 安装依赖 # yum install -y yum-utils device-mapper-persistent-data lvm2 添加仓库 # yum-config-manager...
docker安装mysql8.0 Docker

docker安装mysql8.0

创建存储目录 # mkdir -p /opt/data/mysql/data /opt/data/mysql/conf 基本使用 创建区分大小写文件 # cd /opt/data/mysql/conf...
二进制部署docker Docker

二进制部署docker

安装Docker 二进制包下载地址:https://download.docker.com/linux/static/stable/ 到对应平台的目录下载所需版本的Docker二进制包,并上传到Nod...