【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.type为single-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.type为single-node,表示这是一个单节点集群。
  • 设置了JVM内存选项为64MB的初始堆内存和512MB的最大堆内存。
  • 挂载了宿主机的目录到容器内,用于配置文件、数据存储和插件。
  • 在后台运行容器。

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

  1. 数据持久化:

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

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

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

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

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

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

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

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

    • 如果多个容器需要相同的配置文件或数据集,可以直接挂载同一个目录,这样就不需要为每个容器单独构建和复制这些文件。
相关推荐
虎头金猫5 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
分布式存储与RustFS5 天前
MinIO 官方 Docker 镜像被移除:依赖它的项目该怎么办
docker·云原生·devops·对象存储·minio·分布式存储
AI职业加油站5 天前
AI智能体应用工程师证书:政策红利下的职业新风口
大数据·运维·人工智能·学习·职场发展
此冬歌咏6 天前
K8s 节点故障实战:优雅驱逐 31 秒,硬故障 331 秒,以及那个永远 Pending 的 Pod
运维·k8s
玉&心6 天前
通过Arthas在线诊断K8S中的内存及JVM等使用情况
docker·k8s·arthas
xing-xing6 天前
Docker容器中Nginx站点根目录网页配置访问
nginx·docker
-梅6 天前
linux(8) 软硬链接
linux·运维·服务器
guo_wen_qiang6 天前
上传本地镜像到harbor中
docker·容器·持续部署
张洛闻Eren6 天前
k8s云原生【第十课】:水平 Pod 自动扩缩容
运维·数据库·云原生·kubernetes·github
羑悻的小杀马特6 天前
Dockerfile 全景指南:从入门编写dockerfile到生产环境镜像优化实战,一步步带你从啃透制作指令到镜像制作落地!
docker·dockerfile·镜像制作