docker数据卷
文章目录
- docker数据卷
- 1.docker挂载宿主机数据卷
- 1.2.具体配置
- 1.3.挂载命令
- 1.3.1访问页面
- 2.多端口的容器nginx配置
- 2.1.创建目录位置
- 2.2.访问结果
- 3.数据卷volume持久化配置
- 3.1.语法格式
- 3.2.详细参数
- 3.3.操作案例
- 3.4.数据改动
- 3.5.查看卷的详细属性
- 4.与某个容器使用一样的卷组
1.docker挂载宿主机数据卷
一般来说nginx只有默认首页,我们装了nginx肯定不只有首页,因此网站源码存放位置我们需要考虑了,放到容器中,很多命令在容器中不生效这点就很头疼,因此就有了挂载这么个说发,在宿主机建一个目录,挂载到容器中,宿主机发生改变,容器也会跟着改变,实时同步
语法格式:
docker run -d -p 宿主机端口:docker端口 -v src:dest 镜像
可以是文件也可以是目录
1.2.具体配置
在本地创建一个目录
[root@localhost docker]# mkdir /opt/nginx_
然后在目录中写一个html的文件
我这边举例就随便写了一个
[root@localhost nginx_]# echo "123123" > index.html
1.3.挂载命令
[root@localhost docker]# docker run -d -p 80:80 -v /opt/nginx_/:/usr/share/nginx/html nginx:latest
1.3.1访问页面
可以看到我们自己写的页面同步到了容器中
进入容器查看挂载位置
2.多端口的容器nginx配置
操作举例:
创建80、81端口挂载数据目录实现跨越访问两个端口
[root@localhost nginx_]# docker run -d -p 80:80 -p 81:81 -v /web/conf.d/:/etc/nginx/conf.d -v /web/know_system/:/usr/share/nginx/html nginx:latest
2.1.创建目录位置
[root@localhost web]#mkdir /web/conf.d know_system
81端口配置文件
[root@localhost conf.d]# cat know.conf
server {
listen 81;
server_name know.com;
location / {
root /usr/share/nginx/html;
index b.html;
}
}
80端口配置文件
[root@localhost conf.d]# cat default.conf
server {
listen 80;
server_name know.com;
location / {
root /usr/share/nginx/html;
index index.html b.html;
}
}
页面内容就比较简单了随便写的
2.2.访问结果
3.数据卷volume持久化配置
每当容器删除时,里面的数据也会随着删除,万一不小心删了一个容器时,那可就太倒霉了,因此docker还有一种数据卷叫做持久性数据卷组,每次都会把容器中操作的数据保存在数据卷组中,即使删除了这个容器,创建新的容器照样可以使用数据卷组中的内容。
3.1.语法格式
docker volume
3.2.详细参数
参数 | 详解 |
---|---|
create | 创建一个数据卷 |
inspect | 查看数据卷属性 |
ls | 查看所有数据卷 |
prune | 批量删除数据卷 |
rm | 删除单个数据卷 |
3.3.操作案例
1.创建一个持久化的数据卷
[root@localhost ~]# docker volume create nginx_bf
nginx_bf
2.查看已创建的数据卷
[root@localhost ~]# docker volume ls
DRIVER VOLUME NAME
local nginx_bf
3.使用数据卷
[root@localhost ~]# docker run -d -p 82:80 -v nginx_bf:/usr/share/nginx/html nginx:latest
WARNING: IPv4 forwarding is disabled. Networking will not work.
bb086961e6a35e1c4c20cc744fe5f07bd70d8381574e4cca4350e5e66f91e8c7
刚配置完是可以访问到默认的页面
3.4.数据改动
1.我们来修改index首页数据
[root@localhost ~]# docker exec -it hardcore_cerf sh
# cd /usr/share/nginx/html
# ls
50x.html index.html
# echo "hello" > index.html
2.查看修改结果
[root@localhost ~]# curl -i
hello
3.删除容器
[root@localhost ~]# docker rm -f hardcore_cerf
4.在创建一个容器并挂载数据卷组
[root@localhost ~]# docker run -d -p 80:80 -v nginx_bf:/usr/share/nginx/html nginx:latest
e1a1697cd3a97ce3437afd9f0cdbd1f685c5f11bee12f466da34986fb0ed616a
验证后发现数据完整的保留下来
3.5.查看卷的详细属性
[root@localhost ~]# docker volume inspect nginx_bf
[
{
"CreatedAt": "2023-05-12T11:07:44+08:00",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/nginx_bf/_data",
"Name": "nginx_bf",
"Options": {},
"Scope": "local"
}
]
卷的保存路径
进入这个路径可以看到保存在本地的卷组信息
[root@localhost ~]# cd /var/lib/docker/volumes/nginx_bf/
[root@localhost nginx_bf]# ls
_data
[root@localhost nginx_bf]# cd _data/
[root@localhost _data]# ls
50x.html index.html
4.与某个容器使用一样的卷组
语法参数:
docker run -d -p port:port --volumes-from 要和谁使用相同的数据卷容器名 镜像名
案例:
[root@localhost _data]# docker run -d -p 83:80 --volumes-from frosty_fermat nginx:latest
d26e173ecc714f1059998059b0a2489ac76449c295d12c8f6d3d8980e9b4feab
[root@localhost _data]# curl -i 127.0.0.1:83
hello