Docker数据管理及网络通信

Docker数据管理及网络通信

在Docker中,为了方便查看容器中产生的数据或者将多个容器中的数据共享,就涉及到容器的数据管理操作。管理Docker容器中的数据主要有两种方式:数据卷(Date Volumes)和数据卷容器(Data Volumes Containers)。

数据卷

数据卷是一个供容器使用的特殊目录,位于容器中,可将宿主机的目录挂载到数据卷上,对数据卷的修改操作立刻可见,并且更新数据不会影响镜像,从而实现数据在宿主机和容器之间迁移。数据卷的使用类似于Linux下对目录进行的mount操作。

创建数据卷

在docker run命令中使用-v可以在容器内创建数据卷,也可以多次-v从而创建多个数据卷,使用--name选项可以给容器创建一个自定义名称。下面创建一个叫test的容器,并且创建两个数据卷分别挂载到/data1和/data2目录上。

[[email protected] ~]# docker run -itd -v /data1 -v /data2 --name test 2850c25d855b /bin/bash
ab19b153f1f9cb325685f340d30f4c11ecb918fd7e43df49554ba565d9ef681d
[[email protected] ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS
ab19b153f1f9        2850c25d855b        "/bin/bash"         7 seconds ago       Up 5 second

容器运行起来后,可以进入到容器中,可以看到两个数据卷已经分别挂载到/data1和/data2目录中。

[[email protected] ~]# docker exec -it ab19b153f1f9 /bin/bash
[email protected]:/# ls
bin   data1  dev  fastboot  lib     media  opt   root  sbin     srv  tmp  var
boot  data2  etc  home      lost+found  mnt    proc  run   selinux  sys  usr

挂载主机目录作为数据卷

在使用-v选项创建数据卷的同时,可以将宿主机的目录挂载到数据卷上使用,以实现宿主机与容器之间的数据迁移,注意宿主机本地目录的路径必须为绝对路径,如果路径不存在,Docker会自动创建相应的路径。

下面重新创建一个为test1的容器,并将宿主机的/abc/test挂载到容器的/data1目录中。注意这时我本地是没有abc这个目录的。

[[email protected] /]# ls
bin   dev  home  lib64  mnt  proc  run   srv  tmp  var
boot  etc  lib   media  opt  root  sbin  sys  usr

下面开始创建

[[email protected] /]# docker run -itd -v /abc/test:/data1 --name test1 2850c25d855b /bin/bash
eb86e9da0e38410bdd5c1e40b3724c6277652eb70769ae336eaaca223fa4a945
[[email protected] /]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
eb86e9da0e38        2850c25d855b        "/bin/bash"         6 seconds ago       Up 5 seconds                            test1
ab19b153f1f9        2850c25d855b        "/bin/bash"         11 minutes ago      Up 11 minutes                           test
[[email protected] /]# ls
abc  boot  etc   lib    media  opt   root  sbin  sys  usr
bin  dev   home  lib64  mnt    proc  run   srv   tmp  var
[[email protected] /]# ls /abc/
test

下面测试在/abc/test目录下面创建abc.txt文件,然后到容器内查看/data1目录中,是否也有test.txt文件。

[[email protected] /]# cd /abc/test/
[[email protected] test]# touch abc.txt
[[email protected] test]# docker exec -it eb86e9da0e38 /bin/bash
[email protected]:/# cd /data1/
[email protected]:/data1# ls
abc.txt

可以看到两边都会有abc.txt,同样我们在容器中创建def.txt文件,再到宿主机中查看是否有def.txt文件。

[email protected]:/data1# touch def.txt
[email protected]:/data1# exit
exit
[[email protected] test]# ls
abc.txt  def.txt

这样就实现了宿主机到容器和容器到宿主机的数据迁移,当我们将容器停止运行甚至删除的时候,我们创建的文件依旧不会消失。

[[email protected] test]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
eb86e9da0e38        2850c25d855b        "/bin/bash"         6 minutes ago       Up 6 minutes                            test1
ab19b153f1f9        2850c25d855b        "/bin/bash"         18 minutes ago      Up 18 minutes                           test
[[email protected] test]# docker stop eb86e9da0e38
eb86e9da0e38
[[email protected] test]# docker rm eb86e9da0e38
eb86e9da0e38
[[email protected] test]# ls
abc.txt  def.txt

数据卷容器

当需要在容器之间共享一些数据,最简单的方法使用数据卷容器。数据卷容器就是一个普通的容器,专门提供数据卷给其他容器挂载使用。首先需要创建一个容器作为数据卷容器,之后在其他容器创建时用--volumes-from挂载数据卷容器中的数据卷使用。

[[email protected] test]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
ab19b153f1f9        2850c25d855b        "/bin/bash"         27 minutes ago      Up 27 minutes                           test
#我们在之前的操作中在这个容器中已经挂载了/data1和/data2数据卷

下面我们再来创建一个web容器,使用--volumes-from将test容器的数据卷挂载到web容器中。

[[email protected] test]# docker run -itd --volumes-from test --name web 2850c25d855b /bin/bash
0da89589b4dae025a51bbe290f79ef6e9d7672bba2d8512d92cd69beeb762d24
[[email protected] test]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
0da89589b4da        2850c25d855b        "/bin/bash"         4 seconds ago       Up 3 seconds                            web
ab19b153f1f9        2850c25d855b        "/bin/bash"         30 minutes ago      Up 30 minutes                           test

我们我们分别进入到web和test容器中,查看两边的数据卷容器。

[[email protected] test]# docker exec -it 0da89589b4da /bin/bash
[email protected]:/# ls
bin   data1  dev  fastboot  lib         media  opt   root  sbin     srv  tmp  var
boot  data2  etc  home      lost+found  mnt    proc  run   selinux  sys  usr
[[email protected] test]# docker exec -it ab19b153f1f9 /bin/bash
[email protected]:/# ls
bin   data1  dev  fastboot  lib         media  opt   root  sbin     srv  tmp  var
boot  data2  etc  home      lost+found  mnt    proc  run   selinux  sys  usr

我们在web容器的/data1中创建abc.txt,然后到test容器/data1中查看是否生成这个文件。

[email protected]:/# cd /data1
[email protected]:/data1# touch abc.txt
[email protected]:/data1# ls
abc.txt

[email protected]:/# cd /data1
[email protected]:/data1# ls
abc.txt

可以看到两边都有abc.txt文件,通过这种方式实现了容器间的数据共享,这样的话用户就不必担心数据发生丢失。

Docker网络通信

Docker提供了映射容器端口到宿主机和容器互联机制来为容器提供网络服务。

端口映射

在启动容器的时候,如果不指定端口,在容器外将无法通过网络来访问容器内的服务。Docker提供端口映射及时来将容器内的服务提供给外网访问,实质上就是将宿主机的端口映射到容器中,使得外部网络访问宿主机的端口便可以访问容器内的服务。

为实现端口映射,需要在运行docker run命令时使用-P(大写)选项实现随机映射,Docker会随机映射一个端口范围在49000~49900的端口到容器内部开放的网络端口。这个根据容器需要才会打开宿主机端口。

[[email protected] test]# docker run -d -P 5182e96772bf35b134b4dbcd743bd229605197fcbf067063b8889808bb74d1b09d1e19863b2a

还可以运行-p(小写)指定映射端口。

[[email protected] test]# docker run -itd -p 80:80 2850c25d855b /bin/bash
[[email protected] test]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS                NAMES
dcb873983873        2850c25d855b        "/bin/bash"         3 seconds ago        Up 1 second         0.0.0.0:80->80/tcp   nervous_ptolemy

容器互联

容器互联是通过容器名称在容器之间建立一条专门的网络通行隧道从而实现的互联。简单来说就是在源容器和接受容器之间建立一条隧道,接受容器可以看到源容器指定的信息。在运行docker run命令时使用--link从而实现容器互联,格式为--link name:alias,其中name为要连接的容器名称,alias是这个连接的别名。首先创建源容器:

[[email protected] test]# docker run -itd -P --name web1 5182e96772bf /bin/bash
b6d1f618f71083085f0646edee76fa7aa771bc8526c69424206c1c3f492c074c
[[email protected] test]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
b6d1f618f710        5182e96772bf        "/bin/bash"         2 seconds ago       Up 1 second                             web1

创建接受容器

[[email protected] test]# docker run -itd -P --name web2 --link web1:web1 5182e96772bf /bin/bash
d5b7ff409fa0f40931582fad8eb754771e811318132d5069dcf2231ff093f40c
[[email protected] test]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
d5b7ff409fa0        5182e96772bf        "/bin/bash"         3 seconds ago       Up 2 seconds                            web2
b6d1f618f710        5182e96772bf        "/bin/bash"         29 seconds ago      Up 28 seconds                           web1

测试容器互联

[[email protected] test]# docker exec -it web2 /bin/bash
[[email protected] /]# ping web1
PING web1 (172.17.0.2) 56(84) bytes of data.
64 bytes from web1 (172.17.0.2): icmp_seq=1 ttl=64 time=0.107 ms
64 bytes from web1 (172.17.0.2): icmp_seq=2 ttl=64 time=0.085 ms
^C
--- web1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.085/0.096/0.107/0.011 ms

可以看到web2和web1建立了互联,相当于创建了一条安全隧道,而且不用映射端口,避免了暴露端口给外部网络。

原文地址:http://blog.51cto.com/10693404/2159567

时间: 2024-10-27 08:26:36

Docker数据管理及网络通信的相关文章

Docker数据管理、网络通信以及资源控制

Docker的安装及镜像.容器的基本操作详见博客http://blog.51cto.com/11134648/2160257下面介绍Docker数据管理.网络通信以及资源控制的方法,详细如下: Doker数据管理 容器的数据管理操作可以方便查看容器内产生的数据或者将多个容器中的数据实现共享.管理Docker容器中数据主要有两种方式:数据卷(Data Volumes)和数据卷容器(Data Volumes Containers). 一.数据卷 数据卷是一个供容器使用的特殊目录,位于容器中,可将宿主

Docker 数据管理和网络通信

Docker 数据管理 在Docker中,为了方便查看容器内产生的数据或者将多个容器中的数据实现共享,就涉及到容器的数据管理操作.管理Docker容器中数据只要有两种方式:数据卷(Data Volumes)和数据卷容器(Data Volumes Containers) 数据卷 数据卷是一个供容器使用的特殊目录,位于容器中,可将宿主机的目录挂载到数据卷上,对数据卷的修改操作立刻可见,并且更新数据不会影响镜像,从而实现数据在宿主机与容器之间的迁移. 1.创建数据卷 在docker run命令中使用-

Docker数据管理与网络通信

Docker镜像的创建方法 Docker镜像除了是Docker的核心技术之外也是应用发布的标准格式.一个完整的Docker镜像可以支撑一个Docker容器的运行,在Docker的整个使用过程中,进入一个已经定型的容器之后,就可以在容器中进行操作,最常见的就是在容器中安装应用服务,如果要把已经 安装的服务进行迁移,就需要把环境以及搭建的服务生成新的镜像. 创建镜像的方法有三种: 基于已有镜像创建 基于本地模板创建 基于Docherfile创建 基于已有镜像创建 使用docker commit命令,

Docker数据管理与网络通信之镜像的创建方法

Docker镜像的创建方法 Docker镜像除了是Docker的核心技术之外,也是应用发布的标准格式. 一个完整的Docker镜像可以支撑一个Docker容器的运行,在Doker的整个使用过程中,进入一个已经定型的容器之后,就可以在容器中进行操作,最常见的操作就是在容器中安装应用服务,如果要把已经安装的服务进行迁移,就需要把环境以及搭建的服务生成新的镜像. 创建镜像的方法有三种,分别为基于已有镜像创建.基于本地模板创建以及基于Dockerfile创建. 基于已有镜像创建 基于已有镜像创建主要使用

Docker数据管理(四)

Docker数据管理 Docker数据分为两种: 数据卷 -v /data -v src:dst 数据卷容器 --volumes-from 数据卷 案例1:我们创建一个容器,起名叫nginx-volume-demo1挂载到容器中的/data目录下 [[email protected] ~]# docker run -d --name nginx-volume-demo1 -v /data nginx 96892a7bb67e9c687f29d07ea674ca527ab09dee6b0ec121

Docker 数据管理

Docker 数据管理 数据卷 数据卷是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特性: 1.  数据卷可以在容器之间共享和重用 2.  对数据卷的修改会立马生效 3.  对数据卷的更新,不会影响镜像 4.  卷会一直存在,直到没有容器使用 挂载本地目录到容器 创建一个数据卷 在用 docker run 命令的时候,使用 -v 标记来创建一个数据卷并挂载到容器里.在一次 run 中多次使用可以挂载多个数据卷. #sudo docker run -it -v ~/da

(九)Docker数据管理

Docker数据管理,即Docker内部以及容器之间管理数据,主要有两种方式:数据卷和挂载. 1. 数据卷(Volume) volume,可供一个或多个容器使用的特殊目录. 数据卷可在容器之间共享和重用: 对数据卷的修改会立马生效: 对数据卷的更新,不会影响镜像: 数据卷默认会一直存在,即使容器被删除:(可通过 docker volume prune命令删除无效的volume) 数据卷的使用,类似于 2. 挂载主机目录(Bind mounts) 原文地址:https://www.cnblogs.

Docker的数据管理及网络通信问题

博文大纲: 一.docker的数据管理1.数据卷2.数据卷容器 二.docker网络通信1.端口映射2.容器互联 一.docker的数据管理 在docker中,为了方便查看容器内产生的数据或者将多个容器之间的数据实现共享,会涉及到容器的数据管理操作,管理docker容器中的数据主要有两种方式:数据卷和数据卷容器. 1.数据卷 数据卷是一个供容器使用的特殊目录,位于容器中,可将宿主机的目录挂载到数据卷上,对数据卷的修改操作立即可见,并且更新数据不会影响镜像,从而实现数据在宿主机与容器之间的迁移,数

3 docker数据管理

数据管理 关于容器中的数据 1.容器关闭,然后再启动容器,数据是存在的. 2.创建容器,然后把容器删除,数据随着容器的删除也被删除 3.如何删除容器不删除数据,在创建容器的时候可以采用以下做法 1 在创建容器时,挂载宿主机目录到容器 # docker run -itd -v /data/:/database centos 0ccaba523bc559b311b2b093b3b8617a9ddb2b4ac55124dd458dd991a240ae55 # docker exec -it 0cc /