dockerise_project <- function(project_folder,needed_packages=NULL,package_search=TRUE,build_folder=tempfolder(),image_name=NULL,build=TRUE){
if(is.null(image_name)){
image_name <- gsub(' ','_',return_last(strsplit(project_folder,'/')[[1]]))
}
if(!dir.exists(build_folder)){
stop('Build folder must exist')
}
currentBuild <<- build_folder
Rversion <- paste(R.Version()[c('major','minor')],collapse='.')
if(package_search){
Rfiles <- grep('*.R$',dir(project_folder,recursive = TRUE),value=TRUE)
if(length(Rfiles)>0){
paths <- sprintf('%s/%s',project_folder,Rfiles)
found_packages <- unique(unlist(sapply(paths,find_used_packages)))
needed_packages <- unique(c(needed_packages,found_packages))
}
}
package_instructions <- create_package_instructions(neededPackages = needed_packages,prefer_install = TRUE,buildFolder = build_folder)
folder_instructions <- copy_folder_instructions(project_folder,buildFolder = build_folder)
base_instructions <- sprintf(
paste(readLines(system.file("templates/basedockerfile",package='dockerise')),collapse='\n'),
Rversion)
all <- paste( base_instructions,
package_instructions,
folder_instructions,
sep='\n\n'
)
writeLines(all,sprintf("%s/Dockerfile",build_folder))
if(build){
# initialwd <- getwd()
# setwd(build_folder)
# print(getwd())
buildCommand <- sprintf("docker build -t \"%s\" \"%s\"",paste('dockerise/app',tolower(image_name),sep='/'),build_folder)
print(buildCommand)
system(buildCommand)
# setwd(initialwd)
}else{
}
return(list('folder'=build_folder,'respository'=paste('dockerise/project',tolower(image_name),sep='/')))
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.