R/dockerise_app.R

Defines functions dockerise_app save_image

dockerise_app <- 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)

  app_instructions <- copy_app_instructions(project_folder,buildFolder = build_folder)

  base_instructions <- sprintf(
    paste(readLines(system.file("templates/baseshinydockerfile",package='dockerise')),collapse='\n'),
    Rversion)

  all <- paste(  base_instructions,
                 package_instructions,
                 app_instructions,
                 sep='\n\n'
  )

  file.copy(system.file("templates/shiny-server.conf",package='dockerise'),
            sprintf("%s",build_folder),overwrite = TRUE)
  file.copy(system.file("templates/shiny-server.sh",package='dockerise'),
            sprintf("%s",build_folder),overwrite = TRUE)

  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,'repository'=paste('dockerise/app',tolower(image_name),sep='/')))

}

save_image <- function(respository){
  system(sprintf("docker save %s",repository))
}
statisticiansix/dockerise documentation built on Nov. 5, 2019, 9:20 a.m.