目录
【1】将本地的目录挂载到容器中
【2】volume卷,持久化
【3】volume数据共享
【4】volume持久化的作用
【5】volume - 随机卷的使用方式
【6】 启动nginx容器访问80出现HELLO,访问81出现WORLD
【1】将本地的目录挂载到容器中
1、容器的数据目录位置
[root@docker-01 ~]# docker inspect nginx-01 | grep Id
"Id": "2576d37d56422db7509fbb6640c7058e0a6a2820966b01218019285ccbe0674f",
2、将本地的目录挂载到容器中
[root@docker-01 ~]# docker run -dit -p 81:80 --name nginx-test -v ./test:/usr/share/nginx/html nginx:latest
2a7af7def652f4df685830fc1103d0cfc0926d76a33ad3f452b7c5b0f7a04076
[root@docker-01 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2a7af7def652 nginx:latest "/docker-entrypoint.…" About a minute ago Up 59 seconds 0.0.0.0:81->80/tcp, :::81->80/tcp nginx-test
3、验证
【2】volume卷,持久化
1、使用volume即使容器被删除,卷还一直存在,数据一直保持,除非删除卷
2、挂载volume时,会将容器中的内容保存到本地,前提是卷中无数据内容,如果挂载时卷中有数据内容,会将容器中的数据覆盖掉
[root@docker-01 ~]# docker volume ls
DRIVER VOLUME NAME
[root@docker-01 ~]# docker volume create test
test
[root@docker-01 ~]# docker volume ls
DRIVER VOLUME NAME
local test
## 无数据内容的卷
[root@docker-01 ~]# ls /var/lib/docker/volumes/test/_data/
[root@docker-01 ~]#
## 创建容器挂载
[root@docker-01 ~]# docker run -dit -p 82:80 --name nginx-volume -v test:/usr/share/nginx/html nginx:latest
d9079f03d5e4ed41d3fc1a53654b52097a4d2c170f802475bd1ec6ecca17a8c0
## 会将容器中的数据内容保存包本地
[root@docker-01 ~]# ls /var/lib/docker/volumes/test/_data/
50x.html index.html
## 修改验证
[root@docker-01 ~]# echo "111" > /var/lib/docker/volumes/test/_data/index.html
使用有数据的volume挂载验证是否会覆盖容器中的数据
[root@docker-01 ~]# docker volume create test-data
test-data
[root@docker-01 ~]# echo "TEST-DATA" > /var/lib/docker/volumes/test-data/_data/index.html
[root@docker-01 ~]# docker run -dit -p 83:80 --name nginx-data -v test-data:/usr/share/nginx/html nginx:latest
4ffe02efc3fc26c4ccaafd5be7805ee9b0c7ae9c9a9911a2186ba92226adf09c
[root@docker-01 ~]# ls /var/lib/docker/volumes/test-data/_data/
index.html
删除容器,验证数据是否还存在
[root@docker-01 ~]# docker rm -f $(docker ps -aq)
4ffe02efc3fc
d9079f03d5e4
2a7af7def652
2576d37d5642
[root@docker-01 ~]# ls /var/lib/docker/volumes/test/_data/
50x.html index.html
[root@docker-01 ~]# ls /var/lib/docker/volumes/test-data/_data/
index.html
【3】volume数据共享
volume也可以挂载到多个容器中共享使用
[root@docker-01 ~]# docker run -dit -p 80:80 --name nginx-01 -v test:/usr/share/nginx/html nginx:latest
056905a0ee4336d4c15d75b5414702466e3fe1509dd15e9550a5c5d370eaa04c
[root@docker-01 ~]# docker run -dit -p 81:80 --name nginx-02 -v test:/usr/share/nginx/html nginx:latest
823f063476ddfb53414eff50471ec1a89214d9f30f47175278c626e3b8a5914f
【4】volume持久化的作用
1、保证数据安全性
2、数据可重复使用性
3、当某天某个容器死掉了,运行的数据非常重要,并且数据也是用volume做的持久化,那么我们只需要快速的启动一个新的容器并挂载相同的卷继续运行
【5】volume - 随机卷的使用方式
1、动态资源(日志文件),会发生变化的资源使用随即卷,不能使用相同卷做存储,因为会导致数据异常变乱。
2、如果多个容器使用相同的卷做日志的持久化,多台数据同时写入日志文件,会变乱,需要分别做数据的持久化
【6】 启动nginx容器访问80出现HELLO,访问81出现WORLD
[root@docker-01 ~]# docker volume create nginx_conf
nginx_conf
[root@docker-01 ~]# docker volume create nginx_data
nginx_data
[root@docker-01 ~]# docker volume ls
DRIVER VOLUME NAME
local nginx_conf
local nginx_data
[root@docker-01 ~]# cd /var/lib/docker/volumes/nginx_conf/_data/
[root@docker-01 _data]# vim hello_world.conf
server {
listen 80;
server_name localhost;
root /nginx_html/HELLO;
location / {
index index.html;
}
}
server {
listen 81;
server_name localhost;
root /nginx_html/WORLD;
location / {
index index.html;
}
}
[root@docker-01 _data]# cd ../../nginx_data/_data
[root@docker-01 nginx_data]# mkdir HELLO
[root@docker-01 nginx_data]# mkdir WORLD
[root@docker-01 nginx_data]# echo "HELLO" >> HELLO/index.html
[root@docker-01 nginx_data]# echo "WORLD" >> WORLD/index.html
[root@docker-01 _data]# docker run -dit -p 80-81:80-81 --name nginx-01 -v nginx_conf:/etc/nginx/conf.d/ -v nginx_data:/nginx_html nginx:latest
3f2f4dd0df812981efb957b023b73a7ee2c37394a617fa680013dc098b659b6d