---
# System prepended metadata

title: 'Container Camp, Spring-2021, Day 2 - March 16th'

---

# Container Camp, Spring-2021, Day 2 - March 16th

----
## Topic: 

**Container Camp Materials/Useful links**


- Course Homepage 
    - [https://learning.cyverse.org/projects/cyverse-container-camp/en/latest/index.html](https://learning.cyverse.org/projects/cyverse-container-camp/en/lcd atest/index.html)
- Course Schedule 
    - [https://learning.cyverse.org/projects/cyverse-container-camp/en/latest/getting_started/agenda.html](https://learning.cyverse.org/projects/cyverse-container-camp/en/latest/getting_started/agenda.html)

- [CyVerse Discovery Environment 2: https://de2.cyverse.org](https://de2.cyverse.org)

- [iRODS Command Documentation: https://docs.irods.org/master/icommands/user/](https://docs.irods.org/master/icommands/user/)

- [Classic DE: https://de.cyverse.org/de/](https://de.cyverse.org/de/)

- [Classic DE Tool Integration Walkthrough](https://learning.cyverse.org/projects/cyverse-container-camp/en/latest/cyverse/tool_integration_app_building_DE.html)

- [What are computer ports??](https://www.computerhope.com/jargon/p/port.htm#:~:text=When%20referring%20to%20a%20physical,external%20devices%20such%20as%20printers)

- [Docker Command Reference](https://docs.docker.com/engine/reference/builder/)

- [Docker Cheat Sheet PDF](https://www.docker.com/sites/default/files/d8/2019-09/docker-cheat-sheet.pdf)

- [Getting back onto Atmosphere to run docker (Day 1 - Amanda's tutorial)](https://learning.cyverse.org/projects/cyverse-container-camp/en/latest/docker/dockerintro.html)

- [The RockerVerse, Containerization for R](https://journal.r-project.org/archive/2020/RJ-2020-007/RJ-2020-007.pdf)

--- 
### Discussion and Notes:

**General notes:**

**iRODS `irsync`** this command will sync data from a CyVerse data store *folder* `-r` is the recursive flag. `-V` means very verbose and `-K` is the flag for use MD5 checksums to verify data integrity.

`irsync -rVK i:/iplant/home/some/data_store/path /home/rstudio/some/local/path`

`iget` pulls individual files or folders

`iput` puts individual files or folders in the data store


### Docker Run Rocker RStudio Command & an explanation of port syntax

`docker run -it -e PASSWORD=rstudio1 -p 8787:8787 rocker/tidyverse:latest`

At the login page enter `rstudio` for the username and whatever you chose as the argument for `-e PASSWORD=rstudio1`. Access this via a new browser tab and your `atmosphere-ip-address:8787`

*If you are running docker on your local machine...* The container will be running at `http://localhost:8787/`

Computer port syntax is `local-machine-port:container-port`

---

### Writing our own Dockerfiles

Getting setup:


1. If Docker is already running use `Control+C` on a PC or `Command+C` on a mac to end the running Docker container
2. Run `cd ~` to move to the home directory
3. Make the folder to store the Rockerverse Dockerfile `mkdir -p github/rocker-verse`
4. Change to the directory you made with `cd github/rocker-verse`
5. Use `touch` to create the Dockerfile by running `touch Dockerfile`
6. Edit the Dockerfile with nano by running `nano Dockerfile`

```
FROM rocker/verse:3.6.3

## Install CyVerse VICE Depends
RUN apt-get update && apt-get install -y lsb-release wget apt-transport-https python2.7 python-requests curl supervisor nginx gnupg2 libfuse2 nano htop

RUN curl "http://ftp.se.debian.org/debian/pool/main/o/openssl/libssl1.0.0_1.0.1t-1+deb8u8_amd64.deb" -O && \
    dpkg -i libssl1.0.0_1.0.1t-1+deb8u8_amd64.deb && \
    rm libssl1.0.0_1.0.1t-1+deb8u8_amd64.deb
# iCommands
RUN wget https://files.renci.org/pub/irods/releases/4.1.10/ubuntu14/irods-icommands-4.1.10-ubuntu14-x86_64.deb && dpkg -i *.deb

```

After you've saved the Dockerfile, you are ready to build the new container

```
docker build -t myname/rstudio-verse:irods .
```

When it is done building, I test it:

```
docker run -it -e PASSWORD=password -p 8787:8787 myname/rstudio-verse:irods
```

log into the container with username `rstudio` and password `password`

Testing iCommands in the new container, open Terminal

```
rstudio@a5f70859de07:~$ iinit
One or more fields in your iRODS environment file (irods_environment.json) are
missing; please enter them.
Enter the host name (DNS) of the server to connect to: data.cyverse.org
Enter the port number: 1247
Enter your irods user name: <myusername>
Enter your irods zone: iplant
Those values will be added to your environment file (for use by
other iCommands) if the login succeeds.

Enter your current iRODS password:
rstudio@a5f70859de07:~$ ils
```

### Using DockerHub 

1. Register for an account at [DockerHub](https://hub.docker.com/)
2. Setup your dockerhub account in the docker command line with `docker login`, this will prompt you for your dockerhub username and password.
3. Now you are ready to push a docker image to your account
4. Check to make sure your dockerhub username matches the tag, generically this would be `username/image:tag-name`, for example if Ryan wanted to push an image to his DockerHub he would tag an image like so `rbartelme/rocker-verse:3.6.3`
5. If you already have an image you can rename the tag to match this format with `docker tag docker-hub-username/container:tag` 
6. Push to docker hub (need to have your username in the tag for this to work `docker push username/container-image:tag`

### Building your own CyVerse Applications

CyVerse VICE images and Dockerfiles on GitHub: https://github.com/cyverse-vice/

CyVerse VICE images on Docker Hub: https://hub.docker.com/r/cyversevice 

Pull a CyVerse Docker image:

```
FROM cyversevice/rstudio-verse:latest

# Change to root user to install linux system dependencies
#USER root
# install some linux packages
#RUN apt-get update && apt-get install -y cowsay fortune

# Reset the username to RStudio user `rstudio` if you ran as root
#USER rstudio

# install some R packages
RUN R -e "install.packages('raster', dependencies=TRUE)"
```

Build the container

```
docker build -t rstudio:raster
```

Test the container on your VM:

```
docker run -it -p 8787:80 -e REDIRECT_URL=http://<IP_address_of_Atmo_VM>:8787 rstudio:raster
```

---

### Homework: 

- Look at Dockerfiles discussed today in class and think about how you might modify one of these images or Dockerfiles to do tasks for yourself on CyVerse
- See the above resources on GitHub and Docker Hub for inspiration and resources to develop your own application

- Cowsay!

Create a Dockerfile

```
FROM ubuntu:18.04 

RUN apt-get update && apt-get install -y fortune cowsay lolcat 
ENV PATH=/usr/games:${PATH} 
ENV LC_ALL=C
ENTRYPOINT fortune | cowsay | lolcat
```

Build your fortune telling cow:

```
docker build -t cowsay:cc21
```

Run it

```
docker run -it cowsay:cc21
```

----