Docker数据卷和网络设置

本文深入讲解了Docker的两项核心技术:网络配置与数据卷管理。详细介绍如何利用数据卷实现数据持久化及容器间的数据共享,并解析了Docker的四种网络模式及其应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本次将主要介绍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,而不是和宿主机共享。同样两个容器除了网络方面,其它仍然是隔离的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值