docker之容器数据卷
目录
1.使用volume添加数据卷
2.dockerFile添加数据卷
3.数据卷容器
4.dockerFile解析
4.1dockerfile解析过程
4.2 dockerfile保留关键字
介绍docker数据卷之前,带着几个疑问?
- 数据卷是什么
- 数据卷能干什么
- 数据卷
- 数据卷容器
比如在dcoker中跑的程序等需要将结果的保存下来,因为使用的是pc,不是服务器,不可能一直开机运行,就需要在docker关闭的时候就需要把这部分数据保存下来,此时就需要把这部分数据进行持久化操作,那保存在哪里呢。类似我们在内存中数据有时需要写入到硬盘或者数据库中,那一断电内存中就没有数据,但是这样就是将数据永久的保存下来了,那在docker中一样,docker中就像是在内存中的数据,运行的时候在,关闭容器的就没有了,此时就需要容器数据卷持久化保存。数据卷是一个可供一个或多个容器使用的特殊目录,它绕过UFS,可以提供很多有用的特性:
- 数据卷可以在容器之间共享和重用
- 对数据卷的修改会立马生效
- 对数据卷的更新,不会影响镜像
- 数据卷默认会一直存在,即使容器被删除。
1.使用volume添加数据卷
volumes:Docker管理宿主机文件系统的一部分,默认位于 /var/lib/docker/volumes 目录中;
在宿主机中
[root@localhost /]# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var在容器中,当前有centos这个镜像,启动并进入到容器内
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat latest c43a65faae57 2 days ago 667MB
nginx latest 62d49f9bab67 4 weeks ago 133MB
hello-world latest d1165f221234 2 months ago 13.3kB
centos latest 300e315adb2f 5 months ago 209MB
[root@localhost ~]# docker run -it centos /bin/bash
[root@429cce9277be /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
文件如上所示,宿主机和容器内均无myDataVolumes文件,因此新建一个文件,先了解下如下命令
docker run -it -v/宿主机绝对路径目录:容器内目录 镜像名
[root@localhost /]# docker run -it -v /myDataVolume:/dataVolumeContainer centos /bin/bash
此时在宿主机和容器中分别生成了myDataVolume和dataVolumeContainer文件,这样就实现了宿主机和容器之间的挂载。至于实现了数据的共享和对接,先用实验验证这样才更有说服力;记录docker id。
[root@localhost /]# docker inspect d0179cc8f199
....."HostConfig": {"Binds": ["/myDataVolume:/dataVolumeContainer"],
.....
其中有一段描述如上所示.那容器和宿主之间的数据到底如何共享呢?
现在在主机中新建一个文件,接着如容器中查看
[root@localhost /]# cd myDataVolume/
[root@localhost myDataVolume]# ls
[root@localhost myDataVolume]# touch host.txt
[root@d0179cc8f199 /]# ls
bin dataVolumeContainer dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[root@d0179cc8f199 /]# cd dataVolumeContainer/
[root@d0179cc8f199 dataVolumeContainer]# ls
host.txt
发现容器中确实也新增了数据,接着在容器的host.txt写入数据;同时在容器中新建一个文件
[root@d0179cc8f199 dataVolumeContainer]# vi host.txt
[root@d0179cc8f199 dataVolumeContainer]# cat host.txt
container update
[root@d0179cc8f199 dataVolumeContainer]# touch container.txt
[root@d0179cc8f199 dataVolumeContainer]# ls
container.txt host.txt
现在在宿主机中进行查阅
container.txt host.txt
[root@localhost myDataVolume]# cat host.txt
container update
那如果容器退出后,修改宿主机修改数据是否能实现同步呢?
[root@d0179cc8f199 dataVolumeContainer]# exit
exit
注意:CTRL+P+Q是临时退出容器
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
在宿主机新增一个文件host02.txt,同时在host.txt做如下更新,新增一个host update,那此时容器中是否会同步更新呢,注意此时容器在上一步已经退出了
[root@localhost myDataVolume]# touch host02.txt
[root@localhost myDataVolume]# ls
host02.txt host.txt
[root@localhost myDataVolume]# vi host.txt
[root@localhost myDataVolume]# cat host.txt
container update
host update
使用docker命令查看最近运行的容器,可以查看指定数量的容器,也可以查看上一次运行的容器
[root@localhost ~]# docker ps -n 2
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d0179cc8f199 centos "/bin/bash" 21 minutes ago Exited (0) 4 minutes ago jovial_keldysh
1c381dfbf5b1 centos "/bin/bash" 21 minutes ago Exited (0) 21 minutes ago sad_mayer
[root@localhost ~]# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d0179cc8f199 centos "/bin/bash" 21 minutes ago Exited (0) 5 minutes ago jovial_keldysh
[root@localhost ~]#
这里获取到上一次运行的容器的id信息
[root@localhost ~]# docker start d0179cc8f199 //启动容器
d0179cc8f199
[root@localhost ~]# docker attach d0179cc8f199 //重新进入容器
[root@d0179cc8f199 /]# ls
bin dataVolumeContainer dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[root@d0179cc8f199 /]# cd dataVolumeContainer/
[root@d0179cc8f199 dataVolumeContainer]# ls
container.txt host.txt host02.txt
[root@d0179cc8f199 dataVolumeContainer]# cat host.txt
container update
host update
发现只要实现了宿主机和容器之间实现了数据挂载,此时无论容器是否停止退出,数据都会同步
注意:对于使用docker inspect dockerID有 VolumesRW的,如果是false,这里是读写控制的,此时建立数据卷需要使用
docker run -it -v /宿主机绝对路径:/容器绝对路径 :ro 镜像名;一般这种情况是主机可以向共享数据读写,但是容器只能向共享数据进行读操作。
2.dockerFile添加数据卷
dockerFile可以理解为镜像这个模板的描述文件,如何理解呢?在dockerhub上
包含from openjdk..... makedir .... EXPOSE 8080等相关的描述信息,因此所谓的dockerFile就是按照自己的一套语法规则描述镜像的一段“文字”。这里创建一个Dockerfile,加入如下内容
[root@localhost mydocker]# vi Dockerfile
[root@localhost mydocker]# cat Dockerfile
# volume test
FROM centos //类似extend继承自哪里
VOLUME ["/dataVolumeContainer1","/dataVolumContainer2"] //类似上文中的-v 宿主机绝对路径,但是使用命令的不支持这种[]的操作,因为其有迁移性
CMD echo "finished,..........success1"
CMD /bin/bash
接下来使用创建的Dockerfile构建镜像,构建的命令如下:
docker build -f Dockerfile文件的目录 -t 指定命名空间/镜像名称 .
[root@localhost mydocker]# ls
Dockerfile[root@localhost mydocker]# docker build -f /mydocker/Dockerfile -t rhz/centos .
Sending build context to Docker daemon 2.048kB
Step 1/4 : FROM centos---> 300e315adb2f
Step 2/4 : VOLUME ["/dataVolumeContainer1","/dataVolumContainer2"]---> Running in 58c7e0ad8386
Removing intermediate container 58c7e0ad8386---> 8885157a1c04
Step 3/4 : CMD echo "finished,..........success1"---> Running in ffb77e9d3f73
Removing intermediate container ffb77e9d3f73---> 8ea2c4f80712
Step 4/4 : CMD /bin/bash---> Running in 6d5f23182e9f
Removing intermediate container 6d5f23182e9f---> 381549de3982
Successfully built 381549de3982
Successfully tagged rhz/centos:latest
一层一层的叠加,直到build成功
[root@localhost mydocker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
rhz/centos latest 381549de3982 2 minutes ago 209MB
运行创建的rhz/centos镜像
[root@localhost mydocker]# docker run -it rhz/centos
[root@ac6a8883a59f /]# ls
bin dataVolumeContainer1 etc lib lost+found mnt proc run srv tmp var
dataVolumContainer2 dev home lib64 media opt root sbin sys usr
发现这里一次性在容器内创建了两个文件-即创建了两个目录卷。所以Dockerfile可以创建多个文件,创建文件的目录就是容器和宿主机进行数据的交互和同步的“位置”
[root@ac6a8883a59f /]# cd dataVolumeContainer1/
[root@ac6a8883a59f dataVolumeContainer1]# ls
[root@ac6a8883a59f dataVolumeContainer1]# touch contain01.txt
在宿主机的一个dataVolumeContainer1创建文件,在使用命令创建的时候可以指定宿主机目录,但是这里并没有指定宿主机的目录,这个如果不指定会有一个默认的目录
[root@localhost ~]# docker inspect ac6a8883a59f
...."Mounts": [{"Type": "volume","Name": "66b75d5d855989cc49e63335918265609d0bb3fb3099a7e834a1fb513febe817","Source": "/var/lib/docker/volumes/66b75d5d855989cc49e63335918265609d0bb3fb3099a7e834a1fb513febe817/_data","Destination": "/dataVolumeContainer1","Driver": "local","Mode": "","RW": true,"Propagation": ""},{"Type": "volume","Name": "36940f772f78dd2baa22c2be9a300516fc0bd6233ba7eb49b5dfb2cb3c74a8d1","Source": "/var/lib/docker/volumes/36940f772f78dd2baa22c2be9a300516fc0bd6233ba7eb49b5dfb2cb3c74a8d1/_data","Destination": "/dataVolumContainer2","Driver": "local","Mode": "","RW": true,"Propagation": ""}]
....
这里记录了对应宿主机的目录为/var/lib/docker/volumes....,其次这里的读写为true。进入到宿主机中在宿主机的目录下发现也有container01.txt文件。
3.数据卷容器
刚才介绍了数据卷的如何实现容器和宿主机之间的进行的共享,那什么是数据卷容器呢?使用 --volume-fron
命名的容器挂载数据卷,其他容器通过挂载这个(父容器)实现数据共享,挂载数据卷的容器,称为数据卷容器。结合上一步创建的示例进行介绍
上一步 创建了一个命名空间为rhz镜像为centos的镜像
[root@localhost _data]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
rhz/centos latest 381549de3982 8 hours ago 209MB
同时已经创建了容器卷/dataVolumeContainer1和/dataVolumeContainer1
[root@139c5588384f /]# ls
bin dataVolumeContainer1 etc lib lost+found mnt proc run srv tmp var
dataVolumContainer2 dev home lib64 media opt root sbin sys usr
退出容器
[root@localhost _data]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@localhost _data]# docker run -it --name dc01 rhz/centos //启动容器,并使用--name设置一个指定名称,类似于别名
[root@098a7d43b148 dataVolumContainer2]# touch dc01_add.txt //创建一个文件共后续使用
[root@098a7d43b148 dataVolumContainer2]# [root@localhost _data]# //按下cctrl+p+q暂时离开容器
[root@localhost _data]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
098a7d43b148 rhz/centos "/bin/sh -c /bin/bash" 4 minutes ago Up 3 minutes dc01 //容器进程中展示为的指定的名称dc01,如果不指定名称,则run容器的时候会任意生成一个名称
将刚才创建的dc01作为父容器,是的dc02和dc03继承于dc01
[root@localhost _data]# docker run -it --name dc02 --volumes-from dc01 rhz/centos
[root@d0166e9209b9 /]# ls
bin dataVolumeContainer1 etc lib lost+found mnt proc run srv tmp var
dataVolumContainer2 dev home lib64 media opt root sbin sys usr
自然这里从容器dc01派生的dc02,文件,属性和dc01一致,那dataVolumContainer2中年是否也会有上一步创建的文件dc01_add.txt呢?
[root@d0166e9209b9 /]# cd dataVolumContainer2/
[root@d0166e9209b9 dataVolumContainer2]# ls
dc01_add.txt
[root@d0166e9209b9 dataVolumContainer2]# touch dc02_add.txt
接着在宿主机查看当前运行的容器进程
[root@localhost volumes]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d0166e9209b9 rhz/centos "/bin/sh -c /bin/bash" 3 minutes ago Up 3 minutes dc02
098a7d43b148 rhz/centos "/bin/sh -c /bin/bash" 11 minutes ago Up 10 minutes dc01
同样创建一个继承在dc01的容器dc03并在dc03的dataVolumContainer中新增一个文件
[root@localhost _data]# docker run -it --name dc03 --volumes-from dc01 rhz/centos
[root@de8b2507ddf5 /]# cd dataVolumContainer2/
[root@de8b2507ddf5 dataVolumContainer2]# ls
dc01_add.txt dc02_add.txt
[root@de8b2507ddf5 dataVolumContainer2]# touch dc03_add.txt
同样在宿主机查询当前运行的容器进程
[root@localhost volumes]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
de8b2507ddf5 rhz/centos "/bin/sh -c /bin/bash" About a minute ago Up About a minute dc03
d0166e9209b9 rhz/centos "/bin/sh -c /bin/bash" 9 minutes ago Up 8 minutes dc02
098a7d43b148 rhz/centos "/bin/sh -c /bin/bash" 17 minutes ago Up 16 minutes dc01
[root@localhost volumes]# docker attach dc01
[root@098a7d43b148 dataVolumContainer2]# ls
dc01_add.txt dc02_add.txt dc03_add.txt
这样继承的容器,实现了容器卷的共享和继承功能。那如果删除删除了父容器dc01,那dc02和dc03还可以访问吗?
[root@localhost volumes]# docker rm -f dc01
dc01
[root@localhost volumes]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
de8b2507ddf5 rhz/centos "/bin/sh -c /bin/bash" 5 minutes ago Up 5 minutes dc03
d0166e9209b9 rhz/centos "/bin/sh -c /bin/bash" 13 minutes ago Up 13 minutes dc02
[root@localhost volumes]# docker attach dc02
[root@d0166e9209b9 dataVolumContainer2]# ls
dc01_add.txt dc02_add.txt dc03_add.txt
[root@d0166e9209b9 dataVolumContainer2]# touch dc02_update.txt
那dc03中是否有呢?
[root@localhost volumes]# docker attach dc03
[root@de8b2507ddf5 dataVolumContainer2]# ls
dc01_add.txt dc02_add.txt dc02_update.txt dc03_add.txt
所以,容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止。
4.dockerFile解析
回顾下前面使用dockerFile流程
- 按照dockerfile规则手动编写dockerfile文件
- docker build构建镜像
- run运行
但是上面介绍的很粗略,dcokerfile是用来构建docker镜像的构建文件,是由一系列命令和参数构成的脚本文件。那构建的步骤就是上面介绍的,dockerfile编写,docker build ,docker run
那dockerfile到底是什么样子的呢,结合centos介绍一下
[root@localhost /]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
rhz/centos latest 381549de3982 9 hours ago 209MB
centos latest 300e315adb2f 5 months ago 209MB
在hub.docker.com中,搜索centos
FROM scratch //所有镜像的祖先,类似object类
ADD centos-7-x86_64-docker.tar.xz /LABEL \ //标签org.label-schema.schema-version="1.0" \org.label-schema.name="CentOS Base Image" \org.label-schema.vendor="CentOS" \org.label-schema.license="GPLv2" \org.label-schema.build-date="20201113" \org.opencontainers.image.title="CentOS Base Image" \org.opencontainers.image.vendor="CentOS" \org.opencontainers.image.licenses="GPL-2.0-only" \org.opencontainers.image.created="2020-11-13 00:00:00+00:00"CMD ["/bin/bash"] //使用bin/bash执行,所说在执行centos的时候,加不加/bin/bash都可以,因为人家自带了
4.1dockerfile解析过程
所谓docker解析过程就是类似java或python类中,先加载什么,接着加载什么的含义。依然先介绍下dockerfile的规则,上面的centos的dockerfile中看出
- 每条保留指令都必须为大写字母,且后面接着一条或者多条指令
- 指令按照从上往下的顺序执行
- #表示注释
- 每条指令都会创建一个新的镜像层,并对镜像进行提交
DockerFile的大致流程如下:
- docker从基础镜像运行一个容器
- 执行一条指令并对容器进行修改
- 执行类似docekr commit命令的操作提交一个新的镜像层
- docker基于刚才提交的镜像再创建一个新的容器
- 执行dockerfile中的下一条指令
4.2 dockerfile保留关键字
目前主要的关键字如下所示:
FROM //基础镜像,当前新的镜像是基于哪个镜像“派生”的
MAINTAINER //镜像维护者的姓名和邮箱
RUN //容器构建的时候运行的命令
EXPOSE //暴露镜像对外的端口,如果tomcat中的 8080
WORKDIR //指定在创建容器后,终端默认登录进入的目录,类似进入登录进入linux中的~目录
ENV //用来在构建过程中设置环境变量
ADD //新增一个包并且解压缩
COPY //拷贝一个包
VOLUME //容器数据卷,用于数据保存和持久化
CMD //指定容器启动时运行的命令 ,只有最后一个生效,如果文件中有多个cmd命令,则最后一个生效
ENTRYPOINT //指定容器启动时运行的命令,类似命令追加,多条都生效
ONBUILD //当构建一个被继承的dockerfile时运行命令,父镜像在被子镜像继承后父镜像的onbuild会被触发,比如一个镜像images_father,另一个镜像在dockerfile中FROM images_father,此时在build的时候就会触发
结合上述的关键字运行实际示例介绍下。
对于常见的 FROM SCRATCH,Docker Hub中99%的镜像都是通过在base镜像中安装和配置需要的软件构建出来的
[root@localhost /]# docker rm -f $(docker ps -q)
删除了所有docker容器,这里再次启动容器
[root@localhost /]# docker run -it centos /bin/bash
[root@88bebcdce99d /]# vim rhx.txt
bash: vim: command not found
[root@88bebcdce99d /]# ifconfig
bash: ifconfig: command not found
这里发现进入的目录为容器的/目录,这个centos是从阿里云上拉取的,只有几百M,但是因为只有基础的功能,导致没有很多命令不支持,因此这里想构建一个支持这些命令的镜像。
[root@localhost mydocker]# vim Dockerfile2
[root@localhost mydocker]# ls
Dockerfile Dockerfile2
同时在Dockerfile2中新增如下内容
[root@localhost mydocker]# cat Dockerfile2FROM centosmaintainer rhx<rhx@123.com> //作者邮箱ENV MYPATH /usr/local //设置环境变量
WORKDIR $MYPATHRUN yum -y install vim
RUN yum -y install net-toolsEXPOSE 80CMD echo $MYPATH
CMD echo "success------ok"
CMD /bin/bash
接着构建包含如上命令的centos镜像
[root@localhost mydocker]# docker build -f /mydocker/Dockerfile2 -t mycentos:1.3 .//-t 给镜像加一个tag
//docker build -t ImageName:TagName dir,其中Dockerfile所在目录,这里.表示当前目录
//-f :指定要使用的Dockerfile路径
这里展示部分构建的信息
Complete!
Removing intermediate container 3a2dda1457bc---> 864561d93c2d
Step 7/10 : EXPOSE 80---> Running in 58a04c6e7115
Removing intermediate container 58a04c6e7115---> 4ade6abc039a
Step 8/10 : CMD echo $MYPATH---> Running in 448013640f1b
Removing intermediate container 448013640f1b---> 3b9c6cca3540
Step 9/10 : CMD echo "success------ok"---> Running in 489d5d540d09
Removing intermediate container 489d5d540d09---> e3ed1f7c28b8
Step 10/10 : CMD /bin/bash---> Running in d3af2ecd7cf9
Removing intermediate container d3af2ecd7cf9---> 4c74332b0082
Successfully built 4c74332b0082
Successfully tagged mycentos:1.3
查看一下镜像信息
[root@localhost mydocker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mycentos 1.3 4c74332b0082 About a minute ago 291MB
以刚才创建的镜像生成容器
[root@localhost mydocker]# docker run -it mycentos:1.3
[root@ed61d42abbcc local]# pwd //进入到指定的/usr/local目录
/usr/local
[root@ed61d42abbcc local]# vim abc.txt
mycentos生成历史也可以查阅
[root@localhost mydocker]# docker history mycentos:1.3
IMAGE CREATED CREATED BY SIZE COMMENT
4c74332b0082 7 minutes ago /bin/sh -c #(nop) CMD ["/bin/sh" "-c" "/bin… 0B
e3ed1f7c28b8 7 minutes ago /bin/sh -c #(nop) CMD ["/bin/sh" "-c" "echo… 0B
3b9c6cca3540 7 minutes ago /bin/sh -c #(nop) CMD ["/bin/sh" "-c" "echo… 0B
4ade6abc039a 7 minutes ago /bin/sh -c #(nop) EXPOSE 80 0B
864561d93c2d 7 minutes ago /bin/sh -c yum -y install net-tools 23.4MB
cb6e60a02fab 7 minutes ago /bin/sh -c yum -y install vim 58.1MB
5374a0be7483 9 minutes ago /bin/sh -c #(nop) WORKDIR /usr/local 0B
ecddfdced96f 9 minutes ago /bin/sh -c #(nop) ENV MYPATH=/usr/local 0B
97d07ae4d2be 9 minutes ago /bin/sh -c #(nop) MAINTAINER rhx<rhx@123.co… 0B
300e315adb2f 5 months ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
<missing> 5 months ago /bin/sh -c #(nop) LABEL org.label-schema.sc… 0B
<missing> 5 months ago /bin/sh -c #(nop) ADD file:bd7a2aed6ede423b7… 209MB
接着介绍一下所谓CMD命令覆盖和NETRYPOINT追加的含义,Docker run之后的命令会被当做参数传递给ENTRYPOINT,形成新的命令组合。在mydocker下创建一个Dockerfile2文件
[root@localhost mydocker]# cat Dockerfile3
FROM centos
RUN yum install -y curl
CMD ['curl','-s','https://ip.cn']
[root@localhost mydocker]# docker build -f /mydocker/Dockerfile3 -t myip .
使用Myip镜像创建一个容器
[root@localhost mydocker]# docker run -it myip
此时如果希望显示http头信息,就需要加上-i参数
[root@localhost mydocker]# docker run myip -i
docker: Error response from daemon: OCI runtime create failed: container_linux.go:367: starting container process caused: exec: "-i": executable file not found in $PATH: unknown.
ERRO[0002] error waiting for container: context canceled
但由于Dockerfile3中命令后如果加上-i
CMD curl -s https://ip.cn
CMD -i
此时只有-i命令生效。所以解决该问题可以使用ENTRYPOINT,将Dockerfile3中的最后一行CMD curl -s https://ip.cn中替换为ENTRYPOINT ...即可解决。
FROM centos
RUN yum install -y curl
ENTRYPOINT ['curl','-s','https://ip.cn']
docker之容器数据卷相关推荐
- Docker 使用容器数据卷 实现宿主机与容器共享数据 容器数据持久化
容器数据卷:可以实现宿主机与容器进行共享.容器数据持久化,容器与容器共享数据.可以在run镜像时使用-v参数指定宿主机与容器进行挂载的目录,也可以使用dockerfile的volume指定容器中容器数 ...
- docker容器数据卷基本操作
在实际运用中,如果使用docker部署应用的时候,有这么一种情况,需要有个位置可以同步docker容器上的数据到服务器上,更通俗点讲,我们需要在服务器上开启一个位置,这个位置可以连接docker容器中 ...
- Docker容器数据卷讲解
概述 为什么Docker需要容器数据卷技术:如果没有数据卷技术,比如一个由mysql镜像创建运行的容器,产生的数据就会保存在容器中,数据的生命周期与容器的生命周期一致,如果删除了该容器,相应的数据也会 ...
- docker入门,镜像,容器,数据卷,dockerfile,docker网络,springboot微服务打包docker镜像[狂神yyds]
docker学习大纲 docker概述 docker安装 docker命令 镜像命令 容器命令 操作命令 - docker镜像 容器数据卷 dockerfile docker网络原理 IDEA整合do ...
- docker 数据卷 mysql_Docker容器数据卷原理及使用方法解析
什么是容器数据卷 如果数据都在容器中,一旦容器删除,数据就会丢失! eg : mysql容器删了,就是我们常说的删库跑路. 需求:数据可以持久化,即时删掉容器,我们的数据还在 容器直接可以有一个数据共 ...
- Docker镜像、容器数据卷和Dockerfile
Docker镜像 概述 镜像是一种轻量级.可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码.运行时.库.环境变量和配置文件. UnionFS ...
- Docker系列 五.Docker容器数据卷
五.Docker容器数据卷 环境&工具: 阿里云轻量级服务器.CentOS 7系统.FinalShell(其他连接客户端也可以) 是什么 docker的理念将运行的环境打包形成容器运行,运行可 ...
- Docker小白到实战之容器数据卷,整理的明明白白
前言 上一篇把常用命令演示了一遍,其中也提到容器的隔离性,默认情况下,容器内应用产生的数据都是由容器本身独有,如果容器被删除,对应的数据文件就会跟着消失.从隔离性的角度来看,数据就应该和容器共存亡:但 ...
- Docker(三) 使用容器数据卷实现数据持久化与容器数据共享
一,什么是容器数据卷 出现背景:我们在运行的容器中所产生的数据都生成在容器中,如果容器后期被我们删除,那么在容器中的文件数据都将彻底丢失.为了获得容器中的数据,只能通过 docker cp 命令将容器 ...
最新文章
- shell 全局和局部变量
- 《秋暮登北楼》王武陵
- 正态分布的峰度和偏度分别为_ML中的正态分布
- 普通电阻触摸屏多点触摸低成本解决方 转载
- python绘制汉字_OpenCV Python 绘制中文字
- 记一些关于acm的小知识(自用,粗糙,勿点呀)
- eclipse提示打不开java虚拟机
- 惠普台式计算机耳机插口,hp电脑耳机插孔没声音的解决方法
- Android原生框架--Xui使用
- 数据库索引到底是什么,是怎样工作的?
- [大话技术]话聊有趣的23种设计模式
- python程序员专用壁纸_神级python程序员分享的让小白30分钟快速上手的一张神图,赶快收藏!...
- 平面设计中的插画设计技巧
- 东郊到家预约系统开发流程
- emu8086汇编语言——简易学生成绩管理系统
- “微信教父”张小龙2021最新演讲,视频号、直播、创作者透漏了几大重要趋势丨国仁网络
- 【传感器大赏】3轴模拟加速度传感器
- 英语不好怎么学python?这份python英语常用单词给我收好
- Maven Archetype脚手架制作
- 2023考研辅导机构:考研复试调剂十大问题答疑