Procházet zdrojové kódy

update solr content

Martijn Koster před 9 roky
rodič
revize
8152390d1f
1 změnil soubory, kde provedl 132 přidání a 17 odebrání
  1. 132 17
      solr/content.md

+ 132 - 17
solr/content.md

@@ -10,6 +10,8 @@ Learn more on [Apache Solr homepage](http://lucene.apache.org/solr/) and in the
 
 # How to use this Docker image
 
+## Run Solr and index example data
+
 To run a single Solr server:
 
 ```console
@@ -26,46 +28,159 @@ $ docker exec -it --user=solr my_solr bin/solr create_core -c gettingstarted
 
 In the web UI if you click on "Core Admin" you should now see the "gettingstarted" core.
 
-If you want to load some example data:
+If you want to load some of the example data that is included in the container:
 
 ```console
 $ docker exec -it --user=solr my_solr bin/post -c gettingstarted example/exampledocs/manufacturers.xml
 ```
 
-In the UI, find the "Core selector" popup menu and select the "gettingstarted" core, then select the "Query" menu item. This gives you a default search for "*:*" which returns all docs. Hit the "Execute Query" button, and you should see a few docs with data. Congratulations!
+In the UI, find the "Core selector" popup menu and select the "gettingstarted" core, then select the "Query" menu item. This gives you a default search for `*:*` which returns all docs. Hit the "Execute Query" button, and you should see a few docs with data. Congratulations!
+
+## Single-command demo
+
+For convenience, there is a single command that starts Solr, creates a collection called "demo", and loads sample data into it:
+
+```console
+$ docker run --name solr_demo -d -P solr solr-demo
+```
+
+## Loading your own data
+
+If you want load your own data, you'll have to make it available to the container, for example by copying it into the container:
+
+```console
+$ docker cp $HOME/mydata/mydata.xml my_solr:/opt/solr/mydata.xml
+$ docker exec -it --user=solr my_solr bin/post -c gettingstarted mydata.xml
+```
+
+or by using Docker host volumes:
+
+```console
+$ docker run --name my_solr -d -p 8983:8983 -t -v $HOME/mydata:/opt/solr/mydata solr
+$ docker exec -it --user=solr my_solr bin/solr create_core -c gettingstarted
+$ docker exec -it --user=solr my_solr bin/post -c gettingstarted mydata/mydata.xml
+```
 
 To learn more about Solr, see the [Apache Solr Reference Guide](https://cwiki.apache.org/confluence/display/solr/Apache+Solr+Reference+Guide).
 
-## Distributed Solr
+## Creating Cores
+
+In addition to the `docker exec` method explained above, you can create a core automatically at start time, in several ways.
 
-You can also run a distributed Solr configuration, with Solr nodes in separate containers, sharing a single ZooKeeper server:
+If you run:
 
-Run ZooKeeper, and define a name so we can link to it:
+```console
+$ docker run -d -P solr solr-create -c mycore
+```
+
+the container will:
+
+- run Solr in the background, on the loopback interface
+- wait for it to start
+- run the "solr create" command with the arguments you passed
+- stop the background Solr
+- start Solr in the foreground
+
+You can combine this with mounted volumes to pass in core configuration from your host:
 
 ```console
-$ docker run --name zookeeper -d -p 2181:2181 -p 2888:2888 -p 3888:3888 jplock/zookeeper
+$ docker run -d -P -v $PWD/myconfig:/myconfig solr solr-create -c mycore -d /myconfig
 ```
 
-Run two Solr nodes, linked to the zookeeper container:
+When using the `solr-create` command, Solr will log to the standard docker log (inspect with `docker logs`),
+and the collection creation will happen in the background and log to `/opt/docker-solr/init.log`.
+
+This first way closely mirrors the manual core creation steps and uses Solr's own tools to create the core,
+so should be reliable.
+
+The second way of creating a core at start time is using the `solr-precreate` command. This will create the core
+in the filesystem before running Solr. You should pass it the core name, and optionally the directory to copy the
+config from (this defaults to Solr's built-in "basic_configs"). For example:
+
+```console
+$ docker run -d -P solr solr-precreate mycore
+$ docker run -d -P -v $PWD/myconfig:/myconfig solr solr-precreate mycore /myconfig
+```
+This method stores the core in an intermediate subdirectory called "mycores". This allows you to use mounted
+volumes:
 
 ```console
-$ docker run --name solr1 --link zookeeper:ZK -d -p 8983:8983 \
-      solr \
-      bash -c '/opt/solr/bin/solr start -f -z $ZK_PORT_2181_TCP_ADDR:$ZK_PORT_2181_TCP_PORT'
+$ mkdir mycores
+$ sudo chown 8983:8983 mycores
+$ docker run -d -P -v $PWD/mycores:/opt/solr/server/solr/mycores solr solr-precreate mycore
+```
+
+This second way is quicker, easier to monitor because it logs to the docker log, and can fail immediately if something is wrong.
+But, because it makes assumptions about Solr's "basic_configs", future upstream changes could break that.
+
+The third way of creating a core at startup is to use the image extension mechanism explained in the next section.
+
+## Using Docker Compose
+
+With Docker Compose you can create a Solr container with the index stored in a named data volume.
+Create a `docker-compose.yml` like:
+
+```
+version: '2'
+services:
+  solr:
+    image: solr
+    ports:
+     - "8983:8983"
+    volumes:
+      - data:/opt/solr/server/solr/mycores
+    entrypoint:
+      - docker-entrypoint.sh
+      - solr-precreate
+      - mycore
+volumes:
+  data:
+```
 
-$ docker run --name solr2 --link zookeeper:ZK -d -p 8984:8983 \
-      solr \
-      bash -c '/opt/solr/bin/solr start -f -z $ZK_PORT_2181_TCP_ADDR:$ZK_PORT_2181_TCP_PORT'
+and just run `docker-compose up`.
+
+## Extending the image
+
+The docker-solr image has an extension mechanism. At run time, before starting Solr, the container will execute scripts
+in the `/docker-entrypoint-initdb.d/` directory. You can add your own scripts there either by using mounted volumes
+or by using a custom Dockerfile. These scripts can for example copy a core directory with pre-loaded data for continuous
+integration testing, or modify the Solr configuration.
+
+Here is a simple example. With a `set-heap.sh` script like:
+
+```console
+#!/bin/bash
+set -e
+cp /opt/solr/bin/solr.in.sh /opt/solr/bin/solr.in.sh.orig
+sed -e 's/SOLR_HEAP=".*"/SOLR_HEAP="1024m"/' </opt/solr/bin/solr.in.sh.orig >/opt/solr/bin/solr.in.sh
+grep '^SOLR_HEAP=' /opt/solr/bin/solr.in.sh
 ```
 
-Create a collection:
+you can run:
 
 ```console
-$ docker exec -i -t solr1 /opt/solr/bin/solr create_collection \
-        -c collection1 -shards 2 -p 8983
+$ docker run --name solr_heap1 -d -P -v $PWD/docs/set-heap.sh:/docker-entrypoint-initdb.d/set-heap.sh solr
+$ sleep 5
+$ docker logs solr_heap1 | head
+/opt/docker-solr/scripts/docker-entrypoint.sh: running /docker-entrypoint-initdb.d/set-heap.sh
+SOLR_HEAP="1024m"
+
+
+Starting Solr on port 8983 from /opt/solr/server
 ```
 
-Then go to `http://localhost:8983/solr/#/~cloud` (adjust the hostname for your docker host) to see the two shards and Solr nodes.
+With this extension mechanism it can be useful to see the shell commands that are being executed by the `docker-entrypoint.sh`
+script in the docker log. To do that, set an environment variable using Docker's `-e VERBOSE=yes`.
+
+## Distributed Solr
+
+You can also run a distributed Solr configuration.
+
+The recommended and most flexible way to do that is to use Docker networking.
+See the [Can I run ZooKeeper and Solr clusters under Docker](https://github.com/docker-solr/docker-solr/blob/master/Docker-FAQ.md#can-i-run-zookeeper-and-solr-clusters-under-docker) FAQ,
+and [this example](docs/docker-networking.md).
+
+You can also use legacy links, see the [Can I run ZooKeeper and Solr with Docker Links](Docker-FAQ.md#can-i-run-zookeeper-and-solr-clusters-under-docker) FAQ.
 
 # About this repository