diff --git a/DOCKER_INSTRUCTIONS.md b/DOCKER_INSTRUCTIONS.md new file mode 100644 index 0000000..361e7ee --- /dev/null +++ b/DOCKER_INSTRUCTIONS.md @@ -0,0 +1,27 @@ +This repository builds and runs a Docker container with everything you need to run IPOPTR. In addition, the directory `r` is mounted into the container at run time. In other words, programs saved in this folder can be opened and modified in the container. + +To compile IPOPTR with HSL, download the HSL source code and move the unzipped folder (in my case this was called `coinhsl-2019.05.21/`) to the base of this directory. When the Docker image is built, HSL will compile. + +If your folder with HSL is called something different, you may need to modify the follow line in the `Dockerfile` or simply comment it out: + +``` +COPY ./coinhsl-2019.05.21 /ipopt_df/CoinIpopt/ThirdParty/HSL +``` + +## Requirements + +1. [Docker](https://docs.docker.com/installation/) + +## Firing up + +``` +docker build -t MY_CONTAINER . # build your image +docker run -p 80:8787 --name="SOME_NAME" -e ROOT=TRUE -e USER=peter -e PASSWORD=peter -v $(pwd)/r_scripts:/home/peter/r -d MY_CONTAINER:latest +``` + +Note that you can pick any `--name`, `USER`, and `PASSWORD`. Make sure to swap out your `USER` in `/home/peter/r_scripts`. + + +## Get into it + +Now travel to the appropriate IP address in your browser (in this case, it's `http://localhost:80`) and log into R studio with the `USER` and `PASSWORD` you provided when you ran the container. \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..b968b3f --- /dev/null +++ b/Dockerfile @@ -0,0 +1,69 @@ +FROM rocker/rstudio:4.0.0 +FROM rocker/tidyverse + +MAINTAINER Peter Metz + +WORKDIR /ipopt_df + +COPY ./r /ipopt_df/r + +# IPoptr envrionment directory +ENV IPOPTR_DIR=/ipopt_df/CoinIpopt/build/Ipopt/contrib + +# Give the user root access +RUN echo "$USER ALL = NOPASSWD: ALL" >> /etc/sudoers && \ + + apt-get update && apt-get install -y \ + gcc g++ gfortran git patch wget pkg-config liblapack-dev libmetis-dev && \ + +################## +# Download ipoptr source +# http://www.coin-or.org/Ipopt/documentation/node10.html +################## + cd /ipopt_df && \ + wget http://www.coin-or.org/download/source/Ipopt/Ipopt-3.12.13.tgz && \ + gunzip Ipopt-3.12.13.tgz && \ + tar -xvf Ipopt-3.12.13.tar && \ + rm -rf Ipopt-3.12.13.tar && \ + mv Ipopt-3.12.13 CoinIpopt + +COPY ./coinhsl-2019.05.21 /ipopt_df/CoinIpopt/ThirdParty/HSL + +RUN cd /ipopt_df/CoinIpopt && \ + +# Downloading third party solvers + cd ThirdParty/Blas && \ + ./get.Blas && \ + cd ../Lapack && \ + ./get.Lapack && \ + cd ../ASL && \ + ./get.ASL && \ + cd ../Mumps && \ + ./get.Mumps && \ + cd ../Metis && \ + ./get.Metis && \ + cd ../HSL && \ + ./configure && \ + +################## +# Compile ipoptr +################## + cd ../../ && \ + mkdir build && \ + cd build && \ + ../configure -with-pic CXXFLAGS="-fopenmp" FCFLAGS="-fopenmp" CFLAGS="-fopenmp" ADD_FFLAGS=-fPIC ADD_CFLAGS=-fPIC ADD_CXXFLAGS=-fPIC && \ + make -j3 && \ + make test && \ + make install && \ + +################## +# Pre-install ipoptr +################## + echo "install.packages('/ipopt_df/CoinIpopt/build/Ipopt/contrib/RInterface', repos=NULL, type='source')" \ + >> installIpoptrPackage.R && \ + r installIpoptrPackage.R && \ + rm installIpoptrPackage.R + +# Default CMD from +# https://github.com/rocker-org/rocker/blob/master/rstudio/Dockerfile +# CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"] \ No newline at end of file