It is my understanding that using docker run will create a new container to run the server. In this case the server will need to communicate with zero through an external port exposed by the image running zero, is this correct? Does this mean that if zero is running on port 5080 within it’s image, in order for the server to talk to dgraph, this port must be exposed? The port chosen to export the internal 5080 port must then be supplied to the server by means of the --zero flag correct?
However, if we can get by with keeping things small, and we don’t need a separate docker image for the server, we can boot it up within the same image as zero's with docker exec (as is done in the tutorial). In this case, do we still need to expose port 5080?
In the following command (taken form the tutorial), is the localhost:5080 referring to the machine where docker is running, or an internal image address?
docker exec -it dgraph dgraph server --lru_mb 2048 --zero localhost:5080
Sorry for the long post, just trying to straighten out several ideas.
What’s on the Tour is just to use for learning, more specific recommendations with Docker should follow what’s in Dgraph’s documentation or what the Docker community recommends.
No, Dgraph needs Server and Zero. So you have to expose 5080, 9080 and 7080. And HTTP ports if gonna use Ratel and a HTTP client.
Probably not, but not recommended. It is a standard of Docker’s own use. Each container running a service/binary. Leaving a “fatty” container is not recommended by Docker community. And it does not help at all, you do not lose anything in following the recommendations.
It can binds locally.
Do like the docker-compose.yml example. That one follows the recommended approach.
Just as an FYI for anyone else looking into running a minimal setup (for testing purposes, for example): If you’re
running a single container,
and within that container you run both zero and server with their default ports
and your client is using grpc to communicate with server
then the only port you need to expose/publish is 9080.
The particular setup that works for me:
Dgraph Docker setup for testing
docker run -p 9080:9080 --name dgraph-tests dgraph/dgraph dgraph zero
docker exec dgraph-tests dgraph server --lru_mb 4096 --zero localhost:5080
^^Forgive the formatting, hljs thinks it sql code
Client setup, dgraph-js
import * as dgraph from 'dgraph-js';
import grpc from 'grpc';
const clientStub = new dgraph.DgraphClientStub(
'localhost:9080',
grpc.credentials.createInsecure()
);
const dgraphClient = new dgraph.DgraphClient(clientStub);