Skip to content
This repository was archived by the owner on Nov 15, 2023. It is now read-only.

Commit

Permalink
Add docker image (#375)
Browse files Browse the repository at this point in the history
* Add Dockerfile

Add documentation

Ref #375

* Add PORT, VOLUME and reduce size of the docker image significantly

Fix doc and reduce image size

Fix #375

* Fix docker compose
  • Loading branch information
chevdor authored and gavofyork committed Jul 27, 2018
1 parent 90a6dd5 commit 8f414ab
Show file tree
Hide file tree
Showing 8 changed files with 196 additions and 2 deletions.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,5 @@ substrate/pwasm-libc/Cargo.lock
demo/runtime/wasm/target/
**/._*
.vscode
polkadot.*
polkadot.*
.DS_Store
92 changes: 91 additions & 1 deletion README.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

Implementation of a https://polkadot.network node in Rust.


== To play

If you'd like to play with Polkadot, you'll need to install a client like this
Expand Down Expand Up @@ -46,6 +47,7 @@ polkadot --dev

You can muck around by cloning and building the http://github.com/paritytech/polka-ui and http://github.com/paritytech/polkadot-ui or just heading to https://polkadot.js.org/apps.


== Local Two-node Testnet

If you want to see the multi-node consensus algorithm in action locally, then
Expand All @@ -62,6 +64,7 @@ polkadot --chain=local --validator --key Bob -d /tmp/bob --port 30334 --bootnode
Ensure you replace `ALICE_BOOTNODE_ID_HERE` with the node ID from the output of
the first terminal.


== Hacking on Polkadot

If you'd actually like hack on Polkadot, you can just grab the source code and
Expand All @@ -74,7 +77,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:
Expand Down Expand Up @@ -103,4 +106,91 @@ You can start a development chain with:
[source, shell]
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:

[source, shell]
docker run --rm -it chevdor/polkadot:0.2.0 ./version

You can also pass any argument/flag that polkadot supports:

[source, shell]
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:

[source, shell]
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...):

[source, shell]
----
ccd 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):

[source, shell]
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.


== Shell completion

The Polkadot cli command supports shell auto-completion. For this to work, you will need to run the completion script matching you build and system.

Assuming you built a release version using `cargo build --release` and use `bash` run the following:

[source, shell]
source target/release/completion-scripts/polkadot.bash

You can find completion scripts for:
- bash
- fish
- zsh
- elvish
- powershell

To make this change persistent, you can proceed as follow:

=== First install

[source, shell]
----
COMPL_DIR=$HOME/.completion
mkdir -p $COMPL_DIR
cp -f target/release/completion-scripts/polkadot.bash $COMPL_DIR/
echo "source $COMPL_DIR/polkadot.bash" >> $HOME/.bash_profile
source $HOME/.bash_profile
----

=== Update

When you build a new version of Polkadot, the following will ensure you auto-completion script matches the current binary:

[source, shell]
----
COMPL_DIR=$HOME/.completion
mkdir -p $COMPL_DIR
cp -f target/release/completion-scripts/polkadot.bash $COMPL_DIR/
source $HOME/.bash_profile
----

include::doc/packages.adoc[]
33 changes: 33 additions & 0 deletions docker/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
FROM phusion/baseimage:0.10.1
LABEL maintainer "chevdor@gmail.com"

ARG PROFILE=release

RUN mkdir -p polkadot && \
apt-get update && \
apt-get upgrade -y && \
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 && \
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 && \
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"]
18 changes: 18 additions & 0 deletions docker/build.sh
Original file line number Diff line number Diff line change
@@ -0,0 +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

# 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 ${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"
8 changes: 8 additions & 0 deletions docker/cleanup.sh
Original file line number Diff line number Diff line change
@@ -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/*
15 changes: 15 additions & 0 deletions docker/docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
version: '3'
services:
polkadot:
build:
context: .
ports:
- "127.0.0.1:30333:30333/tcp"
- "127.0.0.1:9933:9933/tcp"
image: chevdor/polkadot:latest
volumes:
- "polkadot-data:/data"
command: polkadot

volumes:
polkadot-data:
16 changes: 16 additions & 0 deletions docker/readme-docker.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@

== Polkadot Docker

=== Start a Polkadot docker container

Run the following command

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.
13 changes: 13 additions & 0 deletions docker/version
Original file line number Diff line number Diff line change
@@ -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 "-----------------------------------------"

0 comments on commit 8f414ab

Please sign in to comment.