容器可以承載微服務,也可以承載數據庫,微服務的配置文件,數據庫的數據文件,都需要持久化,也就是即使容器銷毀了,這些數據也需要存在。
一方面可以釆用手工方式用命令行拷貝,在容器很多的情況下,是不可取的。另一方面可以自動保存到宿主機或者遠程存儲上。
容器中將用于存儲的文件目錄稱為卷(Volume),可見容器的存儲便是對目錄的操作。
可以直接將容器目錄映射到主機目錄,稱為數據卷;也可以構建專門掛載數據卷的容器,稱為數據卷容器。
1. docker cp命令
首先啟動名稱為dockervolumtest1的ubuntu環境,并以/bin/bash方式進入到容器。
root@linux:/home# docker run -it --name="dockervolumtest1" ubuntu /bin/bash
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
125a6e411906: Pull complete
Digest: sha256:26c68657ccce2cb0a31b330cb0be2b5e108d467f641c62e13ab40cbec258c68d
Status: Downloaded newer image for ubuntu:latest
root@51d152e09898:/# 進入到容器
再新建dockerdata1.log作為測試文件。
root@51d152e09898:/# ls
bin boot dev etc home lib lib32 lib64 libx32 media mnt opt proc root run sbin srv sys tmp usr var
root@51d152e09898:/# cd tmp
root@51d152e09898:/tmp# ls
root@51d152e09898:/tmp# touch dockerdata1.log
root@51d152e09898:/tmp# echo this is docker data test > dockerdata1.log
root@51d152e09898:/tmp# cat dockerdata1.log
this is docker data test
root@51d152e09898:/tmp#
使用docker cp命令在主機和容器進行數據拷貝。
命令格式:
docker cp 容器ID:/目錄 主機目錄
root@linux:/# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
51d152e09898 ubuntu "/bin/bash" 4 minutes ago Up 4 minutes dockervolumtest1
root@linux:/# docker cp 51d152e09898:/tmp /
root@linux:/# cd tmp
root@linux:/tmp# ls
dockerdata1.log
root@linux:/tmp# cat dockerdata1.log
this is docker data test
root@linux:/tmp#
2. 數據卷
使用docker run命令,并指定-v選項,便可在啟動容器的時掛載數據卷;
命令格式1:
docker run -v /宿主機路徑:容器內路徑 鏡像名
# 如指定的目錄不存在,系統會自動創建
root@linux:/home# docker run -it --name="volummnttest1" -v /tmp/hostdir:/tmp/dockerdir ubuntu /bin/bash
root@ae1b5eda679d:/# ls
bin boot dev etc home lib lib32 lib64 libx32 media mnt opt proc root run sbin srv sys tmp usr var
# 新建測試文件volum.log
root@ae1b5eda679d:/# cd /tmp/dockerdir/
root@ae1b5eda679d:/tmp/dockerdir# ls
root@ae1b5eda679d:/tmp/dockerdir# touch volum.log
root@ae1b5eda679d:/tmp/dockerdir# echo this is a volum test > volum.log
root@ae1b5eda679d:/tmp/dockerdir#
新建命令窗口,查看Host宿主機的文件信息:
root@linux:/tmp/hostdir# ll
total 12
drwxr-xr-x 2 root root 4096 May 12 17:12 ./
drwxrwxrwt 16 root root 4096 May 12 17:11 ../
-rw-r--r-- 1 root root 21 May 12 17:13 volum.log
root@linux:/tmp/hostdir# cat volum.log
this is a volum test
root@linux:/tmp/hostdir#
命令格式2:docker run -v 容器內路徑 鏡像名
# 不指定主機目錄,系統會默認存儲在/var/lib/docker/volumes/容器ID目錄
root@linux:/tmp/hostdir# docker run -it --name="volummnttest2" -v /tmp/dockerdir2 ubuntu /bin/bash
root@cf7f42544b8f:/# ls
bin boot dev etc home lib lib32 lib64 libx32 media mnt opt proc root run sbin srv sys tmp usr var
root@cf7f42544b8f:/# cd /tmp/
root@cf7f42544b8f:/tmp# ls
dockerdir2
root@cf7f42544b8f:/tmp#
新建命令窗口,查看volum2.log的相關信息:
root@linux:/# cd /var/lib/docker/
root@linux:/var/lib/docker# ls
buildkit containers image network overlay2 plugins runtimes swarm tmp trust volumes
root@linux:/var/lib/docker# cd volumes/
root@linux:/var/lib/docker/volumes# ls
9c8c17797ea4efdee595d1eea56ea39906b4879fd150a17e5312dc5c6c62851b backingFsBlockDev metadata.db
root@linux:/var/lib/docker/volumes# cd 9c8c17797ea4efdee595d1eea56ea39906b4879fd150a17e5312dc5c6c62851b/
root@linux:/var/lib/docker/volumes/9c8c17797ea4efdee595d1eea56ea39906b4879fd150a17e5312dc5c6c62851b# ls
_data
root@linux:/var/lib/docker/volumes/9c8c17797ea4efdee595d1eea56ea39906b4879fd150a17e5312dc5c6c62851b# cd _data/
root@linux:/var/lib/docker/volumes/9c8c17797ea4efdee595d1eea56ea39906b4879fd150a17e5312dc5c6c62851b/_data# ls
volum2.log
root@linux:/var/lib/docker/volumes/9c8c17797ea4efdee595d1eea56ea39906b4879fd150a17e5312dc5c6c62851b/_data# cat volum2.log
this is for volum2 test
root@linux:/var/lib/docker/volumes/9c8c17797ea4efdee595d1eea56ea39906b4879fd150a17e5312dc5c6c62851b/_data#
也可通過docker inspect 容器ID,查看詳情
3. 數據卷容器
首先啟動容器volumedockertest
root@linux:/# docker run -it --name="volumedockertest" -v volumebase:/tmp/volumbasedata ubuntu /bin/bash
root@2933ebe42b98:/# ls
bin boot dev etc home lib lib32 lib64 libx32 media mnt opt proc root run sbin srv sys tmp usr var
root@2933ebe42b98:/# cd tmp
root@2933ebe42b98:/tmp# ll
total 12
drwxrwxrwt 1 root root 4096 May 12 09:50 ./
drwxr-xr-x 1 root root 4096 May 12 09:50 ../
drwxr-xr-x 2 root root 4096 May 12 09:50 volumbasedata/
再啟動容器volumedockertest1,使用--volumes-from參數繼承的volumedockertest數據卷。
root@linux:/# docker run -it --name="volumedockertest1" --volumes-from volumedockertest ubuntu /bin/bash
root@9ee901a1d422:/# ls
新建測試文件:
root@9ee901a1d422:/tmp/volumbasedata# echo this is test add data > basedata.log
root@9ee901a1d422:/tmp/volumbasedata#
宿主機查看文件
root@linux:~# cat /var/lib/docker/volumes/volumebase/_data/basedata.log
this is test add data
root@linux:~#
-
數據庫
+關注
關注
7文章
3794瀏覽量
64362 -
容器
+關注
關注
0文章
495瀏覽量
22060 -
微服務
+關注
關注
0文章
137瀏覽量
7338
發布評論請先 登錄
相關推薦
評論