Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update README with Docker usage instructions #69

Merged
merged 3 commits into from
Feb 6, 2025
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
168 changes: 165 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,17 @@
<!-- README.md is generated from README.Rmd. Please edit that file -->

# biodiversityhorizons
# Biodiversity Horizons

<!-- badges: start -->

[![codecov](https://codecov.io/gh/uw-ssec/biodiversity-horizons/graph/badge.svg?token=ee1oeNuMlb)](https://codecov.io/gh/uw-ssec/biodiversity-horizons)

<!-- badges: end -->

**Biodiversity Horizons** is an R-based project for processing climate data and
analyzing primate distributions. It can be used locally (in R/RStudio) or run
inside a Docker container for consistent dependencies across systems.

## Installation

You can install the development version of biodiversityhorizons like so:
Expand All @@ -29,5 +33,163 @@ library(biodiversityhorizons)
## basic example code
```

You’ll still need to render `README.Rmd` regularly, to keep `README.md`
up-to-date. `devtools::build_readme()` is handy for this.
#### For more advanced usage, refer to our [**Contributing Guidelines**](./Contributing.md)

## Docker Usage

We provide a Docker image so you can run the data processing scripts in a
containerized environment, ensuring consistent R dependencies.

### 1. Prerequisites

- #### Install Docker: Refer to [**Install Docker Desktop Guide**](https://docs.docker.com/desktop/)

### 2. Pull the Docker Image

```
docker pull ghcr.io/uw-ssec/biodiversity-horizons:latest
```

If this succeeds, the image is downloaded locally.

#### (Optional) GitHub Container Registry Authentication:

If pulling fails with a `“denied”` error, generate a
[Personal Access Token](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens)
(classic) with `read:packages` scope and run:

```
echo YOUR_TOKEN | docker login ghcr.io -u YOUR_GITHUB_USERNAME --password-stdin
```

### 3. Obtain or Prepare your `data-raw/` folder

- #### Option A: Using Your Own Data

If you already have .rds files:

- Create a local folder (e.g., ~/my_data) and place your .rds files there.
- That folder will be mounted as `/home/biodiversity-horizons/data-raw` in the
container.

- #### Option B: Cloning This Repo for Sample Data

If you need sample .rds files provided by this project (in data-raw/):

**1. Clone this repository:**

```
git clone https://github.com/uw-ssec/biodiversity-horizons.git
```

```
cd biodiversity-horizons
```

**2. Use the included data-raw/ folder. It contains sample .rds files.**

### 4. Run the Container Using run_container.sh

We recommend using the script `run_container.sh` for simplicity. It mounts your
data and output folders to the container and executes the main R script.

- Ensure the script is executable:

```
chmod +x run_container.sh
```

- Identify your directories:

- A data folder with .rds files (either your own or the cloned data-raw/)
- An outputs directory for script results

- Run the container:

```
./run_container.sh /absolute/path/to/data-raw /absolute/path/to/outputs
```

- Replace `/absolute/path/to/data-raw` or `/absolute/path/to/data-outputs`
with the paths on your machine.

- This mounts your local data-raw folder into the container and runs the
default script.

### 5. Passing Additional Arguments

You can pass custom arguments (e.g., parallel plan, workers), example:

```
./run_container.sh /absolute/path/to/data-raw /absolute/path/to/outputs multisession 4
```

These extra arguments are forwarded to the R script inside the container.

## Setup and Run Apptainer

**Step 1: Navigate to the biodiversity-horizons project directory**

```
cd ~/Desktop/biodiversity-horizons # Adjust this path as needed
```

**Step 2: Run Docker with Apptainer inside an AMD64 environment**

```
docker run --rm -it --privileged \
--platform linux/amd64 \
-v $(pwd):/mnt \
godlovedc/apptainer bash
```

### Inside Docker Container:

**Step 3: Pull and convert the Docker image into a .sif file for Apptainer**

```
apptainer pull /mnt/biodiversity-horizons.sif docker://ghcr.io/uw-ssec/biodiversity-horizons:latest
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Curious, why under /mnt? This is typically used for mounting file systems

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I used /mnt to ensure the .sif file persists outside the container since /mnt is mounted to my local machine’s project folder. This way, the .sif file remains accessible even after the container exits.

```

**Step 4: Verify the .sif file was created**

```
ls -l /mnt/biodiversity-horizons.sif
```

**Step 5: Run Apptainer shell and mount required directories**

```
apptainer shell --bind /mnt/data-raw:/home/biodiversity-horizons/data-raw /mnt/biodiversity-horizons.sif
```

### Inside Apptainer Shell:

**Step 6: Move to the correct working directory**

```
cd /home/biodiversity-horizons
```

**Step 7: Run the R script**

```
Rscript /home/biodiversity-horizons/scripts/VISS_Sample_Data.R /home/biodiversity-horizons/data-raw
```

**(Optional) Step 8: Run the R script with custom arguments (e.g., using 2
workers)**

```
Rscript /home/biodiversity-horizons/scripts/VISS_Sample_Data.R /home/biodiversity-horizons/data-raw multisession 2
```

## Running and Developing

Instructions to run and contribute to the portal can be found in
[**Contributing Guidelines**](./CONTRIBUTING.md)

Please follow our [**UW-SSEC Code of Conduct**](./CODE_OF_CONDUCT.md) in all
interactions. For questions or issues, open an
[**Issue**](https://github.com/uw-ssec/biodiversity-horizons/issues) or contact
the maintainers.
Loading