计算机系统应用教程网站

网站首页 > 技术文章 正文

Docker数据卷和网络设置 作为docker数据分区使用

btikc 2024-10-14 08:46:56 技术文章 3 ℃ 0 评论

本次将主要介绍Docker的两个重要技术点:网络设置和数据卷。

1. 数据卷

数据卷提供了一种宿主机和容器共享数据的方式,有些时候需要用它来做持久化和数据共享。当做持久化时,通常数据卷会比较大,可以将其放在单独的磁盘、卷上,这个时候容器只是一个执行环境。当做数据共享时,可以用于开发和测试分布式系统。数据卷主要通过参数-v来指定。

1.1创建一个数据卷

[root@izuf6bh06kx49y4h12z95sz ~]#docker run -it --name evcgtest -v /evcgdata lnt-evcg:1.0 /bin/bash

该命令创建了一个容器evcgtest,同时为容器创建了一个/evcgdata数据卷,/evcgdata是容器内部的目录,对应的宿主上目录在/var/lib/docker/volumes下面,可以通过docker inspect命令查看。

[root@izuf6bh06kx49y4h12z95sz ~]#docker inspect 2e277999f107

[

{

......

"Mounts": [

{

"Type": "volume",

"Name": "f18a8393c21f88e18841f69340a836c8b4a330998aaa4387baa0e016c0f32198",

"Source": "/var/lib/docker/volumes/f18a8393c21f88e18841f69340a836c8b4a330998aaa4387baa0e016c0f32198/_data",

"Destination": "/evcgdata",

"Driver": "local",

"Mode": "",

"RW": true,

"Propagation": ""

}

],

......

}

]

可以看出"Destination": "/evcgdata"是容器的持久化目录,"Source": "/var/lib/docker/volumes/f18a8393c21f88e18841f69340a836c8b4a330998aaa4387baa0e016c0f32198/_data"是对应宿主机的目录。

1.2映射一个外部卷

如果以-v src:des的方式指定,那么容器会直接将宿主机的指定目录挂载到容器内部。

[root@izuf6bh06kx49y4h12z95sz ~]#docker run -it --name evcgtest -v /mnt/evcg/data:/evcgdata lnt-evcg:1.0 /bin/bash

上面命令直接将宿主机/mnt/evcg/data目录映射到了容器/evcgdata目录。实际使用中,我们可以将信息系统产生的日志、上传的图片等资源通过数据卷存放到宿主机指定目录,进行持久化保存。

1.3容器数据卷

由于容器本身包含文件系统,那么当然也可以把容器的卷分享给另一个容器,通过--volumes-form来映射。创建一个容器数据卷,注意使用create创建即可。具体步骤如下:

[root@izuf6bh06kx49y4h12z95sz ~]#docker create -v /sharedata --name sharedata centos

通过—volumes-form使用容器数据卷。

[root@izuf6bh06kx49y4h12z95sz ~]# docker run -it --name dbtest --volumes-from sharedata centos /bin/bash

[root@a1e26bd877d7 /]# ls

bin dev etc home lib lib64 media mnt opt proc root run sbin sharedata srv sys tmp usr var

可以看到新创建的dbtest容器中有容器卷的sharedata目录。

2. 网络设置

Dokcer 通过使用 Linux 桥接提供容器之间的通信,Docker的网络模式有四种,默认使用bridge模式,通过主机和容器的端口映射通信。

none

使用--net=none 指定,容器不能访问外部网络,内部存在回路地址。

bridge

使用--net=bridge 指定,bridge是docker的默认网络设置,桥接是在主机上的,通常为docker0,每启动一个容器时,会为该容器创建一个veth,veth一端连接到docker0,另一端连接到容器eth0.

host

使用--net=host 指定,host就是使用宿主机的网络,和宿主机公用一个Network Namespace,容器不会虚拟出自己的网卡和IP等,而是使用宿主机的IP和端口。但容器的文件系统、进程列表等还是与宿主机隔离的。

container

使用--net=container:containerid 指定,该模式指定新创建的容器和已经存在的另一个容器共享一个Network Namespace,而不是和宿主机共享。同样两个容器除了网络方面,其它仍然是隔离的。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表