docker 容器数据卷
程序员文章站
2022-05-02 20:07:22
...
容器数据卷使用
方式一: 直接使用命令来挂载 -v
docker run -it -v 主机目录: 容器内目录 -p 主机端口: 容器端口
# 启动起来我们可以使用 docker inspect 容器id
实战: Mysql同步数据
# 运行容器,需要做数据挂载!
# 安装启动mysql,需要配置密码,这是官方的
# 官方测试: docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=密码 -d mysql:tag
#启动mysql
-d 后台运行
-p 端口映射
-v 端口映射
-e 环境配置
--name 容器名字
[[email protected] /]# docker run -d -p 3306:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=111111 --name mysql01 mysql
8d8466ef12d4545e28f16a730e228876606f493e4a08b169ab3b060c0d7bc071
[[email protected] /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8d8466ef12d4 mysql "docker-entrypoint.s…" 41 seconds ago Up 41 seconds 0.0.0.0:3306->3306/tcp, 33060/tcp mysql01
# 启动成功之后,在本地使用sqlyog连接测试
具名挂载和匿名挂载
# 匿名挂载
-v 容器内路径
-P 随机指定端口
[[email protected] data]# docker run -d -P --name nginx01 -v /etc/nginx nginx
5be48f9ba6242d59b69676925afe6d000f82224499c8f9cf09509869462004e8
[[email protected] data]# docker volume ls
DRIVER VOLUME NAME
local 0ad454db022f61cd843dcadd6d078437ef9d47b386f252c1e139c598ee756e15
local 2e10cc9657495b16987efee30bec9eed6b0a83651375102bc7ed3269e3a690fc
local 4f880d3214daf89242e45bfb472322499c3f3ddfe6ce90544006578999866192
local 5f84af7893a30847fe6cd24a95994d3f9655cafa1411d53504ad80b5f09001ad
local 6ef5f219c20345f24919126a1b3b71bc862e04d5e3427782ad627010d3f2f363
local 8b79202123a65162b8ae8c0504c5ddbd3242e71b7f9be74b62cae900d936f911
local 69a4e910a21de80f6c81ee8b6ef6359dbf9f1cbaa7ac54320507bb5c56fb926d
local 79dd4d386c2aa537a1a68dbb29047c071dd663ee76e56d277f4698f00bd3b75b
local 87b17859f01a114f74785596aad5b1ece3c323681d4f6a24c419ceb80a1698da
local 524dc615676ecf8598cba65bb4ea4bf13d744fdbc3829999dbda86d539117932
local 7719fcba783e43be25296965c69eb5c48c5cd1169671bbbc446a563a6ffd4267
local acdbb302b16df51d384f7f4b11ada1dd9ee07120fc017cd6bd62784be328e4fa
local ae989d7611eb4c57b775d2230bcd5611485f2dd9f3e385417d36cdea1069c0cc
local b16ee280edbf02b9f742de30e0056829b3589dfa4ec86315557e4375811e555d
local cb307cd2262c1f04f8c8f74d22c7a8a6292790b749e0f0cc13260812b49979f7
local e7c410c360a2b3a9e8916c243e550b8ec029180860d28bca8cae624835d19279
local ed783cc94b07a0e4619ccc742c04e7fcd0e9032e80823a7009e9fb0b2834714c
#具名挂载
# 通过 -v 卷名:容器内路径
[[email protected] data]# docker run -d -P -v nginxjuming:/etc/nginx nginx
4630b8aaea4b9f3758be62272aced33d5e643fbfe6d74702390f9ca618f09f93
[[email protected] data]# docker volume ls
DRIVER VOLUME NAME
local 0ad454db022f61cd843dcadd6d078437ef9d47b386f252c1e139c598ee756e15
local 2e10cc9657495b16987efee30bec9eed6b0a83651375102bc7ed3269e3a690fc
local 4f880d3214daf89242e45bfb472322499c3f3ddfe6ce90544006578999866192
local 5f84af7893a30847fe6cd24a95994d3f9655cafa1411d53504ad80b5f09001ad
local 6ef5f219c20345f24919126a1b3b71bc862e04d5e3427782ad627010d3f2f363
local 8b79202123a65162b8ae8c0504c5ddbd3242e71b7f9be74b62cae900d936f911
local 69a4e910a21de80f6c81ee8b6ef6359dbf9f1cbaa7ac54320507bb5c56fb926d
local 79dd4d386c2aa537a1a68dbb29047c071dd663ee76e56d277f4698f00bd3b75b
local 87b17859f01a114f74785596aad5b1ece3c323681d4f6a24c419ceb80a1698da
local 524dc615676ecf8598cba65bb4ea4bf13d744fdbc3829999dbda86d539117932
local 7719fcba783e43be25296965c69eb5c48c5cd1169671bbbc446a563a6ffd4267
local acdbb302b16df51d384f7f4b11ada1dd9ee07120fc017cd6bd62784be328e4fa
local ae989d7611eb4c57b775d2230bcd5611485f2dd9f3e385417d36cdea1069c0cc
local b16ee280edbf02b9f742de30e0056829b3589dfa4ec86315557e4375811e555d
local cb307cd2262c1f04f8c8f74d22c7a8a6292790b749e0f0cc13260812b49979f7
local e7c410c360a2b3a9e8916c243e550b8ec029180860d28bca8cae624835d19279
local ed783cc94b07a0e4619ccc742c04e7fcd0e9032e80823a7009e9fb0b2834714c
local nginxjuming
[[email protected] data]# docker volume inspect nginxjuming
[
{
"CreatedAt": "2020-11-29T18:22:13+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/nginxjuming/_data",
"Name": "nginxjuming",
"Options": null,
"Scope": "local"
}
]
# 所有的docker容器内的卷,没有指定目录的情况下
# 都是在/var/lib/docker/volumes/卷名/_data
[[email protected] /]# cd var/lib
[[email protected] lib]# ls
alternatives cloud dhclient initramfs misc os-prober postfix rsyslog systemd yum
authconfig containerd docker logrotate NetworkManager plymouth rpm selinux tpm
chrony dbus games machines ntp polkit-1 rpm-state stateless tuned
[[email protected] lib]# cd docker/volumes
[[email protected] volumes]# ls
0ad454db022f61cd843dcadd6d078437ef9d47b386f252c1e139c598ee756e15
2e10cc9657495b16987efee30bec9eed6b0a83651375102bc7ed3269e3a690fc
4f880d3214daf89242e45bfb472322499c3f3ddfe6ce90544006578999866192
524dc615676ecf8598cba65bb4ea4bf13d744fdbc3829999dbda86d539117932
5f84af7893a30847fe6cd24a95994d3f9655cafa1411d53504ad80b5f09001ad
69a4e910a21de80f6c81ee8b6ef6359dbf9f1cbaa7ac54320507bb5c56fb926d
6ef5f219c20345f24919126a1b3b71bc862e04d5e3427782ad627010d3f2f363
7719fcba783e43be25296965c69eb5c48c5cd1169671bbbc446a563a6ffd4267
79dd4d386c2aa537a1a68dbb29047c071dd663ee76e56d277f4698f00bd3b75b
87b17859f01a114f74785596aad5b1ece3c323681d4f6a24c419ceb80a1698da
8b79202123a65162b8ae8c0504c5ddbd3242e71b7f9be74b62cae900d936f911
acdbb302b16df51d384f7f4b11ada1dd9ee07120fc017cd6bd62784be328e4fa
ae989d7611eb4c57b775d2230bcd5611485f2dd9f3e385417d36cdea1069c0cc
b16ee280edbf02b9f742de30e0056829b3589dfa4ec86315557e4375811e555d
cb307cd2262c1f04f8c8f74d22c7a8a6292790b749e0f0cc13260812b49979f7
e7c410c360a2b3a9e8916c243e550b8ec029180860d28bca8cae624835d19279
ed783cc94b07a0e4619ccc742c04e7fcd0e9032e80823a7009e9fb0b2834714c
metadata.db
nginxjuming
[[email protected] volumes]# cd nginxjuming/
[[email protected] nginxjuming]# ls
_data
[[email protected] nginxjuming]# cd _data/
[[email protected] _data]# ls
conf.d fastcgi_params koi-utf koi-win mime.types modules nginx.conf scgi_params uwsgi_params win-utf
# 可以看到nginx.conf文件
我们通过具名挂载可以方便的找到一个卷,大多数情况都使用 具名挂载
# 如何确定是具名挂载还是匿名挂载,还是指定路径挂载
-v 容器内路径 #匿名挂载
-v 卷名:容器内路径 #具名挂载
-v /宿主机路径 : 容器内路径 #指定路径挂载
#通过 -v 容器内路径: ro rw 改变读写权限
ro read only
rw read write
#默认情况下的bind mount是rw权限
#一旦设置了容器权限,容器对挂载出来的内容就有限定了!
docker -run -P -name nginx01 -v /etc/nginx:ro nginx
docker -run -P -name nginx01 -v /etc/nginx:rw nginx
ro : 只要看到ro就说明这个路径只能通过宿主机来改变,容器内部无法操作
下一篇: php导入excel经典实例