docker之数据卷管理
? ? ? ?
目錄
1.docker使用
2.優化
? ? ? ?在docker之網絡訪問中,通過啟動了nginx服務進行了訪問,只展示了nginx的首頁信息,如果想訪問我們自己的代碼如何操作呢,這就需要使用到數據卷的知識了。在Docker中,要想實現數據的持久化(所謂Docker的數據持久化即數據不隨著Container的結束而結束),需要將數據從宿主機掛載到容器中。數據卷的管理可以參考:Docker數據卷管理
1.docker使用
這里通過一個小程序來看看,通過xiaoniaoniaofeifei來看看如何實現數據卷的使用。如果是本地的壓縮文件使用xshell可以直接拖動到xshell中進行上傳,上傳完成之后進行解壓。
xiaoniaofeifei軟件包下載鏈接,提取碼:?jyqy
[root@localhost srv]# ls xiaoniaofeifei.zip [root@localhost srv]# unzip xiaoniaofeifei.zip Archive: xiaoniaofeifei.zipinflating: sound1.mp3 creating: img/inflating: img/bg1.jpg inflating: img/bg2.jpg inflating: img/number1.png inflating: img/number2.png inflating: img/s1.png inflating: img/s2.png inflating: 21.js inflating: 2000.png inflating: icon.png inflating: index.html [root@localhost srv]# ls 2000.png 21.js icon.png img index.html sound1.mp3 xiaoniaofeifei.zip將整個目錄下的所有信息拷貝至容器中去。先查看一下容器的id
[root@localhost srv]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 738b4313c4f7 nginx:latest "/docker-entrypoint.…" About an hour ago Up About an hour 192.168.0.101:49154->80/tcp pensive_chaplygin 3a885ede5267 nginx:latest "/docker-entrypoint.…" About an hour ago Up About an hour 192.168.0.101:49153->80/tcp distracted_antonelli c2c9273e9484 nginx:latest "/docker-entrypoint.…" 2 hours ago Up 2 hours 0.0.0.0:81->80/tcp, :::81->80/tcp mystifying_feistel 6ee5b735e752 nginx:latest "/docker-entrypoint.…" 2 hours ago Up 2 hours 192.168.0.101:80->80/tcp frosty_beaver e2e1a5cbc833 nginx:latest "/docker-entrypoint.…" 2 hours ago Up 2 hours 192.168.0.100:80->80/tcp jovial_raman [root@localhost srv]# docker rm -f `docker ps -a -q` 容器太多了刪除一下 738b4313c4f7 3a885ede5267 c2c9273e9484 6ee5b735e752 e2e1a5cbc833接著重新創建一個新的容器
[root@localhost srv]# docker run -d -p 80:80 nginx:latest e7d08547b7f70eeb16239c73dd5ac572d92a05b6273b13d55f1f5ffe55ec9a81 [root@localhost srv]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e7d08547b7f7 nginx:latest "/docker-entrypoint.…" 21 seconds ago Up 8 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp kind_haslett將解壓的文件拷貝至如下目錄,使用cp命令進行拷貝拷貝至容器的目錄下,這里的e7d085**f7為容器的id,接著進入該容器,使用exec
[root@localhost srv]# docker container cp . e7d08547b7f7:/usr/share/nginx/html [root@localhost srv]# docker exec -it e7d08547b7f7 /bin/bash root@e7d08547b7f7:/# cd /usr/share/nginx/html/ root@e7d08547b7f7:/usr/share/nginx/html# ls 2000.png 21.js 50x.html icon.png img index.html sound1.mp3 xiaoniaofeifei.zip root@e7d08547b7f7:/usr/share/nginx/html#接著訪問一下192.168.0.101,這里的ip是宿主機的ip
2.優化
? ? 使用過程中發現有一個bug需要修復下,需要修改下index.html
root@e7d08547b7f7:/usr/share/nginx/html# ls 2000.png 21.js 50x.html icon.png img index.html sound1.mp3 xiaoniaofeifei.zip root@e7d08547b7f7:/usr/share/nginx/html# vi index.html bash: vi: command not found發現沒有vi命令,這時可以現場裝一個vi,但是太麻煩了。因此這里代碼盡量不要使用cp命令放進去,退出到src目錄,使用exit退出當前容器。調試的時候盡量放置在宿主機上,這樣一邊修改一邊調試。
[root@localhost srv]# docker run -d -p 81:80 -v /srv:/usr/share/nginx/html nginx:latest -v --volumn /srv 宿主機目錄 /usr/share/nginx/html 容器目錄再次進入到Ip:port中進行訪問,注意這里需要刷新一下,f5普通刷新,shift+f5強制刷新。
使用者這種-v的好處就是,如果遇到bug就可以直接在宿主機上直接修改。比如現在有個標題
[root@localhost srv]# ls 2000.png 21.js icon.png img index.html sound1.mp3 xiaoniaofeifei.zip [root@localhost srv]# vi index.html在刷新,發現標題已經修改。使用docker volume 查詢volume命令,使用ls查詢當前有無卷
[root@localhost srv]# docker volume ls DRIVER VOLUME NAME [root@localhost srv]# [root@localhost _data]# docker run -d -p 82:80 -v teset:/usr/share/nginx/html nginx:latest 5d5d541f2394ff2a6975e31333f99014db8cf7f6c6c0a257d8bfd048d3b192e9使用test,發現沒有會自動創建一個卷
[root@localhost srv]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2f069022da24 nginx:latest "/docker-entrypoint.…" 52 seconds ago Up 6 seconds 80/tcp, 0.0.0.0:49153->82/tcp, :::49153->82/tcp pedantic_yalow ea037ed65357 nginx:latest "/docker-entrypoint.…" 11 minutes ago Up 11 minutes 0.0.0.0:81->80/tcp, :::81->80/tcp beautiful_haibt e7d08547b7f7 nginx:latest "/docker-entrypoint.…" 6 hours ago Up 6 hours 0.0.0.0:80->80/tcp, :::80->80/tcp kind_haslett [root@localhost srv]# docker volume ls DRIVER VOLUME NAME local teset那這個卷有什么好處呢?
[root@localhost srv]# docker volume inspect teset [{"CreatedAt": "2021-05-05T14:50:10+08:00","Driver": "local","Labels": null,"Mountpoint": "/var/lib/docker/volumes/teset/_data","Name": "teset","Options": null,"Scope": "local"} ]切換對應的掛載目錄
[root@localhost _data]# ls 50x.html index.html訪問一下首頁
[root@localhost _data]# rm -fr *[root@localhost _data]# cp /srv/* .再次刷新,就可以訪問。
[root@localhost _data]# docker run -d -p 83:80 -v teset:/usr/share/nginx/html nginx:latest 1e98cb4a3c77a7f5201bfe10fd20a36ced68225e7608121bbbfbbabffb13a1e9再次啟動一個83的容器,這樣就實現了數據共享。
總結
以上是生活随笔為你收集整理的docker之数据卷管理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: docker之网络访问
- 下一篇: kubernetes组件介绍