reef-defi / reef-chain

EVM compatible chain with NPoS/PoC consensus
https://docs.reef.io
GNU General Public License v3.0
135 stars 37 forks source link

Add Dockerfile #27

Closed chivay closed 3 years ago

chivay commented 3 years ago

Add a basic Dockerfile that should simplify node deployment. Doing this will be as simple as running:

# docker run reef-node --chain mainnet [...]

Build is split into two stages in order to minimize final image size.

mwarzynski commented 3 years ago

@Netherdrake Would it be possible to create an account in the Dockerhub for Reef organization and upload the Docker Image of reef-node over there?

As @chivay mentioned, we could then put a one-liner in the README, so that people may deploy the Node easily.

Actually, as a separate PR we could automate the process of Docker Image upload to Dockerhub (which would happen for a release).

Netherdrake commented 3 years ago

I'm not sure it makes sense to use Docker at all, since the output is a target platform binary. The most optimal thing to do is to just run the binary. Docker just adds a layer of artificial complexity and overhead.

mwarzynski commented 3 years ago

I'm not sure it makes sense to use Docker at all.

@Netherdrake It's your very subjective point of view. Others could think: "I am not sure it makes sense to run arbitrary binaries, which have almost 1000 (unaudited) dependencies, on my machine without any isolation from host".

This is about choice. Containerized version, among other advantages, has seamless experience which could potentially increase adoption. If we can provide a very easy way to set up the Reef Node then why not? I honestly don't see any valid reason not to. Containerization is pretty much the default way of deployment these days.

The most optimal thing to do is to just run the binary.

I actually doubt there would be any noticeable performance drop in comparison to the non-containerized version. Even if it would be not negligible, others may have different priorities (e.g. prioritize security above performance of their Nodes, or just don't want to deal with compilation on their side and use a prepared Docker Image with a one-command-to-run). Again, it's about having a choice. Are you able to provide metrics or approximations of the drop in performance that would make containerized version out of the question?


If you are not receptive for my arguments, then please look up other projects and see if they provide containerized version. Would they if it didn't make sense? https://geth.ethereum.org/docs/install-and-build/installing-geth#run-inside-docker-container

Netherdrake commented 3 years ago

We do use Docker for everything else (backends, apps etc), but I can not recommend running reef-node inside Docker, for development or production use.

I think as far as convenience is concerned, a better solution would be to provide a build service for all major platforms.

That being said, if someone still wants to use Docker, fine, as long as they are willing to deal with any Docker related issues themselves.