From 5d7df99591856c87dbeaf76f15de4d267141b680 Mon Sep 17 00:00:00 2001 From: Ethan Buchman Date: Wed, 10 Jun 2015 12:06:28 -0400 Subject: [PATCH] docker --- DOCKER/Dockerfile | 41 +++++++++++++++++++++++++++++++++++++++++ DOCKER/README.md | 31 +++++++++++++++++++++++++++++++ DOCKER/docker.sh | 20 ++++++++++++++++++++ DOCKER/run.sh | 12 ++++++++++++ Dockerfile | 32 -------------------------------- Makefile | 4 ++-- README.md | 4 ++++ 7 files changed, 110 insertions(+), 34 deletions(-) create mode 100644 DOCKER/Dockerfile create mode 100644 DOCKER/README.md create mode 100755 DOCKER/docker.sh create mode 100755 DOCKER/run.sh delete mode 100644 Dockerfile diff --git a/DOCKER/Dockerfile b/DOCKER/Dockerfile new file mode 100644 index 000000000..1d92cfadf --- /dev/null +++ b/DOCKER/Dockerfile @@ -0,0 +1,41 @@ +# Pull base image. +FROM golang:1.4.2-wheezy + +ENV user tendermint +ENV data_root /data/tendermint + +# set user right away for determinism +RUN groupadd -r $user \ + && useradd -r -s /bin/false -g $user $user + +# create directory for persistence and give our user ownership +RUN mkdir -p $data_root \ + && chown -R $user:$user $data_root + +# Set the env variables to non-interactive +ENV DEBIAN_FRONTEND noninteractive +ENV DEBIAN_PRIORITY critical +ENV DEBCONF_NOWARNINGS yes +ENV TERM linux +RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections + +# grab deps (gmp) +RUN apt-get update && \ + apt-get install -y --no-install-recommends \ + libgmp3-dev && \ + rm -rf /var/lib/apt/lists/* + +# set the repo and install tendermint +ENV repo /go/src/github.com/tendermint/tendermint +ADD . $repo +WORKDIR $repo +RUN make + +# persist data, set user +VOLUME $data_root +USER tendermint +ENV TMROOT $data_root + +# run tendermint +CMD ["./run.sh"] + diff --git a/DOCKER/README.md b/DOCKER/README.md new file mode 100644 index 000000000..f1eb458ca --- /dev/null +++ b/DOCKER/README.md @@ -0,0 +1,31 @@ + +# Persistence + +It's good practice to use a data-only container, alongside the main application. +The `docker.sh` script sets it all up for you, and provides the +same functionality as `-v host_dir:image_dir` but by copying the data rather than +mounting it. + +# To Play + +Get quickly caught up with the testnet: `FAST_SYNC=true ./DOCKER/docker.sh` + +Use a pre-existing `~/.tendermint`: `VC=~/.tendermint NO_BUILD=true ./docker.sh` + +This is like doing `-v ~/.tendermint:/data/tendermint`, but better. + +Use `NO_BUILD` to avoid waiting if the image is already built. If you don't use +`NO_BUILD`, you should be in `tendermint/tendermint`, and using `./DOCKER/docker.sh` + +Rerunning `docker.sh` will require you to delete the old containers: + +`docker rm mint mintdata` + +However, if you remove the `mintdata` container, you delete the data (the blockchain). +If you don't use the `VC` option, your key will be deleted too + +To avoid deleting and recreating the data container, use + +`VD=true NO_BUILD=true ./docker.sh` + +Of course, once running, you can just control the main container with `docker stop mint` and `docker start mint` diff --git a/DOCKER/docker.sh b/DOCKER/docker.sh new file mode 100755 index 000000000..f362212cf --- /dev/null +++ b/DOCKER/docker.sh @@ -0,0 +1,20 @@ +#! /bin/bash + +# don't build if you're impatient +if [[ ! $NO_BUILD ]]; then + docker build -t mint . +fi + +# create the data-only container +if [[ ! $VD ]]; then + docker run --name mintdata --entrypoint /bin/echo mint Data-only container for mint +fi + +# copy a directory from host to data-only volume +if [[ $VC ]]; then + cd $VC + tar cf - . | docker run -i --volumes-from mintdata mint tar xvf - -C /data/tendermint +fi + +# run tendermint +docker run --name mint --volumes-from mintdata -d -p 46656:46656 -p 46657:46657 -e FAST_SYNC=$FAST_SYNC mint diff --git a/DOCKER/run.sh b/DOCKER/run.sh new file mode 100755 index 000000000..2f2d489e9 --- /dev/null +++ b/DOCKER/run.sh @@ -0,0 +1,12 @@ +#! /bin/bash + +if [[ $BARAK_SEED ]]; then + cat ./cmd/barak/$BARAK_SEED | ./build/barak & +fi + +if [[ $FAST_SYNC ]]; then + ./build/tendermint node --fast_sync +else + ./build/tendermint node +fi + diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index eb99f70e6..000000000 --- a/Dockerfile +++ /dev/null @@ -1,32 +0,0 @@ -# Pull base image. -FROM golang:1.4.2-wheezy - -# Set the env variables to non-interactive -ENV DEBIAN_FRONTEND noninteractive -ENV DEBIAN_PRIORITY critical -ENV DEBCONF_NOWARNINGS yes -ENV TERM linux -RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections - -RUN apt-get update && \ - apt-get install -y --no-install-recommends \ - libgmp3-dev && \ - rm -rf /var/lib/apt/lists/* - -# Install go -# ADD tendermint user -RUN useradd tendermint - -# Get rid of tendermint user login shell -RUN usermod -s /sbin/nologin tendermint - -ADD . /go/src/github.com/tendermint/tendermint -WORKDIR /go/src/github.com/tendermint/tendermint -RUN make - -# Set environment variables -USER tendermint -ENV USER tendermint -ENV TMROOT /tendermint_root -# docker run -v $(pwd)/tendermint_root:/tendermint_root -CMD [ "./build/tendermint", "node" ] diff --git a/Makefile b/Makefile index 6dcc7e0ed..38ff42123 100644 --- a/Makefile +++ b/Makefile @@ -2,7 +2,7 @@ all: build -build: get_deps +build: go build -o build/tendermint github.com/tendermint/tendermint/cmd/tendermint go build -o build/barak github.com/tendermint/tendermint/cmd/barak go build -o build/debora github.com/tendermint/tendermint/cmd/debora @@ -12,7 +12,7 @@ no_get: go build -o build/barak github.com/tendermint/tendermint/cmd/barak go build -o build/debora github.com/tendermint/tendermint/cmd/debora -build_race: get_deps +build_race: go build -race -o build/tendermint github.com/tendermint/tendermint/cmd/tendermint go build -race -o build/barak github.com/tendermint/tendermint/cmd/barak go build -race -o build/debora github.com/tendermint/tendermint/cmd/debora diff --git a/README.md b/README.md index 8c0fa0104..6582bda9f 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,10 @@ Tendermint is blockchain consensus. No proof of work. * See: https://github.com/tendermint/tendermint/tree/master/INSTALL +### Docker + +* See: https://github.com/tendermint/tendermint/tree/master/DOCKER + ### Coding style * Go