在使用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实例,并配置了一些重要的参数。下面是对这条命令的详细解释:
命令解析
-
docker run
:docker run
是Docker CLI的一个命令,用于创建并运行一个新的容器。
-
--name elasticsearch
:--name
参数用于指定容器的名称。这里将容器命名为elasticsearch
。
-
-p 9200:9200 -p 9300:9300
:-p
参数用于发布容器内的端口到宿主机。这里发布了两个端口:9200:9200
将容器内的9200端口映射到宿主机的9200端口,这是Elasticsearch的HTTP API端口。9300:9300
将容器内的9300端口映射到宿主机的9300端口,这是Elasticsearch集群间通信使用的端口。
-
-e "discovery.type=single-node"
:-e
参数用于设置环境变量。这里设置discovery.type
为single-node
,表示这是一个单节点集群。
-
-e ES_JAVA_OPTS="-Xms64m -Xmx512m"
:- 这个环境变量设置了Elasticsearch的JVM内存选项:
-Xms64m
设置初始堆内存大小为64MB。-Xmx512m
设置最大堆内存大小为512MB。
- 这个环境变量设置了Elasticsearch的JVM内存选项:
-
-v /mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
:-v
参数用于挂载宿主机的目录到容器内。这里挂载了宿主机上的/mydata/elasticsearch/config/elasticsearch.yml
文件到容器内的/usr/share/elasticsearch/config/elasticsearch.yml
,使得容器使用自定义的配置文件。
-
-v /mydata/elasticsearch/data:/usr/share/elasticsearch/data
:- 挂载宿主机上的
/mydata/elasticsearch/data
目录到容器内的/usr/share/elasticsearch/data
目录,用于存储Elasticsearch的数据。
- 挂载宿主机上的
-
-v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins
:- 挂载宿主机上的
/mydata/elasticsearch/plugins
目录到容器内的/usr/share/elasticsearch/plugins
目录,用于存放插件。
- 挂载宿主机上的
-
-d
:-d
参数表示在后台运行容器。
-
elasticsearch:7.4.2
:- 指定要使用的Elasticsearch镜像版本。这里使用的是
7.4.2
版本的Elasticsearch镜像。
- 指定要使用的Elasticsearch镜像版本。这里使用的是
这条命令启动了一个名为elasticsearch
的容器,使用Elasticsearch 7.4.2版本,并配置了以下内容:
- 映射了9200端口用于HTTP API访问,以及9300端口用于集群间通信。
- 设置了
discovery.type
为single-node
,表示这是一个单节点集群。 - 设置了JVM内存选项为64MB的初始堆内存和512MB的最大堆内存。
- 挂载了宿主机的目录到容器内,用于配置文件、数据存储和插件。
- 在后台运行容器。
**挂载(Mounting)**在Docker中指的是将宿主机的文件系统中的某个目录挂载到容器内作为容器内的文件系统的某个部分。这种机制提供了容器与宿主机之间的一种数据共享方式。以下是挂载的主要好处:
-
数据持久化:
- 挂载允许数据存储在宿主机的文件系统中,这意味着即使容器被删除,数据仍然保留在宿主机上,不会丢失。
- 这对于数据库和服务的状态保存非常重要,因为它们通常需要长期存储数据。
-
易于备份和恢复:
- 宿主机上的数据更容易进行备份和恢复,因为它们直接位于宿主机的文件系统中。
- 可以使用传统的备份工具和技术来处理这些数据。
-
易于调试:
- 容器内的文件可以通过宿主机上的文件系统直接访问,这使得调试更加简单。
- 开发者可以直接修改宿主机上的文件,而这些修改会立即反映在容器内。
-
共享开发环境:
- 在开发环境中,多个开发者可以共享同一组文件,而无需每次更改时都重新构建镜像。
- 这种方式可以节省大量的时间和资源。
-
减少镜像体积:
- 对于大型的应用程序或数据集,如果直接包含在Docker镜像中,会导致镜像体积过大。通过挂载,可以将这部分数据放在宿主机上,从而减小镜像的体积。
-
实时更新:
- 挂载的文件或目录可以实现实时更新,这对于开发环境特别有用,比如在开发Web应用程序时,可以即时看到代码更改的效果。
-
隔离性和安全性:
- 挂载只影响特定的文件或目录,而不是整个容器的内容。这有助于保持容器之间的隔离性,同时确保数据的安全。
-
跨容器共享:
- 多个容器可以挂载同一个宿主机目录,这样就可以在容器之间共享数据,而不需要通过网络传输数据。
-
避免重复构建:
- 如果多个容器需要相同的配置文件或数据集,可以直接挂载同一个目录,这样就不需要为每个容器单独构建和复制这些文件。