携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第22天,点击查看活动详情
commit镜像
docker commit 提交容器成为一个新的副本 命令和git原理类似 docker commit -m="提交的描述信息" -a="作者" 容器id 目标镜像名:【tag】
容器数据卷
什么是容器数据卷
需求:数据可以持久化
MYSQL数据可以存储在本地
容器之间可以有一个数据共享的技术,docker容器中产生的数据,同步到本地
这就是卷技术!目录的挂载,将我们容器内的目录,挂载到linux上面
总结一句话:容器的持久化和同步操作!容器之间也可以数据共享
使用数据卷
方式一:直接使用命令来挂载 -v
docker run -it -v 主机目录 容器内目录
#测试
docker run -it -v /home/ceshi:/home centos /bin/bash
安装Mysql
获取镜像
docker pull mysql:5.7
运行容器 需要做数据挂载 安装启动mysql,需要配置密码
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
-d 后台运行
-p 端口映射
-v 卷挂载
-e 环境配置
--name 容器名字
docker run -d -p 3310:3386 -v /home/mysql/conf:/etc/conf.d -v\ /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01\ mysql:5.7
[root@VM-0-12-centos ~]# docker run -d -p 3310:3386 -v /home/mysql/conf:/etc/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
Unable to find image 'mysql:5.7' locally
5.7: Pulling from library/mysql
ffbb094f4f9e: Pull complete
df186527fc46: Pull complete
fa362a6aa7bd: Pull complete
5af7cb1a200e: Pull complete
949da226cc6d: Pull complete
bce007079ee9: Pull complete
eab9f076e5a3: Pull complete
c7b24c3f27af: Pull complete
6fc26ff6705a: Pull complete
bec5cdb5e7f7: Pull complete
6c1cb25f7525: Pull complete
Digest: sha256:d1cc87a3bd5dc07defc837bc9084f748a130606ff41923f46dec1986e0dc828d
Status: Downloaded newer image for mysql:5.7
65a9ef69f2c100320db3dda52836f022da651374552b0d745f00bfa36ac69930
具名和匿名挂载
匿名挂载
-v 容器内路径
docker run -d -P --name nginx -v /ect/nginx nginx
查看所有volume的情况\
docker volume ls
[root@VM-0-12-centos ~]# docker volume ls
DRIVER VOLUME NAME
local 004cc575bff70be39abcbffe74414c459c15d6997955e25bc08aa377f116346b
local 42a960cf78ef8bf9c3734b2b57ec1070734e2f2bcbefdf55e68520379c14c41f
这里发现,这种就是匿名挂载,我们在-v只写了容器内的路径,没有写容器外的路径
具名挂载
docker run -d -P --name nginx02 -v H0ne:/etc/nginx nginx
通过 -v 卷名:容器内的路径
[root@VM-0-12-centos ~]# docker run -d -P --name nginx02 -v H0ne:/etc/nginx nginx
ff5478d2d1e185c2338cf131177d000b9d171e91e65ff0bf44dbceb12e390ce6
[root@VM-0-12-centos ~]# docker volume ls
DRIVER VOLUME NAME
local 004cc575bff70be39abcbffe74414c459c15d6997955e25bc08aa377f116346b
local 42a960cf78ef8bf9c3734b2b57ec1070734e2f2bcbefdf55e68520379c14c41f
local H0ne
查看一下这个卷
docker volume inspect H0ne
[root@VM-0-12-centos ~]# docker volume inspect H0ne
[
{
"CreatedAt": "2021-12-11T10:13:37+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/H0ne/_data",
"Name": "H0ne",
"Options": null,
"Scope": "local"
}
]
所有的docker容器内的卷,没有指定目录的情况下都是在/var/lib/docker/volumes/xxxx/_data
我们通过具名挂载可以方便的找到我们的一个卷 大多数情况在使用的具名挂载
如何确定是具名挂载还是匿名挂载,还是指定路径挂载!
-v 容器内路径 #匿名挂载
-v 卷名:容器内路径 #具名挂载
-v /宿主机路径: :容器内路径 #指定路径挂载!
拓展:
通过-v 容器内的路径 ro rw改变读写权限
ro readonly 只读
rw readwrite 可读可写
一旦这个设置了容器权限,容器对我们挂载出来的内容就有限定了
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:ro nginx
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:rw nginx
ro 只要看到ro就说明这个路径只能通过宿主机来操作,容器内部是无法操作!