Docker容器共享磁盘
需求:.NET程序需要监控一个FTP上的文件变化并进行操作,在linux上使用原生目录时,不管怎么切换后台运行,总是会在一段时间运行后死掉。
方案:远程也不好debug,想了一下,干脆直接使用docker-compose运行,设置死了自动重启(restart=always)就完事了。
由于FTP与.NET程序是两个单独的程序,因此需要进行磁盘共享才可以正常使用,研究了一下怎么使用Docker进行磁盘共享的方法。
使用卷
可以使用命名卷或者匿名卷操作。
匿名卷
匿名数据卷(anonymous volume)是没有显式指定名称的数据卷。当定义了一个匿名卷时,Docker会为该卷分配一个随机的名称,并将其挂载到容器的文件系统中。这样做的好处是使得数据卷的管理更加简单,并且可以避免命名冲突。
使用匿名卷实现Docker容器间共享磁盘的Docker Compose配置:
version: '3.7'
services:
containerA:
image: myimageA
volumes:
- shared-data:/path/to/shared/directory
containerB:
image: myimageB
volumes:
- shared-data:/path/to/shared/directory
volumes:
shared-data:
上面定义了一个名为“shared-data”的匿名卷,并将其挂载到两个容器的相同目录中。这将使容器A和B都能够访问该目录并共享数据。
使用匿名卷有以下优点:
- 管理更加简单。因为不需要为每个数据卷分配一个唯一的名称,所以您可以更轻松地管理应用程序中的所有数据卷。
- 避免命名冲突。由于每个匿名卷都有一个随机的名称,所以可以避免命名冲突,从而提高整个应用程序的安全性和可靠性。
但是,使用匿名卷也有一些缺点:
- 不易识别。由于匿名卷没有名称,因此很难识别哪个卷属于哪个容器。
- 不易备份和恢复。由于匿名卷没有名称,因此在备份和恢复过程中可能会导致一些问题。
命名卷
命名卷(named volume)是需要显式指定名称的数据卷。通过添加name属性来指定这个卷的名称的好处是可以更清晰地识别哪个卷属于哪个容器,并且可以更方便地备份和恢复数据。
使用命名卷实现Docker容器间共享磁盘的Docker Compose配置:
version: '3.7'
services:
containerA:
image: myimageA
volumes:
- shared-data:/path/to/shared/directory
containerB:
image: myimageB
volumes:
- shared-data:/path/to/shared/directory
volumes:
shared-data:
name: my-named-volume
上面定义了一个名为“shared-data”的命名卷,并将其挂载到两个容器的相同目录中。与匿名卷不同的是,我们通过添加name属性来指定这个卷的名称为“my-named-volume”。这将使容器A和B都能够访问该目录并共享数据。
使用命名卷有以下优点:
- 易于识别。由于每个命名卷都有一个唯一的名称,因此可以更轻松地识别哪个卷属于哪个容器。
- 易于备份和恢复。由于命名卷有唯一的名称,可以更方便地备份和恢复数据。
但是,使用命名卷也有一些缺点:
- 需要手动指定名称。与匿名卷不同的是,需要为每个命名卷手动指定名称,这可能会导致一些问题。
- 命名冲突。如果多个容器试图使用相同的命名卷名称,则会发生命名冲突,这可能会影响应用程序的安全性和可靠性。
直接挂载宿主机目录
另一种实现Docker容器间共享磁盘的方法是直接将宿主机上的目录挂载到容器中的目录。这种方法非常简单,可以直接在Docker Compose文件中使用绝对路径来挂载一个目录。
下面是直接挂载宿主机目录实现Docker容器间共享磁盘的示例Docker Compose配置:
version: '3.7'
services:
containerA:
image: myimageA
volumes:
- /path/to/shared/directory:/path/to/shared/directory
containerB:
image: myimageB
volumes:
- /path/to/shared/directory:/path/to/shared/directory
以上直接将宿主机上的/path/to/shared/directory目录挂载到两个容器的相同目录中。这将使容器A和B都能够访问该目录并共享数据。
使用直接挂载宿主机目录有以下优点:
- 易于管理。可以轻松地访问、备份和恢复数据,因为它们存储在宿主机上。
- 易于识别。可以轻松地找到哪个目录属于哪个容器,从而更好地组织和管理数据。
但是,使用直接挂载宿主机目录也有一些缺点:
- 安全风险。如果宿主机被攻击或出现故障,数据可能会受到威胁。
- 不可移植。如果想要将应用程序移动到另一台机器上,必须确保拥有相同的目录结构和路径。
总结
最后我还是选择了命名卷的方法部署程序,主要考虑到以后保留迁移的可能性,但是又保留一定的程序独立启动与配置的功能。
本文编写借助了new bing,人工有所修改和校对,代码思路没有问题。
Docker容器共享磁盘的更多相关文章
- docker容器共享宿主机环境,从而为镜像体积减负
一.背景介绍 响应公司技术发展路线,开发的服务均需要将打成docker镜像,使用docker进行统一管理.可是随着服务越来越多,镜像也越来越多.每次制作镜像的时候都需要将依赖打进容器,这样一个jre的 ...
- docker容器安全
title: docker容器安全 tags: Docker,容器,安全策略 grammar_cjkRuby: true --- Docker容器的安全性 1.安全策略-Cgroup 1.限制Cpu ...
- Docker容器(一)——Docker的介绍与部署
(1).Docker概述 Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows机器上,也可以实现虚拟化.容器是 ...
- Kubernetes & Docker 容器网络终极之战(十四)
目录 一.单主机 Docker 网络通信 1.1.host 模式 1.2 Bridge 模式 1.3 Container 模式 1.4.None 模式 二.跨主机 Docker 网络通信分类 2.1 ...
- 从Docker容器内部,如何连接到本机的本地主机?
原文 从Docker容器内部,如何连接到本机的本地主机? 编辑:如果您使用的是Docker-for-mac或Docker-for-Windows 18.03+,只需使用主机连接到您的mysql服务即可 ...
- Docker for window 无法共享磁盘
Docker for window 无法共享主机磁盘,环境如下: 操作系统: windown10 Docker version 18.09.0, build 4d60db4 症状如下: 如图,点击ap ...
- docker容器磁盘
docker容器磁盘扩容 一.配置文件里更改容器创建时的默认磁盘大小 [root@ip---- ~]# cat /etc/sysconfig/docker-storage DOCKER_STORAGE ...
- docker容器存放目录磁盘空间满了,转移数据修改Docker默认存储位置
原文:docker容器存放目录磁盘空间满了,转移数据修改Docker默认存储位置 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/qq_3767485 ...
- 5、docker容器数据卷: -v添加共享传递容器数据卷
1.是什么 1.docker理念 先来看看Docker的理念:* 将运用与运行的环境打包形成容器运行 ,运行可以伴随着容器,但是我们对数据的要求希望是持久化的* 容器之间希望有可能共享数据 2.保 ...
- docker容器互联,实现目录、服务共享
一.需求 docker使服务之间实现容器隔离,比如Javaweb项目前端.后端.数据库.数据库后台,分别把它们部署在不同的容器里面,实现隔离.但服务和服务之间也有互访的需求,这就涉及到容器网络和容器互 ...
随机推荐
- uart loglevel和pr_debug的区别
pr_debug 是 Linux 内核中用于打印调试信息的宏,它的行为会根据编译时的配置有所不同.如果定义了 CONFIG_DYNAMIC_DEBUG 配置选项,pr_debug 会扩展为 dynam ...
- qemu的使用
一.QEMU的运行模式 直接摘抄自己<揭秘家用路由器0day漏洞挖掘技术>,网上查了一下也没有找到令人满意的QEMU的使用说明,就采用这本书上的介绍.如果后期能够找到比较满意的QEMU的使 ...
- 技术分享 | 徐轶韬:从MySQL5.7升级到MySQL 8.0
在6月20日举办的[墨天轮数据库沙龙-MySQL 5.7 停服影响与应对方案]中,甲骨文MySQL解决方案首席工程师徐轶韬分享了<从MySQL5.7升级到MySQL 8.0>主题演讲,本文 ...
- KubeSphere 社区双周报 | FluentBit 新增 tcp 输入插件 | 2023.09.29-10.12
KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书.新增的讲师证书以及两周内提交过 commit 的贡献者,并对近期重要的 PR 进行解析,同时还包含了线上/线下活动和布道推广等一系列 ...
- 在 K8s 中快速部署使用 GitLab 并构建 DevOps 项目
作者:张海立,KubeSphere 社区 Ambassador.Talented Speaker,社区用户委员会上海站副站长 原文链接:https://kubesphere.com.cn/blogs/ ...
- Visual Studio NUGET 清理方法
NUGET全局包存储位置配置 NuGet缓存实在是太大了,把我唯一的120G固态硬盘(系统盘)基本占用完了--只能是清理一下了,同时修改缓存路径到其他盘以便一劳永逸. 1. 在C:\Program F ...
- 从0到1实现项目Docker编排部署
在深入讨论 Docker 编排之前,首先让我们了解一下 Docker 技术本身.Docker 是一个开源平台,旨在帮助开发者自动化应用程序的部署.扩展和管理.自 2013 年推出以来,Docker 迅 ...
- Games101 作业8 质点弹簧系统
目录 1 前言 2 基础数据结构 3 欧拉 4 Verlet Integration 4.1 Constraints 1 前言 质点弹簧系统的模拟仿真,其实非常简单,核心就是牛顿第二定律 \(F = ...
- linq+lambda+delegate,从list中查找到满足匹配条件的所有数据索引值
linq的扩展方法中有FindIndex,FindLastIndex两个方法可以查找满足条件的首个和最后一个数据的索引值,利用delegate将匹配条件的方法传入FindAllIndex,查找满足匹配 ...
- mysql隐蔽的索引规则导致数据全表扫描
索引是为了加速数据的检索,但是不合理的表结构或适应不当则会起到反作用.我们在项目中就遇到过类似的问题,两个十万级别的数据表,在做连接查询的时候,查询时间达到了7000多秒还没有查出结果. 首先说明,关 ...