Docker 容器文件(数据)共享

这篇具有很好参考价值的文章主要介绍了Docker 容器文件(数据)共享。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Docker 容器文件(数据)共享

Author:rab



前言

有这样一个场景,当我们的服务都是通过容器化方式时,不仅要考虑数据持久化的问题,在 web 集群的时候也要考虑到数据共享的问题,如我需要负载均衡多个 web 服务(这些 web 主要是作为前端展示),且这些 web 服务的功能完全一致,那这时就可用到我们的文件共享技术了。而文件共享又分为两种情况:容器与 Host 共享容器间数据共享,接下来分别介绍以下这两种文件(数据)共享方式。

一、共享

1.1 容器与 Host 共享

对于容器与 Host 共享间进行数据共享也是比较常用的,比如,当我们运行某个容器的时候,我们需要获取到该容器的配置文件(实现动态配置和持久化),我们一般的做法就是去该服务的官网去下载配置文件或 copy 容器中的配置文件到 Host(其实这就实现了文档的共享了)。

以 Nginx 为例,看看容器的文件如何共享到 Host 上。

1、先运行一个 nginx 容器

docker run -itd --name=my-web nginx:1.20.2

2、将容器数据复制到 Host

docker cp my-web:/etc/nginx/nginx.conf .

# 这样就将nginx容器的配置文件复制到Host的当前目录下

3、将 Host 的数据复制到容器内部

# 在Host上创建一个测试文件
touch web.conf

# 将创建的文件copy到容器内部
docker cp web.conf my-web:/etc/nginx/conf.d/

这样就实现了容器与 Host 间的数据共享了,准确说不叫共享,应该叫做容器和 Host 之间可以互相传输文件或实现 Docker 容器的持久化存储。

1.2 容器间共享

1.2.1 bind mount

这种共享方式是多个容器共享 Host 上的数据,即将共享数据放在 bind mount 中,然后将其 mount 到多个容器中,我们以 nginx 容器为例进行演示。

1、创建共享数据(目录或文件)

mkdir -p /data/web/conf.d
touch /data/web/conf.d/web.conf

# 我就以一个目录为共享数据

2、运行 nginx 容器(并将共享数据 mount 到容器中)

docker run -itd --name=web-1 -v /data/web/conf.d:/etc/nginx/conf.d nginx:1.20.2
docker run -itd --name=web-2 -v /data/web/conf.d:/etc/nginx/conf.d nginx:1.20.2

# 运行两个容器,且这两个容器共享同一个Host数据(目录或文件)

3、验证数据是否 mount 到容器中

[root@shop ~]# docker exec -it web-1 bash
root@5d3c487a409a:/# ls /etc/nginx/conf.d/
web.conf
root@5d3c487a409a:/# exit
exit
[root@shop ~]# docker exec -it web-2 bash
root@fdbb7e98d971:/# ls /etc/nginx/conf.d/
web.conf

Docker 容器文件(数据)共享

这样就实现了多个容器共享同个数据。

1.2.2 volume container

上面是多个容器共享 Host 里面的数据(目录或文件),而这个方式共享则是多个容器共享同个容器中的数据卷(该数据卷类型可以是 bind mount,也可以是 managed volume)。

1、创建共享容器的数据卷

mkdir -p /root/conf.d
touch /root/conf.d/web.conf

# 我就以一个目录为共享数据

2、运行共享容器

docker create --name=share_data -v /root/conf.d:/etc/nginx/conf.d busybox

# 注意:提供数据共享的这个容器是可以不需要运行的,因此只需创建即可

Docker 容器文件(数据)共享

3、其他容器共享刚创建的容器数据卷

docker run -itd --name=web-1 --volumes-from share_data nginx:1.20.2
docker run -itd --name=web-2 --volumes-from share_data nginx:1.20.2

4、验证数据是否被共享

[root@shop ~]# docker exec -it web-1 bash
root@5daf7ba565cd:/# ls /etc/nginx/conf.d/
web.conf
root@5daf7ba565cd:/# exit
exit
[root@shop ~]# docker exec -it web-2 bash
root@5510e1b6b4cb:/# ls /etc/nginx/conf.d/
web.conf

Docker 容器文件(数据)共享

这有什么好处?其实对于多个容器共享数据(或数据持久化时),在运行容器时不需要指定 Host 的共享目录,而只需指定提供共享数据的容器的容器名即可,这样的话更便于管理。

还有这样一种场景,如果我需要做容器应用数据迁移(如将容器 web-1 从主机 A 迁移至主机 B),对于以上的数据共享策略来说,还没真正实现数据随容器的迁移而迁移,于是我们可以将数据直接持久化到某个镜像中,这样在做数据迁移的时候就会随镜像的迁移而迁移,而这类方法只适用于数据存储较小或数据改动不是很大容器服务(如配置文件、静态文件等)。要实现这样的功能,就需要我们制作自定义镜像(如 Dockerfile),将数据 copy 到镜像中。

5、创建 Dockerfile

mkdir /root/dockerfile && cd /root/dockerfile
touch web.conf
vim Dockerfile

Docker 容器文件(数据)共享

6、构建镜像

docker build -t share:v1 .

7、创建共享容器

docker create --name=share_data-1 share:v1

8、运行 web 容器并进行数据共享

docker run -itd --name=web-1 --volumes-from share_data-1 nginx:1.20.2
docker run -itd --name=web-2 --volumes-from share_data-1 nginx:1.20.2

9、验证数据是否被共享

[root@shop dockerfile]# docker exec -it web-1 bash
root@34a7c0d48078:/# ls /etc/nginx/conf.d/
web.conf
root@34a7c0d48078:/# exit
exit
[root@shop dockerfile]# docker exec -it web-2 bash
root@d3a5bcf6b10b:/# ls /etc/nginx/conf.d/
web.conf

Docker 容器文件(数据)共享

运行的 web 容器能正确读取 共享容器 volume 中数据,我们可看到,创建的共享容器不依赖于 Host 提供的数据,真正实现了 docker 容器服务的迁移即应用,只需要迁移目标提供 docker 环境即可。

二、小结

Docker 容器共享可实现容器与 Host 间共享、容器与容器间共享,其中共享 Host 数据的情况用的比较多,容器间共享也有在使用,如一些数据变动较小的容器服务,就可以采用容器间数据共享。文章来源地址https://www.toymoban.com/news/detail-427984.html

到了这里,关于Docker 容器文件(数据)共享的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Docker 数据管理[文件互访] 端口映射[暴露端口提供服务] 容器互联[指定容器名防止IP变动]

    管理 Docker 容器中数据主要有两种方式:数据卷(Data Volumes)和数据卷容器(DataVolumes Containers)。 数据卷是一个供容器使用的特殊目录,位于容器中。可将宿主机的目录挂载到数据卷上,对数据卷的修改操作立刻可见,并且更新数据不会影响镜像,从而实现数据在宿主机与容

    2024年02月15日
    浏览(38)
  • 如何使用Docker本地部署Wiki.js容器并结合内网穿透实现知识库共享

    不管是在企业中还是在自己的个人知识整理上,我们都需要通过某种方式来有条理的组织相应的知识架构,那么一个好的知识整理工具是非常重要的,今天推荐一款维基知识库系统——Wiki.js。 本文将介绍如何用 Docker 容器技术部署 Wiki.js 应用程序,并且结合cpolar发布至公网实

    2024年01月19日
    浏览(47)
  • Docker Volume - 目录挂载以及文件共享

    Docker中的数据可以存储在类似于虚拟机磁盘的介质中,在Docker中称为数据卷(Data Volume)。数据卷可以用来存储Docker应用的数据,也可以用来在Docker容器间进行数据共享。数据卷呈现给Docker容器的形式就是一个目录,支持多个容器间共享,修改也不会影响镜像。使用Docker的数

    2024年02月20日
    浏览(35)
  • Docker 容器内部文件和容器外部文件互相copy

    有时需要将 Linux 服务器上的文件copy到容器的某个目录(比如:配置文件),有时将容器中的某个文件(比如:日志文件)copy到 Linux 服务器上,便于查看。 关于上述两种场景,总结如下: 1、容器外部文件 copy 到容器内部 例如,将 Linux 服务器 /opt/ 目录下的 a.txt 文件 copy 到

    2024年02月13日
    浏览(26)
  • docker与容器文件传输

    1、文件复制到容器 dcoker cp 本机文件名或者文件路径 容器ID:容器内的路径 如: 将本机的jenkins.war文件拷贝的容器id为“6f7ab9a56e21”中的“/usr/share/jenkins/”文件夹下 2、容器内文件拷贝到宿主机 dcoker cp ID全称:容器文件路径 本地路径 如: 将容器的jenkins.war文件拷贝的到宿主机

    2024年02月11日
    浏览(27)
  • docker 容器的文件拷贝

    一、已运行的容器拷贝方式 使用 docker cp 命令将文件从物理机复制到运行中的 Docker 容器中,或者从 Docker 容器中复制文件到物理机上。 例如,要将物理机上的文件 test.txt 复制到名为 mycontainer 的容器 /app 目录中,可以使用以下命令: 从主机拷贝文件到容器中: 其中, test.

    2024年02月15日
    浏览(22)
  • 清空 Docker 容器的日志文件

    删除容器中netcore控制台存储到docker日志记录  在shell命令下执行如下语句: 这个命令会执行以下操作: docker ps -aq:列出所有容器的ID(包括运行中和已停止的容器)。 docker inspect --format=\\\'{{.LogPath}}\\\':获取每个容器的日志路径。 xargs truncate -s 0:使用truncate -s 0命令清空每个日

    2024年02月10日
    浏览(27)
  • Docker 进入容器和交换文件

    1、docker images 2、 docker search 3、 docker pull 4、docker rmi 1、说明:         有镜像才可以创建容器, 我们这里使用 centos 的镜像来测试,就是虚拟一个 centos !   2、新建容器并启动 3、列出所有运行的容器 4、退出容器 5、启动停止容器 6、删除容器 1、 后台启动容器 2、 查看

    2024年02月10日
    浏览(78)
  • docker容器内修改配置文件

    1、进入容器内部 2、安装vim 1、替换配置文件 2、重启容器 时间报错参考

    2024年02月13日
    浏览(29)
  • 复制文件到Docker容器内

    docker cp 命令用于在Docker容器之间复制文件或目录。 举例说明: 假设一个运行的容器ID为9a28f199688e,想要将本地文件/path/to/local-file 复制到容器中的 /path/to/destination 目录中。 执行命令如下: 还可以使用 -a 选项来递归复制整个目录: 这将把本地目录 /path/to/local-directory 中的所

    2024年02月09日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包