---
title: "Docker/Singularity Containers" 
author: "<h4>Authors: <i>`r auths <- eval(parse(text = gsub('person','c',read.dcf('../DESCRIPTION', fields = 'Authors@R'))));paste(auths[names(auths)=='given'],auths[names(auths)=='family'], collapse = ', ')`</i></h4>" 
date: "<h4>Vignette updated: <i>`r format( Sys.Date(), '%b-%d-%Y')`</i></h4>"
output:
  BiocStyle::html_document:
    md_extensions: [ 
      "-autolink_bare_uris" 
    ]
params:
  cont:
    value: NULL
  docker_registry:
    value: "ghcr.io"
  docker_org: 
    value: "neurogenomics"
  
vignette: >
    %\VignetteIndexEntry{docker}
    %\usepackage[utf8]{inputenc}
    %\VignetteEngine{knitr::rmarkdown}
---


```{r setup, include=FALSE}
#### Package name ####
PKG <- read.dcf("../DESCRIPTION", fields = "Package")[1]
library(PKG, character.only = TRUE)
## Docker containers must be lowercase
pkg <- tolower(PKG)
#### Username of DockerHub account ####
docker_org <- params$docker_org
docker_registry <- params$docker_registry 
cont <- params$cont 
docker_url <- if(grepl("ghcr.io",docker_registry)){
  paste("https://ghcr.io",cont,sep="/")
} else {
  paste("https://hub.docker.com/repository/docker",docker_org,pkg,sep="/")
}

```

# Installation 

`r PKG` is now available via [`r docker_registry`](`r docker_url`) 
as a containerised environment with Rstudio and 
all necessary dependencies pre-installed.

## Method 1: via Docker

First, [install Docker](https://docs.docker.com/get-docker/) 
if you have not already. 

Create an image of the [Docker](https://www.docker.com/) container 
in command line:  

```
docker pull `r cont`
```

Once the image has been created, you can launch it with:  

```
docker run \
  -d \
  -e ROOT=true \
  -e PASSWORD="<your_password>" \
  -v ~/Desktop:/Desktop \
  -v /Volumes:/Volumes \
  -p <port_out>:<port_in> \
  `r cont`
```  

### NOTES

* Make sure to replace `<your_password>` above with whatever you want your password to be.  
* Change the paths supplied to the `-v` flags for your particular use case. 
* The `-d` ensures the container will run in "detached" mode,
which means it will persist even after you've closed your command line session.  
* The username will be *"rstudio"* by default.  
* Optionally, you can also install the [Docker Desktop](https://www.docker.com/products/docker-desktop/) 
to easily manage your containers.  

## Method 2: via Singularity

If you are using a system that does not allow Docker 
(as is the case for many institutional computing clusters), 
you can instead [install Docker images via Singularity](https://docs.sylabs.io/guides/2.6/user-guide/singularity_and_docker.html).  

```
singularity pull docker://`r cont`
```

For troubleshooting, see the [Singularity documentation](https://docs.sylabs.io/guides/latest/user-guide/singularity_and_docker.html#github-container-registry).

# Usage 

Finally, launch the containerised Rstudio by entering the 
following URL in any web browser:
*http://localhost:<port_out>/*

Login using the credentials set during the Installation steps.  


# Session Info 

<details> 

```{r Session Info}
utils::sessionInfo()
```

</details>  

<br>
