【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. 避免重复构建:

    • 如果多个容器需要相同的配置文件或数据集,可以直接挂载同一个目录,这样就不需要为每个容器单独构建和复制这些文件。
相关推荐
WTT001134 分钟前
2024楚慧杯WP
大数据·运维·网络·安全·web安全·ctf
苹果醋342 分钟前
React源码02 - 基础知识 React API 一览
java·运维·spring boot·mysql·nginx
日记跟新中1 小时前
Ubuntu20.04 修改root密码
linux·运维·服务器
唐小旭2 小时前
服务器建立-错误:pyenv环境建立后python版本不对
运维·服务器·python
明 庭2 小时前
Ubuntu下通过Docker部署NGINX服务器
服务器·ubuntu·docker
BUG 4042 小时前
Linux——Shell
linux·运维·服务器
大霞上仙2 小时前
Linux 多命令执行
linux·运维·服务器
冷心笑看丽美人2 小时前
探索 Samba 服务器:搭建跨平台文件共享的桥梁
运维·服务器
晨欣2 小时前
Kibana:LINUX_X86_64 和 DEB_X86_64两种可选下载方式的区别
linux·运维·服务器