docker 数据卷
docker cp
docker cp :用于容器与主机之间的数据拷贝。
宿主机文件复制到容器内 docker cp [OPTIONS] SRC_PATH CONTAINER:DEST_PATH
容器内文件复制到宿主机 docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH
拷贝文件到容器里
./index.html : 宿主机文件
trusting_gauss: 容器名
/usr/share/nginx/html : 容器路径下
docker cp ./index.html trusting_gauss:/usr/share/nginx/html
拷贝替换Nginx index.html文件,运行后可以看到
浏览器测试
容器内文件 copy to 宿主机
语法一致
将nginx html文件拷贝到我桌面
数据卷
数据卷(Data Volumes)是一个可供一个或多个容器使用的特殊目录,它将主机操作系统目录直接映射进
容器。
宿主机数据卷
宿主机数据卷:直接在宿主机的文件系统中但是容器可以访问(bind mount)
数据覆盖问题
- 如果挂载一个空的数据卷到容器中的一个非空目录中,那么这个目录下的文件会被复制到数据卷中
- 如果挂载一个非空的数据卷到容器中的一个目录中,那么容器中的目录会显示数据卷中的数据。如
果原来容器中的目录有数据,那么原始数据会被隐藏掉
语法
docker run -v /宿主机绝对路径目录:/容器内目录 镜像名
挂载 /Users/pilgrim/Desktop/data 到 容器 /usr/share/nginx/data 路径
docker run -d -p 90:80 --name=nginx -v /Users/pilgrim/Desktop/data:/usr/share/nginx/data nginx:1.19.3-alpine
容器创建
进入容器: docker exec -it nginx sh
宿主机
当然也可以多容器挂载宿主机同一个目录
数据卷容器
如果用户需要在多个容器之间共享一些持续更新的数据,最简单的方式是使用数据卷容器。数据卷容器
也是一个容器,但是它的目的是专门用来提供数据卷供其他容器挂载。
宿主机数据卷当然也可以,但是每个都得挂载一次,容器数量多的话就有点麻烦,对此数据卷容器就出厂了。
常见数据卷容器
docker run -d --name data-volume -v /data/nginx:/usr/share/nginx/html -v /data/mysql:/var/lib/mysql centos:7.8.2003
数据卷容器
docker run -d --name=c3 -v /Users/pilgrim/Desktop/data:/usr/share/nginx/html/data nginx:1.19.3-alpine
这里 /Users/pilgrim/Desktop/data指定了宿主机文件地址,不指定会自动生成一个的。
/usr/share/nginx/html/data 数据卷容器挂载地址
挂载 c1 c2 到 c3数据卷容器
docker run -d --name=c2 --volumes-from c3 nginx:1.19.3-alpine
docker run -d --name=c1 --volumes-from c3 nginx:1.19.3-alpine
docker inspect c3 可以看到容器信息,宿主机和容器挂载目录
c1
c2
c1 和c2 挂载到c3 数据卷容器
可以看到,数据卷里创建b.txt , c1 c2容器里也同步了。
外部宿主机的也同步了
数据卷的好处是数据卷容器挂了,也不会影响我们其他容器
多个容器挂载同一个宿主机文件时,数据卷比较方便。