【docker】关于挂载

在使用docker时,经常会用到以下这种

docker run --name elasticsearch -p 9200:9200 -p 9300:9300 \-e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" -v /mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /mydata/elasticsearch/data:/usr/share/elasticsearch/data -v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins -d elasticsearch:7.4.2

这条docker run命令用于启动一个Elasticsearch实例,并配置了一些重要的参数。下面是对这条命令的详细解释:

命令解析

  1. docker run:

    • docker run 是Docker CLI的一个命令,用于创建并运行一个新的容器。
  2. --name elasticsearch:

    • --name 参数用于指定容器的名称。这里将容器命名为elasticsearch
  3. -p 9200:9200 -p 9300:9300:

    • -p 参数用于发布容器内的端口到宿主机。这里发布了两个端口:
      • 9200:9200 将容器内的9200端口映射到宿主机的9200端口,这是Elasticsearch的HTTP API端口。
      • 9300:9300 将容器内的9300端口映射到宿主机的9300端口,这是Elasticsearch集群间通信使用的端口。
  4. -e "discovery.type=single-node":

    • -e 参数用于设置环境变量。这里设置discovery.typesingle-node,表示这是一个单节点集群。
  5. -e ES_JAVA_OPTS="-Xms64m -Xmx512m":

    • 这个环境变量设置了Elasticsearch的JVM内存选项:
      • -Xms64m 设置初始堆内存大小为64MB。
      • -Xmx512m 设置最大堆内存大小为512MB。
  6. -v /mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:

    • -v 参数用于挂载宿主机的目录到容器内。这里挂载了宿主机上的/mydata/elasticsearch/config/elasticsearch.yml文件到容器内的/usr/share/elasticsearch/config/elasticsearch.yml,使得容器使用自定义的配置文件。
  7. -v /mydata/elasticsearch/data:/usr/share/elasticsearch/data:

    • 挂载宿主机上的/mydata/elasticsearch/data目录到容器内的/usr/share/elasticsearch/data目录,用于存储Elasticsearch的数据。
  8. -v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins:

    • 挂载宿主机上的/mydata/elasticsearch/plugins目录到容器内的/usr/share/elasticsearch/plugins目录,用于存放插件。
  9. -d:

    • -d 参数表示在后台运行容器。
  10. elasticsearch:7.4.2:

    • 指定要使用的Elasticsearch镜像版本。这里使用的是7.4.2版本的Elasticsearch镜像。

这条命令启动了一个名为elasticsearch的容器,使用Elasticsearch 7.4.2版本,并配置了以下内容:

  • 映射了9200端口用于HTTP API访问,以及9300端口用于集群间通信。
  • 设置了discovery.typesingle-node,表示这是一个单节点集群。
  • 设置了JVM内存选项为64MB的初始堆内存和512MB的最大堆内存。
  • 挂载了宿主机的目录到容器内,用于配置文件、数据存储和插件。
  • 在后台运行容器。

**挂载(Mounting)**在Docker中指的是将宿主机的文件系统中的某个目录挂载到容器内作为容器内的文件系统的某个部分。这种机制提供了容器与宿主机之间的一种数据共享方式。以下是挂载的主要好处:

  1. 数据持久化:

    • 挂载允许数据存储在宿主机的文件系统中,这意味着即使容器被删除,数据仍然保留在宿主机上,不会丢失。
    • 这对于数据库和服务的状态保存非常重要,因为它们通常需要长期存储数据。
  2. 易于备份和恢复:

    • 宿主机上的数据更容易进行备份和恢复,因为它们直接位于宿主机的文件系统中。
    • 可以使用传统的备份工具和技术来处理这些数据。
  3. 易于调试:

    • 容器内的文件可以通过宿主机上的文件系统直接访问,这使得调试更加简单。
    • 开发者可以直接修改宿主机上的文件,而这些修改会立即反映在容器内。
  4. 共享开发环境:

    • 在开发环境中,多个开发者可以共享同一组文件,而无需每次更改时都重新构建镜像。
    • 这种方式可以节省大量的时间和资源。
  5. 减少镜像体积:

    • 对于大型的应用程序或数据集,如果直接包含在Docker镜像中,会导致镜像体积过大。通过挂载,可以将这部分数据放在宿主机上,从而减小镜像的体积。
  6. 实时更新:

    • 挂载的文件或目录可以实现实时更新,这对于开发环境特别有用,比如在开发Web应用程序时,可以即时看到代码更改的效果。
  7. 隔离性和安全性:

    • 挂载只影响特定的文件或目录,而不是整个容器的内容。这有助于保持容器之间的隔离性,同时确保数据的安全。
  8. 跨容器共享:

    • 多个容器可以挂载同一个宿主机目录,这样就可以在容器之间共享数据,而不需要通过网络传输数据。
  9. 避免重复构建:

    • 如果多个容器需要相同的配置文件或数据集,可以直接挂载同一个目录,这样就不需要为每个容器单独构建和复制这些文件。
相关推荐
tonngw4 小时前
【Mac 从 0 到 1 保姆级配置教程 16】- Docker 快速安装配置、常用命令以及实际项目演示
macos·docker·容器·开源·github·docker desktop·orbstack
debug 小菜鸟6 小时前
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
docker·云计算·aws
SpikeKing6 小时前
Server - 使用 Docker 配置 PyTorch 研发环境
pytorch·docker·llm
码农101号7 小时前
Linux中shell编程表达式和数组讲解
linux·运维·服务器
powerfulzyh8 小时前
非Root用户启动SSH服务经验小结
运维·ssh
云道轩8 小时前
升级centos 7.9内核到 5.4.x
linux·运维·centos
斯普信云原生组8 小时前
Docker构建自定义的镜像
java·spring cloud·docker
爱学习的小道长8 小时前
Ubuntu Cursor升级成v1.0
linux·运维·ubuntu
EelBarb8 小时前
seafile:ubuntu搭建社区版seafile12.0
linux·运维·ubuntu
402 Payment Required8 小时前
serv00 ssh登录保活脚本-邮件通知版
运维·chrome·ssh