前面两篇文章讲述的是构建docker镜像的三种方式以及如何搭建docker私有仓库,而本文将讲述有关docker中的数据管理及端口映射的内容。
docker数据管理 什么是docker的数据管理? 先想一想关于Linux系统管理中的磁盘管理,其实本质上也都是对存储的数据进行管理,docker中的数据管理也是如此。docker中,对数据的管理主要在于两个方面,其一是为了方便查看容器内的数据,其二是实现多个容器的数据共享。
那么管理docker的数据的方式有两个:数据卷和数据卷容器。下面会逐个介绍。
docker的数据管理方式 数据卷 数据卷是一个供容器使用的特殊目录,位于容器中,可将宿主机的目录挂载到数据卷上,对数据卷的修改操作立刻可见(其实上篇文章中已经接触到了),并且更新数据不会影响镜像,从而实现数据在宿主机与容器之间的迁移。
其实,在docker中,数据卷的使用可以类比于Linux下对目录进行的mount操作。
数据卷容器 显然,数据卷容器和数据卷不是同一个概念,但是作用是一样的。只不过数据卷容器的目的是在容器间共享一些数据。数据卷容器就可以认为是一个普通的容器,只不过是专门用来提供数据卷给其他容器挂载使用的。
数据卷和数据卷容器的概念和区别可以通过下图来理解:
数据卷就是宿主机中提供的一块空间(目录空间)挂载给容器,使得容器与宿主机之间可以共享文件数据,而数据卷容器是将一个容器内的一个空间(目录)挂载给另一个容器,使得容器与容器之间共享文件数据。
下面来实际来操作一下是如何通过中两种方式对docker进行数据管理的。
如何进行对docker的数据管理?1、创建数据卷(为后面的数据卷容器做准备)
#目前是空镜像和空容器环境 [root@localhost ~]# docker run -d -v /data/data1 -v /data/data2 --name web httpd Unable to find image 'httpd:latest' locally latest: Pulling from library/httpd 123275d6e508: Pull complete e984dd982a6e: Pull complete 963280e5cf81: Pull complete 6faf90d050b2: Pull complete 962b56984bb0: Pull complete Digest: sha256:d5dc0d279039da76a8b490d89a5c96da83a33842493d4336b42ccdfbd36d7409 Status: Downloaded newer image for httpd:latest 8e21b3e1366970633f01ae4d77b0f55a2d52782997138cc1e8ab70904d5f487b [root@localhost ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8e21b3e13669 httpd "httpd-foreground" About a minute ago Up About a minute 80/tcp web [root@localhost ~]# docker exec -it 8e21b3e13669 /bin/bash root@8e21b3e13669:/usr/local/apache2# ls /data/ data1 data22、挂载主机目录作为数据卷:数据卷实际案例
[root@localhost ~]# docker run -d -v /var/www:/data/data1 --name web1 httpd:latest 5ff89e3dbdd25bbb1b105678c50364758fe62cb5c7d10aa5f47e8865ddd5e8d8 #参数解释: -d:守护进程 -v:数据卷操作 /var/www:宿主机目录将被挂载的目录 /data/data1:容器中数据卷 --name:容器名称3、测试
[root@localhost ~]# cd /var/www/ [root@localhost www]# touch file [root@localhost www]# ls file [root@localhost www]# docker exec -it web1 /bin/bash #在新的容器中查看目录内容 root@5ff89e3dbdd2:/usr/local/apache2# ls /data/data1/ file root@5ff89e3dbdd2:/usr/local/apache2#4、数据卷容器实际案例
#前面已经进行创建了一个名为web的容器,其中所创建的数据卷分别挂载到了/data/data1与/data/data2目录上,使用--volumes-from选项来挂载web容器中的数据卷到新的容器 [root@localhost ~]# docker run -it --volumes-from web --name web_test httpd:latest /bin/bash root@afafb9631fc9:/usr/local/apache2# ls / bin boot data dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var root@afafb9631fc9:/usr/local/apache2# ls /data/ data1 data2 #两个目录(数据卷容器)提供给新的容器web_test使用我们可以进行测试,在其中一个目录中创建文件,如何进入原本的数据卷容器中查看是否有该文件
root@afafb9631fc9:/usr/local/apache2# cd /data/data1 root@afafb9631fc9:/data/data1# touch newfile root@afafb9631fc9:/data/data1# exit exit [root@localhost ~]# docker exec -it web /bin/bash root@8e21b3e13669:/usr/local/apache2# ls /data/data1 newfile 测试成功了,这样可以通过数据卷容器实现容器之间的数据共享了。通过这些机制,即使容器在运行过程中出现故障,用户也不必担心数据发生丢失了,如果发生意外,只需要快速重新创建容器即可。
下面简述一下有关docker的端口映射
docker网络通信之端口映射