From d266171ed8645829bbbeb29f7cdb18340670d267 Mon Sep 17 00:00:00 2001 From: Roland Venesz Date: Fri, 13 Oct 2017 15:47:13 +0200 Subject: [PATCH] Docker improvements (faster and more secure builds) --- .dockerignore | 6 ++++++ Dockerfile | 21 ++++++++++++--------- README.md | 48 +++++++++++++++++++++++++++++++++++++++++++++--- 3 files changed, 63 insertions(+), 12 deletions(-) create mode 100644 .dockerignore diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 000000000..9f4726bfb --- /dev/null +++ b/.dockerignore @@ -0,0 +1,6 @@ +.git +.gitignore +Dockerfile +.dockerignore +config.json* +*.sqlite diff --git a/Dockerfile b/Dockerfile index bd303769d..75929a5e8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,20 +1,23 @@ -FROM python:3.6.2 - -RUN apt-get update -RUN apt-get -y install build-essential +FROM python:3.6.2 # Install TA-lib -RUN wget http://prdownloads.sourceforge.net/ta-lib/ta-lib-0.4.0-src.tar.gz -RUN tar zxvf ta-lib-0.4.0-src.tar.gz -RUN cd ta-lib && ./configure && make && make install +RUN apt-get update && apt-get -y install build-essential && apt-get clean +RUN curl -L http://prdownloads.sourceforge.net/ta-lib/ta-lib-0.4.0-src.tar.gz | \ + tar xzvf - && \ + cd ta-lib && \ + ./configure && make && make install && \ + cd .. && rm -rf ta-lib ENV LD_LIBRARY_PATH /usr/local/lib # Prepare environment RUN mkdir /freqtrade -COPY . /freqtrade/ WORKDIR /freqtrade -# Install dependencies and execute +# Install dependencies +COPY requirements.txt /freqtrade/ RUN pip install -r requirements.txt + +# Install and execute +COPY . /freqtrade/ RUN pip install -e . CMD ["freqtrade"] diff --git a/README.md b/README.md index d9eb017ff..81c63ba75 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,7 @@ See the example below: }, ``` -`stoploss` is loss in percentage that should trigger a sale. +`stoploss` is loss in percentage that should trigger a sale. For example value `-0.10` will cause immediate sell if the profit dips below -10% for a given trade. This parameter is optional. @@ -47,7 +47,9 @@ Possible values are `running` or `stopped`. (default=`running`) If the value is `stopped` the bot has to be started with `/start` first. `ask_last_balance` sets the bidding price. Value `0.0` will use `ask` price, `1.0` will -use the `last` price and values between those interpolate between ask and last price. Using `ask` price will guarantee quick success in bid, but bot will also end up paying more then would probably have been necessary. +use the `last` price and values between those interpolate between ask and last +price. Using `ask` price will guarantee quick success in bid, but bot will also +end up paying more then would probably have been necessary. The other values should be self-explanatory, if not feel free to raise a github issue. @@ -88,12 +90,52 @@ $ BACKTEST=true pytest ``` #### Docker + +Building the image: + ``` $ cd freqtrade $ docker build -t freqtrade . -$ docker run --rm -it freqtrade ``` +For security reasons, your configuration file will not be included in the +image, you will need to bind mount it. It is also advised to bind mount +a SQLite database file (see second example) to keep it between updates. + +You can run a one-off container that is immediately deleted upon exiting with +the following command (config.json must be in the current working directory): + +``` +$ docker run --rm -v `pwd`/config.json:/freqtrade/config.json -it freqtrade +``` + +To run a restartable instance in the background (feel free to place your +configuration and database files wherever it feels comfortable on your +filesystem): + +``` +$ cd ~/.freq +$ touch tradesv2.sqlite +$ docker run -d \ + --name freqtrade \ + -v ~/.freq/config.json:/freqtrade/config.json \ + -v ~/.freq/tradesv2.sqlite:/freqtrade/tradesv2.sqlite \ + freqtrade +``` + +You can then use the following commands to monitor and manage your container: + +``` +$ docker logs freqtrade +$ docker logs -f freqtrade +$ docker restart freqtrade +$ docker stop freqtrade +$ docker start freqtrade +``` + +With the above setup you do not need to rebuild the image for configuration +changes, it will suffice to edit `config.json` and restart the container. + #### Contributing Feel like our bot is missing a feature? We welcome your pull requests! Few pointers for contributions: