From 9e3ce74afbff69960116dce6283d93a737f45d98 Mon Sep 17 00:00:00 2001 From: chevdor Date: Thu, 19 Jul 2018 08:43:07 +0200 Subject: [PATCH 1/3] Add Dockerfile Add documentation Ref #375 --- README.md | 11 ++++++++++- docker/Dockerfile | 23 +++++++++++++++++++++++ docker/build.sh | 10 ++++++++++ docker/readme-docker.adoc | 14 ++++++++++++++ 4 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 docker/Dockerfile create mode 100755 docker/build.sh create mode 100644 docker/readme-docker.adoc diff --git a/README.md b/README.md index 7b173147f178b..521bc816c2f5c 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,15 @@ Implementation of a https://polkadot.network node in Rust. +## Press start + +To get up and running with the smallest footprint on your system, you may use the Polkadot Docker image. +You can either build it yourself or use the latest published one: + +``` +docker run --rm -it polkadot:0.2.0 /polkadot/target/debug/polkadot --name "PolkaDocker" +``` + ## To play If you'd like to play with Polkadot, you'll need to install a client like this @@ -73,7 +82,7 @@ rustup update nightly rustup target add wasm32-unknown-unknown --toolchain nightly rustup update stable cargo install --git https://github.com/alexcrichton/wasm-gc -sudo apt install cmake pkg-config libssl-dev +sudo apt install cmake pkg-config libssl-dev git ``` Then, grab the Polkadot source code: diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 0000000000000..85699f69886d3 --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,23 @@ +FROM phusion/baseimage:0.10.1 +LABEL maintainer "chevdor@gmail.com" + +ARG PROFILE=release + +RUN apt-get update && \ + apt-get upgrade -y && \ + apt-get install -y cmake pkg-config libssl-dev git + +RUN curl https://sh.rustup.rs -sSf | sh -s -- -y && \ + export PATH=$PATH:$HOME/.cargo/bin && \ + rustup update nightly && \ + rustup target add wasm32-unknown-unknown --toolchain nightly && \ + rustup update stable && \ + cargo install --git https://github.com/alexcrichton/wasm-gc && \ + git clone https://github.com/paritytech/polkadot.git && \ + cd polkadot && \ + ./build.sh && \ + cargo build --$PROFILE && \ + export PATH=$PATH:/polkadot/target/$PROFILE + +WORKDIR /polkadot +CMD ["/bin/sh", "polkadot"] diff --git a/docker/build.sh b/docker/build.sh new file mode 100755 index 0000000000000..b69f57802a3d0 --- /dev/null +++ b/docker/build.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash +set -e + +VERSION=`grep "^version" ../Cargo.toml | egrep -o "([0-9\.]+)"` + +echo "Building polkadot:$VERSION docker image, hang on!" +docker build --build-arg PROFILE=release -t polkadot:$VERSION . + +echo "Image is ready" +docker images | grep polkadot diff --git a/docker/readme-docker.adoc b/docker/readme-docker.adoc new file mode 100644 index 0000000000000..dafc9af53fa59 --- /dev/null +++ b/docker/readme-docker.adoc @@ -0,0 +1,14 @@ + +== Polkadot Docker + +=== Start a Polkadot docker container + +Run the following command + + docker run -d chevdor/polkadot:latest polkadot --name "polkadot-container" + +=== Building the image + +To build your own image from the source, you can run the following command: + + ./build.sh From 26605da2b285bcaaa1d7934c0337662cd7ffb702 Mon Sep 17 00:00:00 2001 From: chevdor Date: Fri, 20 Jul 2018 09:18:51 +0200 Subject: [PATCH 2/3] Add PORT, VOLUME and reduce size of the docker image significantly Fix doc and reduce image size Fix #375 --- .gitignore | 3 ++- README.md | 54 ++++++++++++++++++++++++++++++++------- docker/Dockerfile | 16 +++++++++--- docker/build.sh | 14 +++++++--- docker/cleanup.sh | 8 ++++++ docker/docker-compose.yml | 14 ++++++++++ docker/readme-docker.adoc | 4 ++- docker/version | 13 ++++++++++ 8 files changed, 109 insertions(+), 17 deletions(-) create mode 100755 docker/cleanup.sh create mode 100644 docker/docker-compose.yml create mode 100755 docker/version diff --git a/.gitignore b/.gitignore index 284453e775053..1b70fb7bcb660 100644 --- a/.gitignore +++ b/.gitignore @@ -12,4 +12,5 @@ substrate/pwasm-libc/Cargo.lock demo/runtime/wasm/target/ **/._* .vscode -polkadot.* \ No newline at end of file +polkadot.* +.DS_Store diff --git a/README.md b/README.md index 521bc816c2f5c..14e581c9da9c6 100644 --- a/README.md +++ b/README.md @@ -2,15 +2,6 @@ Implementation of a https://polkadot.network node in Rust. -## Press start - -To get up and running with the smallest footprint on your system, you may use the Polkadot Docker image. -You can either build it yourself or use the latest published one: - -``` -docker run --rm -it polkadot:0.2.0 /polkadot/target/debug/polkadot --name "PolkaDocker" -``` - ## To play If you'd like to play with Polkadot, you'll need to install a client like this @@ -110,3 +101,48 @@ You can start a development chain with: ``` cargo run -- --dev ``` + +## Using Docker + +### The easiest way + +The easiest/faster option is to use the latest image. + +Let´s first check the version we have. The first time you run this command, the polkadot docker image will be downloaded. This takes a bit of time and bandwidth, be patient: + +``` +docker run --rm -it chevdor/polkadot:0.2.0 ./version +``` + +You can also pass any argument/flag that polkadot supports: + +``` +docker run --rm -it chevdor/polkadot:0.2.0 polkadot --name "PolkaDocker" +``` + +Once you are done experimenting and picking the best node name :) you can start polkadot as daemon, exposes the polkadot ports and mount a volume that will keep your blockchain data locally: + +``` +docker run -d -p 30333:30333 -p 9933:9933 -v /my/local/folder:/data chevdor/polkadot:0.2.0 polkadot +``` + + +### Build your own image +To get up and running with the smallest footprint on your system, you may use the Polkadot Docker image. +You can either build it yourself (it takes a while...): + +``` +cd docker +./build.sh +``` + +### Reporting issues +If you run into issues with polkadot when using docker, please run the following command +(replace the tag with the appropriate one if you do not use latest): + +``` + docker run --rm -it chevdor/polkadot:latest version +``` + +This will show you the polkadot version as well as the git commit ref that was used to build your container. +Just paste that in the issue you create. diff --git a/docker/Dockerfile b/docker/Dockerfile index 85699f69886d3..40589c0ac5287 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -3,9 +3,13 @@ LABEL maintainer "chevdor@gmail.com" ARG PROFILE=release -RUN apt-get update && \ +RUN mkdir -p polkadot && \ + apt-get update && \ apt-get upgrade -y && \ - apt-get install -y cmake pkg-config libssl-dev git + apt-get install -y cmake pkg-config libssl-dev git && \ + apt-get clean && \ + mkdir -p /root/.local/share/Polkadot && \ + ln -s /root/.local/share/Polkadot /data RUN curl https://sh.rustup.rs -sSf | sh -s -- -y && \ export PATH=$PATH:$HOME/.cargo/bin && \ @@ -17,7 +21,13 @@ RUN curl https://sh.rustup.rs -sSf | sh -s -- -y && \ cd polkadot && \ ./build.sh && \ cargo build --$PROFILE && \ - export PATH=$PATH:/polkadot/target/$PROFILE + mv target/$PROFILE/polkadot /usr/local/bin && \ + cargo clean && \ + rm -rf /root/.cargo /root/.rustup /tmp/* +COPY version /polkadot WORKDIR /polkadot +EXPOSE 30333 9933 +VOLUME ["/data"] + CMD ["/bin/sh", "polkadot"] diff --git a/docker/build.sh b/docker/build.sh index b69f57802a3d0..fdbe8c3f8108c 100755 --- a/docker/build.sh +++ b/docker/build.sh @@ -1,10 +1,18 @@ #!/usr/bin/env bash set -e +# Find the current version from Cargo.toml VERSION=`grep "^version" ../Cargo.toml | egrep -o "([0-9\.]+)"` +GITUSER=chevdor +GITREPO=polkadot -echo "Building polkadot:$VERSION docker image, hang on!" -docker build --build-arg PROFILE=release -t polkadot:$VERSION . +# Build the image +echo "Building ${GITREPO}:$VERSION docker image, hang on!" +time docker build --build-arg PROFILE=release -t ${GITUSER}/${GITREPO}:$VERSION . +# Show the list of available images for this repo echo "Image is ready" -docker images | grep polkadot +docker images | grep ${GITREPO} + +echo -e "\nIf you just built the latest, you may want to update your tag:" +echo " $ docker tag ${GITUSER}/${GITREPO}:$VERSION ${GITUSER}/${GITREPO}:latest" diff --git a/docker/cleanup.sh b/docker/cleanup.sh new file mode 100755 index 0000000000000..b4de473a1b54f --- /dev/null +++ b/docker/cleanup.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash +# This script helps reduce the size of the built image +# It removes data that is not required. + +export PATH=$PATH:$HOME/.cargo/bin + +cargo clean +rm -rf /root/.cargo /root/.rustup /tmp/* diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml new file mode 100644 index 0000000000000..bac53d03e8f9c --- /dev/null +++ b/docker/docker-compose.yml @@ -0,0 +1,14 @@ +version: '3' +services: + sandbox: + build: + context: . + ports: + - "127.0.0.1:30333:30344/tcp" + - "127.0.0.1:9933:9944/tcp" + image: polkadot_sandbox:tag + volumes: + - polkadot-data:/root/.local/share/Polkadot + command: tail -f /dev/null + environment: + - CARGO_POLKADOT_VERSION_FOR_DOCKERFILE=$CARGO_POLKADOT_VERSION_FOR_DOCKERFILE diff --git a/docker/readme-docker.adoc b/docker/readme-docker.adoc index dafc9af53fa59..bbaceacd7f5c6 100644 --- a/docker/readme-docker.adoc +++ b/docker/readme-docker.adoc @@ -5,10 +5,12 @@ Run the following command - docker run -d chevdor/polkadot:latest polkadot --name "polkadot-container" + docker run -d chevdor/polkadot:latest polkadot === Building the image To build your own image from the source, you can run the following command: ./build.sh + +NOTE: Building the image takes a while. Count at least 30min on a good machine. diff --git a/docker/version b/docker/version new file mode 100755 index 0000000000000..047da3302ab95 --- /dev/null +++ b/docker/version @@ -0,0 +1,13 @@ +#!/usr/bin/env bash +# This script show the polkadot version and commit ref that was +# used to build the image. +# If you report an issue, call this script to get all details. +# This script will no longer be required once the polkadot cli +# can report its commit ref. + +echo "-----------------------------------------" +printf "Polkadot Docker Container: " +polkadot --version +printf " " +git rev-parse HEAD +echo "-----------------------------------------" From e91b1a79e333c84384ace45bc205cd60f622c70d Mon Sep 17 00:00:00 2001 From: chevdor Date: Mon, 23 Jul 2018 11:15:13 +0200 Subject: [PATCH 3/3] Fix docker compose --- docker/docker-compose.yml | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index bac53d03e8f9c..b76d41da1d03a 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -1,14 +1,15 @@ version: '3' services: - sandbox: + polkadot: build: context: . ports: - - "127.0.0.1:30333:30344/tcp" - - "127.0.0.1:9933:9944/tcp" - image: polkadot_sandbox:tag + - "127.0.0.1:30333:30333/tcp" + - "127.0.0.1:9933:9933/tcp" + image: chevdor/polkadot:latest volumes: - - polkadot-data:/root/.local/share/Polkadot - command: tail -f /dev/null - environment: - - CARGO_POLKADOT_VERSION_FOR_DOCKERFILE=$CARGO_POLKADOT_VERSION_FOR_DOCKERFILE + - "polkadot-data:/data" + command: polkadot + +volumes: + polkadot-data: