Docklets: docker on droplets.
docklet_create(
name = random_name(),
size = getOption("do_size", "s-1vcpu-2gb"),
region = getOption("do_region", "sfo3"),
ssh_keys = getOption("do_ssh_keys", NULL),
backups = getOption("do_backups", NULL),
ipv6 = getOption("do_ipv6", NULL),
private_networking = getOption("do_private_networking", NULL),
tags = list(),
wait = TRUE,
image = "docker-18-04",
...
)
docklet_ps(droplet, all = TRUE, ssh_user = "root")
docklet_images(droplet, all = TRUE, ssh_user = "root")
docklet_pull(
droplet,
repo,
ssh_user = "root",
keyfile = NULL,
ssh_passwd = NULL,
verbose = FALSE
)
docklet_run(
droplet,
...,
rm = FALSE,
name = NULL,
ssh_user = "root",
keyfile = NULL,
ssh_passwd = NULL,
verbose = FALSE
)
docklet_stop(droplet, container, ssh_user = "root")
docklet_rm(droplet, container, ssh_user = "root")
docklet_docker(
droplet,
cmd,
args = NULL,
docker_args = NULL,
ssh_user = "root",
keyfile = NULL,
ssh_passwd = NULL,
verbose = FALSE
)
docklet_rstudio(
droplet,
user,
password,
email = "rstudio@example.com",
img = "rocker/rstudio",
port = "8787",
volume = "",
dir = "",
browse = TRUE,
add_users = FALSE,
ssh_user = "root",
keyfile = NULL,
ssh_passwd = NULL,
verbose = FALSE
)
docklet_rstudio_addusers(
droplet,
user,
password,
img = "rocker/rstudio",
port = "8787",
ssh_user = "root",
keyfile = NULL,
ssh_passwd = NULL,
verbose = FALSE
)
docklet_shinyserver(
droplet,
img = "rocker/shiny",
port = "3838",
volume = "",
dir = "",
browse = TRUE,
ssh_user = "root"
)
docklet_shinyapp(
droplet,
path,
img = "rocker/shiny",
port = "80",
dir = "",
browse = TRUE,
ssh_user = "root"
)
(character) Name of the droplet. The human-readable string you
wish to use when displaying the Droplet name. The name, if set to a domain
name managed in the DigitalOcean DNS management system, will configure a
PTR record for the Droplet. The name set during creation will also
determine the hostname for the Droplet in its internal configuration.
Default: picks a random name from words
if none supplied.
(character) Size slug identifier. See sizes()
for
a complete list. Default: s-1vcpu-2gb
(character) The unique slug identifier for the region that you
wish to deploy in. See regions()
for a complete list.
Default: sfo3
(character) A character vector of key names, an integer
vector of key ids, or NULL, to use all keys in your account. Accounts
with the corresponding private key will be able to log in to the droplet.
See keys()
for a list of the keys that you've added.
Default: NULL
(logical) Enable backups. A boolean indicating whether automated backups should be enabled for the droplet. Automated backups can only be enabled when the droplet is created, and cost extra. Default: FALSE
(logical) A boolean indicating whether IPv6 is enabled on the droplet.
(logical) Use private networking. Private
networking is currently only available in certain regions.
Default: FALSE
(character) A vector of tag names to apply to the Droplet after it is created. Tag names can either be existing or new tags. Default: list()
If TRUE
(default), wait until droplet has been
initialised and is ready for use. If set to FALSE
we return a
droplet object right away after droplet creation request has been sent.
Note that there won't be an IP address in the object yet. Note that
waiting means we ping the DigitalOcean API to check on the status of your
droplet, which uses up your API requests. The option do.wait_time
can be set to any positive integer to determine how many seconds between
pings. The default is 1 sec. Note that if you are creating droplets in a
loop, parallel or otherwise, set do.wait_time
within the loop
instead of outside of it.
(character/numeric) The image ID of a public or private image,
or the unique slug identifier for a public image. This image will be the
base image for your droplet. See images()
for a complete
list. Use rstudio-20-04 for a DigitalOcean Marketplace image with R and
Tidyverse readily available. Default: ubuntu-18-04-x64
For docklet_create
, additional options passed down to
POST
. For docklet_run
, additional arguments
combined and applied to docker statement.
A droplet, or something that can be coerced to a droplet by
as.droplet
.
(logical) List all containers or images. Default: TRUE
(character) User account for ssh commands against droplet. Default: root
(character) Docker name, can be local to the Droplet or remote,
e.g., rocker/rstudio
Optional private key file.
Optional passphrase or callback function for authentication.
Refer to the ssh::ssh_connect
documentation for more details.
If TRUE, will print command before executing it.
(logical) Automatically remove the container when it exits.
Default: FALSE
(character) Container name, can be partial (though has to be unique)
(character) A docker command (e.g., "run"
)
(character) Docker args
(character) Docker args
(character) User name. required.
(character) Password. required. can not be 'rstudio'
(character) E-mail address. Default: "rstudio@example.com"
(character) Docker image (not a DigitalOcean image). Default:
'rocker/rstudio'
(character) Port. Default: 8787
(character) Volume. Can use to bind a volume.
(character) Working directory inside the container.
(logical) If TRUE
, open RStudio instance in your default
browser.
(logical) Add users or not when installing RStudio server. Default: FALSE
(character) Path to a directory with Shiny app files
all functions return a droplet
If you need to figure out the URL for your RStudio or Shiny server
instance, you can construct like http://<ip address>:<port>
where
IP address can most likely be found like d$networks$v4[[1]]$ip_address
and the port is the port you set in the function call.
There's a few things to be note about managing Docker containers from analogsea:
To see running containers run docklet_ps(d)
To get get logs run droplet_ssh(d, "docker logs <container ID>")
To get a continuous feed of the logs run
droplet_ssh(d, "docker logs -f <container ID>")
Do not use docker exec -ti
as you do not want an interactive session -
it will not work from within R. If you log into your DigitalOcean droplet
you can do docker exec -ti
To install R package dependencies for a Shiny app, or similar, run
droplet_ssh(d, "docker exec <ID> R -e 'install.packages(\"pkg-name\")'")
where d
is your droplet object and <ID>
is the docker container ID
If you get a droplet object back without an IP address, the IP
address was not assigned when the payload was returned by DigitalOcean.
Simply run d <- droplet(d$id)
to update your droplet object and the IP
address will populate.
if (FALSE) {
d <- docklet_create()
d <- droplet(d$id)
d %>% docklet_pull("dockerpinata/sqlite")
d %>% docklet_images()
# sqlite
d %>% docklet_run("dockerpinata/sqlite", "sqlite3 --version", rm = TRUE)
d %>% docklet_ps()
# cowsay
d %>% docklet_pull("chuanwen/cowsay")
d %>% docklet_run("chuanwen/cowsay", rm = TRUE)
# docker images
d %>% docklet_images()
# install various R versions via Rocker
d %>% docklet_pull("rocker/r-base")
d %>% docklet_pull("rocker/r-devel")
d %>% docklet_pull("rocker/r-ver:3.2")
d %>% docklet_run("rocker/r-ver:3.2", "R --version", rm = TRUE)
d %>% docklet_run("rocker/r-ver:3.2", "Rscript -e '2 + 3'", rm = TRUE)
# Run a docklet containing rstudio
d %>% docklet_rstudio(user = "foo", password = "bar")
# Delete a droplet
d %>% droplet_delete()
# Add users to an Rstudio instance
## This adds 100 users to the instance, with username/passwords
## following pattern user1/user1 ... through 100
d <- docklet_create()
d <- droplet(d$id)
d %>% docklet_rstudio(user = "foo", password = "bar") %>%
docklet_rstudio_addusers(user = "foo", password = "bar")
# Spin up a Shiny server (opens in default browser)
(d <- docklet_create())
d %>% docklet_shinyserver()
docklet_create() %>% docklet_shinyserver()
# Spin up a Shiny server with an app (opens in default browser)
d <- docklet_create(); d <- droplet(d$id)
path <- system.file("examples", "widgets", package = "analogsea")
d %>% docklet_shinyapp(path)
## uploading more apps - use droplet_upload, then navigate in browser
### if you try to use docklet_shinyapp again on the same droplet, it will error
path2 <- system.file("examples", "mpg", package = "analogsea")
d %>% droplet_upload(path2, "/srv/shinyapps") # then go to browser
}