To add a Docker container in a network where there is a database
container for instance, you can use parameter network_name
in function launch_proj_docker()
.
Here is an example on how to start a Docker container with a MySQL
database inside a network named r-db
.
Note that your RStudio Container will then need additional system
dependencies to be able to connect to the database. See examples in https://github.com/ColinFay/r-db .
network_name <- "r-db"
mysql_docker <- "mysql:8.0.16"
path_to_persistant_db <- "~/my_mysql_db"
# Databases container ----
## Pull image
system(paste("docker pull", mysql_docker))
## Create persistant drive for db
db_path <- normalizePath(path_to_persistant_db, mustWork = FALSE)
if (!dir.exists(db_path)) {
dir.create(db_path)
}
## Create docker network
system(paste("docker network create", network_name))
## Start container
future::future({
system(
paste0(
'docker run --net ', network_name,
' --name mysql ',
' -v ', db_path, ':/var/lib/mysql',
' -e MYSQL_ROOT_PASSWORD=coucou -d ', mysql_docker,
' --secure-file-priv=""',
' --default-authentication-plugin=mysql_native_password',
' && sleep 10',
' && docker exec mysql mysql -uroot -pcoucou -e "create database mydb" &')
)
})
Sys.sleep(9)
Then, you can start the RStudio container (with database system dependencies) using {devindocker}
# path <- "" # default
path <- my_project
# Which container with RStudio server? ----
container <- "thinkr/rstudio3_6_1_geo"
# Which port ? ----
# _Useful if multiple Rstudio Server to launch
port <- 8788
# Start Docker project
launch_proj_docker(path = path,
network_name = network_name,
container = container,
port = port)
Inside the container, you can connect to your database using {DBI} or {dbplyr}.