docker管理应用程序数据、容器网络

管理应用程序数据

Docker提供三种方式将数据从宿主机挂载到容器中:

  • ? volumes:Docker管理宿主机文件系统的一部分(/var/lib/docker/volumes)。保存数据的最佳方式。
  • ? bind mounts:将宿主机上的任意位置的文件或者目录挂载到容器中。
  • ? tmpfs:挂载存储在主机系统的内存中,而不会写入主机的文件系统。如果不希望将数据持久存储在任何位置,可以使用
  • tmpfs,同时避免写入容器可写层提高性能。

管理卷:路径都是在/var/lib/docker/volumes/下的,路径不可改变

[[email protected] ~]# docker volume create nginx-vol
nginx-vol
[[email protected] ~]# docker volume ls
DRIVER              VOLUME NAME
local               nginx-vol
[[email protected] ~]# docker volume inspect nginx-vol
[
    {
        "CreatedAt": "2018-11-26T15:25:23+08:00",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/nginx-vol/_data",
        "Name": "nginx-vol",
        "Options": {},
        "Scope": "local"
    }
]

volumes

用卷创建一个容器:
[[email protected] ~]# docker run -d --name=nginx-test1 --mount src=nginx-vol,dst=/usr/share/nginx/html -p 88:80 nginx:1.15
9d1d1fe4e0f189b8d66e7e6682ef725b441a355b7cb9e85ee62406249fcffd6d

[[email protected] ~]# cd /var/lib/docker/volumes/nginx-vol/_data --这里的数据卷是和容器中的是一样的内容
[[email protected] _data]# ls
50x.html index.html
[[email protected] _data]# echo ‘nginx1‘ > index.html

验证:
[[email protected] _data]# curl 192.168.1.13:88
nginx1

注意:

  1. 如果没有指定卷,自动创建。
  2. 建议使用--mount,更通用

Bind Mounts

用卷创建一个容器:指定type=bind --》这个是将宿主机上app/wwwroot 挂载到/usr/share/nginx/html 上
[[email protected] _data]# docker run -d -it --name=nginx-test --mount type=bind,src=/app/wwwroot,dst=/usr/share/nginx/html -p 88:80 nginx

验证:
[[email protected] wwwroot]# curl 192.168.1.13:88
nginx1
进入到了该容器:
[email protected]:/# cd /usr/share/nginx/html/
[email protected]:/usr/share/nginx/html# ls
index.html

注意:

  1. 如果源文件/目录没有存在,不会自动创建,会抛出一个错误。
  2. 如果挂载目标在容器中非空目录,则该目录现有内容将被隐藏。

小结

Volume特点:

  • ? 多个运行容器之间共享数据。
  • ? 当容器停止或被移除时,该卷依然存在。
  • ? 多个容器可以同时挂载相同的卷。
  • ? 当明确删除卷时,卷才会被删除。
  • ? 将容器的数据存储在远程主机或其他存储上
  • ? 将数据从一台Docker主机迁移到另一台时,先停止容器,然后备份卷的目录(/var/lib/docker/volumes/)

Bind Mounts特点:

  • ? 从主机共享配置文件到容器。默认情况下,挂载主机/etc/resolv.conf到每个容器,提供DNS解析。
  • ? 在Docker主机上的开发环境和容器之间共享源代码。例如,可以将Maven target目录挂载到容器中,每次在Docker主机
  • 上构建Maven项目时,容器都可以访问构建的项目包。
  • ? 当Docker主机的文件或目录结构保证与容器所需的绑定挂载一致时

容器网络

网络模式

bridge
–net=bridge
默认网络,Docker启动后创建一个docker0网桥,默认创建的容器也是添加到这个网桥中。
? host
–net=host
容器不会获得一个独立的network namespace,而是与宿主机共用一个。这就意味着容器不会有自己的网卡信息,而是使用宿主
机的。容器除了网络,其他都是隔离的。
? none
–net=none
获取独立的network namespace,但不为容器进行任何网络配置,需要我们手动配置。

? container   2个容器的网络可以通讯
–net=container:Name/ID
与指定的容器使用同一个network namespace,具有同样的网络配置信息,两个容器除了网络,其他都还是隔离的。
? 自定义网络
与默认的bridge原理一样,但自定义网络具备内部DNS发现,可以通过容器名或者主机名容器之间网络通信。

容器网络访问原理

验证:
注意系统必须指定 -it 不然启动失败
[[email protected] wwwroot]# docker run -itd --net=bridge --name=icar1 -h icar1 centos
90b9a40f6290e6136e438bab5dcbd2720ed1b2c0a7b9c6abaede64574d4831e8

[[email protected] wwwroot]# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
90b9a40f6290 centos "/bin/bash" 4 seconds ago Up 3 seconds icar1
[[email protected] wwwroot]# docker exec -it 90b9a40f6290 bash

原文地址:http://blog.51cto.com/jacksoner/2322155

时间: 2024-10-10 06:53:25

docker管理应用程序数据、容器网络的相关文章

Docker进阶之六:管理应用程序数据

管理应用程序数据:Volume Docker提供三种不同的方式将数据从宿主机挂载到容器中:volumes,bind mounts和tmpfs. volumes:Docker管理宿主机文件系统的一部分(/var/lib/docker/volumes). bind mounts:可以存储在宿主机系统的任意位置. tmpfs:挂载存储在宿主机系统的内存中,而不会写入宿主机的文件系统. 管理卷: # docker volume create nginx-vol 宿主机存储地址:/var/lib/dock

[docker] 管理docker容器中的数据

之前我们介绍了Docker的基本概念(前面的没翻译...),了解了如何使用Docker镜像进行工作,并且学习了网 络和容器之间的链接.这一节我们将讨论如何管理容器中及容器之间的数据. 我们将查看下面两种管理Docker中数据的主要方法. 数据卷 数据卷容器 数据卷 一个数据卷就是经过特殊设计的,在一个或多个容器中通过UFS文件系统提供的一些特性 实现数据持久化或共享. 数据卷可以在容器之间共享和重复利用 可以对数据卷里的内容直接进行修改 对镜像的更新不会改变数据卷的内容 卷会一直持续到没有容器使

docker技术剖析--镜像、容器管理

防伪码:博观而约取,厚积而薄发                                 docker技术剖析--镜像.容器管理 一.Docker简介 Docker是什么? Docker的英文本意是"搬运工",在程序员的世界里,Docker搬运的是集装箱(Container),集装箱里装的是任意类型的App,开发者通过Docker可以将App变成一种标准化的.可移植的.自管理的组件,可以在任何主流系统中开发.调试和运行. 说白了,docker是一种用了新颖方式实现的轻量级虚拟机,

Kubernetes & Docker 容器网络终极之战(十四)

目录 一.单主机 Docker 网络通信 1.1.host 模式 1.2 Bridge 模式 1.3 Container 模式 1.4.None 模式 二.跨主机 Docker 网络通信分类 2.1 通信方案 2.2.容器网络规范 2.3.网络通信实现方案 2.4.Kubernetes 网络模型 三.跨主机 Docker 网络 3.1 Flannel 网络方案 3.2.Calico 网络方案 3.3.Canal 网络方案 3.4.Docker overlay 网络方案 3.5.Docker ma

理解Docker(6):若干企业生产环境中的容器网络方案

本系列文章将介绍 Docker的相关知识: (1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 Linux namespace 隔离容器的运行环境 (4)Docker 容器的隔离性 - 使用 cgroups 限制容器使用的资源 (5)Docker 网络 (6)若干企业生产环境中的容器网络方案 Docker 在早期只有单机上的网络解决方案,在 1.19 版本引入了原生的 overlay 网络解决方案,但是它的性能损耗较大,可能无法适应一些生产环

理解Docker单机容器网络

在” 理解Docker单机容器网络 “一文中,还有一个Docker容器网络的功能尚未提及,那就是Docker容器的端口映射.即将容器的服务端口P’ 绑定到宿主机的端口P上,最终达到一种效果:外部程序通过宿主机的P端口访问,就像直接访问Docker容器网络内部容器提供的服务一样. Docker针对端口映射前后有两种方案,一种是1.7版本之前docker-proxy+iptables DNAT 的方式:另一种则是1.7版本(及之后)提供的完全由iptables DNAT实现的端口映射.不过在目前do

Docker官方论坛中回复最多的一个帖子“在数据容器内升级数据”

Docker官方论坛中回复最多的一个帖子"在数据容器内升级数据" matlehmann我有一个含数据的容器,它有一个卷(比如在/var/data)中的持久性数据.该容器包含持久性数据对另一个容器的软件.对于该软件的新版本,需要升级所述永久数据(结构或布局改变等).其结果是,我想与在相同的位置已升级的数据的另一数据容器(在/var/data)和仍保留旧数据容器与它的数据不变.这样一来,我可以用旧的数据容器与旧版本的软件,万一出了差错.但是,我怎么能做到这一点?以实现所期望的结果所需要的步

容器数据卷网络基本配置

容器和主机.容器与容器之间需要数据共享时可以使用数据卷技术解决 容器中管理数据的主要方式有两种:数据卷.数据卷容器 1 数据卷 1.1 数据卷特性 可在容器之间共享和重用 对数据卷的修改马上生效 对数据卷的更新不影响镜像 卷会一直存在,直到没有容器使用 1.2 在容器内创建一个数据卷的方式,在启动的时候使用 -v 标记,可以创建一个数据卷挂载到容器指定目录中,也可以挂载本地目录到容器中作为数据卷. 说明:本地目录路径必须是绝对路径,如果不存在,docker会自动创建. 1.3 数据卷容器,可以在

docker (2)---存储、网络(利用docker容器上线静态网站)

一.docker底层依赖的核心技术 1.命名空间 (Namespaces) 2.控制组 (Control Groups) 3.联合文件系统 (Union File System) 4.Linux 虚拟网络支持:本地和容器内创建虚拟接口 (1) 命名空间(Namespaces): 实现了容器间资源的隔离,每个容器拥有自己独立的命名空间 , 运行其中的应用就像是运行在独立的操作系统中一样 , 我们都可以看到文件系统,网卡等资源保证了容器之间互不影响,namesaces管理进程号 , 每个进程命名空间