目录

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之容器数据卷相关推荐

  1. Docker 使用容器数据卷 实现宿主机与容器共享数据 容器数据持久化

    容器数据卷:可以实现宿主机与容器进行共享.容器数据持久化,容器与容器共享数据.可以在run镜像时使用-v参数指定宿主机与容器进行挂载的目录,也可以使用dockerfile的volume指定容器中容器数 ...

  2. docker容器数据卷基本操作

    在实际运用中,如果使用docker部署应用的时候,有这么一种情况,需要有个位置可以同步docker容器上的数据到服务器上,更通俗点讲,我们需要在服务器上开启一个位置,这个位置可以连接docker容器中 ...

  3. Docker容器数据卷讲解

    概述 为什么Docker需要容器数据卷技术:如果没有数据卷技术,比如一个由mysql镜像创建运行的容器,产生的数据就会保存在容器中,数据的生命周期与容器的生命周期一致,如果删除了该容器,相应的数据也会 ...

  4. docker入门,镜像,容器,数据卷,dockerfile,docker网络,springboot微服务打包docker镜像[狂神yyds]

    docker学习大纲 docker概述 docker安装 docker命令 镜像命令 容器命令 操作命令 - docker镜像 容器数据卷 dockerfile docker网络原理 IDEA整合do ...

  5. docker 数据卷 mysql_Docker容器数据卷原理及使用方法解析

    什么是容器数据卷 如果数据都在容器中,一旦容器删除,数据就会丢失! eg : mysql容器删了,就是我们常说的删库跑路. 需求:数据可以持久化,即时删掉容器,我们的数据还在 容器直接可以有一个数据共 ...

  6. Docker镜像、容器数据卷和Dockerfile

    Docker镜像 概述 镜像是一种轻量级.可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码.运行时.库.环境变量和配置文件. UnionFS ...

  7. Docker系列 五.Docker容器数据卷

    五.Docker容器数据卷 环境&工具: 阿里云轻量级服务器.CentOS 7系统.FinalShell(其他连接客户端也可以) 是什么 docker的理念将运行的环境打包形成容器运行,运行可 ...

  8. Docker小白到实战之容器数据卷,整理的明明白白

    前言 上一篇把常用命令演示了一遍,其中也提到容器的隔离性,默认情况下,容器内应用产生的数据都是由容器本身独有,如果容器被删除,对应的数据文件就会跟着消失.从隔离性的角度来看,数据就应该和容器共存亡:但 ...

  9. Docker(三) 使用容器数据卷实现数据持久化与容器数据共享

    一,什么是容器数据卷 出现背景:我们在运行的容器中所产生的数据都生成在容器中,如果容器后期被我们删除,那么在容器中的文件数据都将彻底丢失.为了获得容器中的数据,只能通过 docker cp 命令将容器 ...

最新文章

  1. shell 全局和局部变量
  2. 《秋暮登北楼》王武陵
  3. 正态分布的峰度和偏度分别为_ML中的正态分布
  4. 普通电阻触摸屏多点触摸低成本解决方 转载
  5. python绘制汉字_OpenCV Python 绘制中文字
  6. 记一些关于acm的小知识(自用,粗糙,勿点呀)
  7. eclipse提示打不开java虚拟机
  8. 惠普台式计算机耳机插口,hp电脑耳机插孔没声音的解决方法
  9. Android原生框架--Xui使用
  10. 数据库索引到底是什么,是怎样工作的?
  11. [大话技术]话聊有趣的23种设计模式
  12. python程序员专用壁纸_神级python程序员分享的让小白30分钟快速上手的一张神图,赶快收藏!...
  13. 平面设计中的插画设计技巧
  14. 东郊到家预约系统开发流程
  15. emu8086汇编语言——简易学生成绩管理系统
  16. “微信教父”张小龙2021最新演讲,视频号、直播、创作者透漏了几大重要趋势丨国仁网络
  17. 【传感器大赏】3轴模拟加速度传感器
  18. 英语不好怎么学python?这份python英语常用单词给我收好
  19. Maven Archetype脚手架制作
  20. 2023考研辅导机构:考研复试调剂十大问题答疑

热门文章

  1. c++入门之浅入浅出类——分享给很多想形象理解的人
  2. TASKCTL敏捷调度理念的诠释
  3. linux下oracle数据库服务和监听的启动停止
  4. 在mac上搭建octopress+github pages博客
  5. [Leetcode] Binary Tree PosterOrder Travel
  6. pycharm快捷使用
  7. 吴恩达机器学习(第四章)——多变量线性回归
  8. TCP/IP总结(4)TCP 之数据包格式
  9. 区块链BaaS云服务(10)用友iuap区块链平台
  10. 面向对象程序设计(Java)