Docker数据卷和dockerfile

本文深入探讨Docker数据卷的使用方法,包括如何通过不同命令实现宿主机与容器间目录的共享,数据卷容器的概念及其实现数据共享的机制,以及Dockerfile中VOLUME指令的用法。同时,文章提供了解决权限问题的方法,并介绍了数据卷容器的生命周期。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

docker数据卷


docker数据卷

docker run -it -v /宿主机绝对路径目录:/容器内容目录  镜像名

//此命令会自动创建相应的目录。命令成功之后,就建立了宿主机与容器内目录的共享,双边的改动双边都能看见。

容器退出 -> 宿主机修改共享目录下面的文件 -> docker start $(docker ps -l) 此种方式可以重新启动docker,并且能够共享刚才的目录。

docker run -it -v /宿主机绝对路径目录:/容器内目录:io  镜像名

带权限启动共享目录。容器内只能读取,不能修改。

Dockerfile与数据卷

可到https://hub.docker.com上search相关镜像,后边一般都有dockerfile查看例子的好去处。

可参照那里,写一个简单的Dockerfile

FROM centos
VOLUME ["/dataVolumeContainer1", "/dataVolumeContainer2"]
CMD echo "finished, ------success1"
CMD /bin/bash

运行命令根据Dockerfile build出一个镜像:

docker build -f /root/myDocker/Dockerfile -t zzyy/centos .

生成一个镜像,以docker run -it zzyy/centos 命令跑这个镜像之后,会自动在容器中生成

/dataVolumeContainer1, /dataVolumeContainer2两个目录,同事默认的在宿主机/var/lib/docker/volumes/容器目录1ID/_data生成相应的共享目录于容器种对应起来。这些信息可以通过docker inspect 容器ID查看到。

如果出现docker容器内访问出现cannot open directory:Permission denied,则在挂载目录候多加 --privileged=true参数。

数据卷容器:命名的容器挂载数据卷,其它容器通过挂载这个(父容器)实现数据共享,挂载数据卷的容器称为数据卷容器。

docker run -it --name dc01 zzyy/centos 这个会启动一个名字为dc01的容器,而且根据上面的Dockerfile它会挂载两个共享目录。

docker run -it --name dc02 --volumes-from dc01 zzyy/centos这个命令会共享dc01的那两个共享目录。

此时删掉 dc01,共享的数据还存在,又创建 dc03,dc03也能够继承共享的目录。直到没有容器存活,共享的目录才会死去。

 

Dockerfile语法基础

基础规则:

1.每条保留字指令都必须大写字母且后面要跟随至少一个参数

2. 指令按照从上到下,顺序执行: docker build -f /root/Dockerfile2 -t 新镜像名字:TAG .     //.表示当前路径, -f表示Dockerfile路径

3. #表示注释,每条指令都会创建一个新的镜像层,并对镜像进行提交

关键字:

FROM #基础镜像当前镜像是基于哪一个基础镜像的,

MAINTAINER #镜像维护者的姓名和邮箱

RUN #容器构建时需要运行的命令

EXPOSE # 当前容器对外暴露出的端口

WORKDIR #指定在创建容器后,终端默认登录的进来工作目录,一个落脚点

ENV  #用来在构建镜像过程中设置环境变量

ADD #将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包

COPY #类似ADD, 拷贝文件和目录到镜像中,将从构建上下文目录中<源路径>的文件/目录复制到新的一层镜像内目标路径位置上,如COPY src dst;   COPY ["src", "dst"]

VOLUME #容器数据卷,用于数据保存和持久化工作

CMD #指定一个容器启动时要运行的命令,Dockerfile中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run之后的参数替换

ENTRYPOINT #指定一个容器启动时要运行的命令,和CMD一样都是指定容器启动程序和参数。docker run后面的参数会追加到ENTRYPOINT后面

ONBUILD #当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后父镜像的onbuild被触发

Docker安装常规步骤

docker search MySQL  //先去仓库查找要安装的镜像

 docker pull mysql:5.6 //想要安装的镜像,先把它拉取下来,一般是拉取star最多的那个

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值