Skip to content

matthewbegun/loco

Repository files navigation

loco with flavours

want

  • then
    • play with devcontainer.json templates/features to see if their is a better way (think about handling project requirements/not having to host images)
    • user options in devcontainer spec to match up with jovyan etc for settings
    • customise codespace experience using devcontainer.json, .vscode and github dotfiles
    • experiment with using a much smaller base image and only adding in useful things
    • rust?
    • jupyterlab codespace?
    • remote hosting on personal metal
    • env vars or tags or similar to custom dev env

have

  • initial
    • Dockerfile to produce a useful baseline container (NB - VERY LARGE)
    • devcontainer.json to use that container in codespaces
    • shell scripts build container locally, push container to registry (hub) and run container locally with bind mounts

config

Can either load config files from a project repo each time and/or store config files in docker volumes for re-use

Docker volumes for config / settings / package caches

  • can use named docker volumes for settings (universal), bind mount for work(project), dockerfile for requirements (project)
    • create a docker volume named jovyan or rstudio to contain stateful setting changes
    • re-use that container to preserve user based application settings
    • ensure that you are overloading the ~/work with a bind mount to current project code and data
alias loco='cmd.exe /C start microsoft-edge:http://localhost:8889; docker run --rm -ti --name "local_loco" -e RESTARTABLE=yes -p 8889:8888/tcp -v jovyan:/home/jovyan -v "$(pwd):/home/jovyan/work" matthewbegun/loco:latest start-notebook.py --IdentityProvider.token=''

scratch

# ruhroh
alias rstudio='cmd.exe /C start microsoft-edge:http://localhost:8787; docker run --name "ruh_roh" --rm -ti -e DISABLE_AUTH=true -p 8787:8787 -v "$(pwd):/home/rstudio/work" rocker/verse:latest'
alias ruhroh='rstudio'
alias rr='rstudio'

# loco
alias loco='cmd.exe /C start microsoft-edge:http://localhost:8889; docker run --name "local_loco" --rm -ti -e RESTARTABLE=yes -p 8889:8888/tcp -v "$(pwd):/home/jovyan/work" matthewbegun/loco:latest start-notebook.py --IdentityProvider.token='' --ServerApp.root_dir=/home/jovyan/work'
alias notbook='loco'
alias nb='loco'

## data containers
# Populate a volume using a container
# the
docker run -d --name notbook \
    -p 8888:8888 \
    -v jovyan:/home/jovyan \
    jupyter/scipy-notebook

docker run -d --name notbooker \
    -p 8888:8888 \
    --volumes-from notbook \
    -v ${PWD}:/home/jovyan/work \
    jupyter/scipy-notebook

# Mount a populated volume into another container(s)
docker run -ti --init --rm \
    -v jovyan:/jovyan \
    busybox

scripts

#!/usr/bin/bash
# pull.bash

# use docker images format option to generate list of images to pull
docker images --format "{{.Repository}}:{{.Tag}}" | xargs -L1 docker pull
#!/usr/bin/bash
# ship.bash

# build all harbor images
find . -name build.bash -execdir bash {} \;

# push all harbor images
find . -name push.bash -execdir bash {} \;