欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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就说明这个路径只能通过宿主机来改变,容器内部无法操作

相关标签: Environment