2017-10-24 12 views
1

Rパッケージがドッカーコンテナにインストールされていることを確認するためのベストプラクティスはありますか?私はコンテナをCIサービスで実行するようにセットアップしたいと思いますし、パッケージがインストールされていることを確認していますが、ローカルでビルドしているので、ログはインストールされたパッケージとインストールされていないパッケージを判別するのが非常に難しいようです。 CIサービスを使って私にやってもらったり、単純なバッチスクリプトを使ってパッケージがインストールされていることを確認したりするのもいいでしょう。Rパッケージがドッカーコンテナにインストールされていることを確認してください。

FROM rocker/tidyverse:latest 
RUN mkdir -p $HOME/.R 
COPY R/Makevars /root/.R/Makevars 

RUN apt-get update -qq \ 
    && apt-get -y --no-install-recommends install \ 
    liblzma-dev \ 
    libbz2-dev \ 
    ed \ 
    clang \ 
    ccache \ 
    default-jdk \ 
    default-jre \ 
    && R CMD javareconf \ 
    && install2.r --error \ 
     ggstance ggrepel \ 
     rstan shinystan rstanarm \ 
     ###My pkgs 
     tidytext janitor corrr officer devtools pacman 
     tidyquant timetk tibbletime sweep broom prophet \ 
     forecast prophet lime sparklyr rsparkling \ 
     formattable httr rvest xml2 jsonlite \ 
     textclean ggthemes naniar \ 
    && Rscript -e 'devtools::install_github(c("hadley/multidplyr","jeremystan/tidyjson","ropenscilabs/skimr"))' \ 
    && rm -rf /tmp/downloaded_packages/ /tmp/*.rds \ 
    && rm -rf /var/lib/apt/lists/* 

答えて

1

package_check.Rのようなものにこれを保存しRscriptを経由して、それを実行しますドッカーラインがあります:

c("tidytext", "janitor", "corrr", "officer", "devtools", "pacman", "tidyquant", 
    "timetk", "tibbletime", "sweep", "broom", "prophet", "forecast", "prophet", 
    "lime", "sparklyr", "rsparkling", "formattable", "httr", "rvest", "xml2", 
    "jsonlite", "textclean", "ggthemes", "naniar") -> chk_pkgs 

suppressPackageStartupMessages(
    sapply(chk_pkgs, require, character.only=TRUE, quietly=FALSE, warn.conflicts=FALSE) 
) -> ret 

missing_pkgs <- sort(names(which(ret == FALSE))) 

if (length(missing_pkgs) > 0) { 
    warning("The following packages are not installed: %s", 
      paste0(sprintf(" - %s", missing_pkgs), collapse="\n")) 
} 

quit(save=FALSE, status=length(names) == 0, runLast = FALSE) 

はあなたに不足しているパッケージのエラーを与える以下

は私の現在のdockerfileです欠落しているリストを削除し、終了ステータスが0以外のスクリプトを終了します。

+0

これを本当に動的にするには、すべてのパッケージをインストールしてchk_pkgsにその値を割り当てるだけで、RScriptを使用する必要がありますか?基本的にbashを使用してinstall.packagesに入れられたパッケージのベクトルを取り出します。 – petergensler

+0

Aye。あなたがそのルートに行きたいなら(それには時間がかかります)、動的インストーラと検証プログラムを作ることができます。あなたはすでに、基本的なロッカーのイメージを広げて素晴らしいものをやっているので、それはちょうどケーキで氷結しています。 – hrbrmstr

+0

これは私の "コア"ジレンマです。ドッカーイメージをローカルに構築すると、パッケージがインストールを完了したときに、そのdepsと共にビルドログを解釈するのが本当に難しいです。 * DONE(rstan) ダウンロードされたソースパッケージは、依存関係 'miniUI'、 'PKI'、 'RCurl'、 'RJSONIO'をインストールしている \t '/ tmp/downloaded_pa​​ckages' にもあります。 'packats'、 'crosstalk'、 'bayesplot'、 'colourpicker'、 'DT'、 'dygraphs'、 'gtools'、 'rsconnect'、 'shinyjs'、 'shinythemes'、 'threejs'、 'xts'だから、あなたはそれらがrstanのdepsだと思っているのですが、むしろ私のベクトルの中の他のpksに基づいたdepsです。 – petergensler

関連する問題