既存の光沢のあるアプリを更新する
13099 ワード
byPeter Solymos
無料でエンタープライズ機能を提供しながらShinyProxyコンテナコンテナアプリケーションを実行します.あなたのユーザーを混乱させることなくアプリを更新する方法を学んでください.
ShinyProxy is one of the best self-hosting options あなたのアプリケーションのための認証とアプリケーションレベルの認証のようなエンタープライズ機能が必要なときにそこに.このポストでは、既存のアプリケーションを管理する方法を説明します.すべてのあなたのShinyProxyサーバーを再起動せずにこのようにすべてのユーザーが接続を維持.Docker画像で作業するときに覚えておくべき重要な問題がいくつかあります.
このチュートリアルのコードはanalythium/shiny-correlation githubリポジトリ.
Remember how the apps are listed に
あなたが何かを変えるならば
ShinyProxyを再起動することは、すべての現在のユーザが彼らの光沢のあるセッションを失い、ログインしているユーザがログアウトされることを意味します.これは、慎重にDocker画像を管理することによって避けることができる中断です.また、ユーザーがログインしていないときに、または中断が最小限で、事前にユーザーに広告が掲載されているときに更新をスケジュールすることができます.
最初のシナリオにフォーカスしましょう.ポストの残りの部分はあなたのユーザーに混乱を最小限に抑えるためにあなたのイメージタグを管理する方法を説明します.
The analythium/shiny-correlation GitHubリポジトリは、単純な光沢のあるアプリが含まれます.このアプリは、ハローシャイニーヒストグラムの例の二変量バージョンです.我々は、ローカルアプリケーションを構築し、ShinyProxyサーバーに展開します.
タグなしでDockerイメージを構築しましょう
サンプルサイズと相関を変更し、どのように強度の2次元推定が変更されている見てください.
光沢のあるアプリ:2相関変数の散乱プロットと2 D密度
フォローするShinyProxy setup instructions またはShinyProxy 1-click app from the Digitalocean Marketplace ShinyProxyサーバーを設定します.
画像をレジストリにプッシュする
Dockerイメージ自体が変わるとき、しかし、その名前(タグを含む)は同じままでいます、あなたはShinyProxyを再開する必要はありません.あなたがDocker画像の新しいバージョンをあなたのDocker Registryに押しつけるとき、これは起こります
光沢のあるアプリのバージョン2の更新は、配布を使用してrgl Rパッケージ.として、新しいイメージをタグ付けしたい
新しいイメージを作りましょう
イメージタグを省略するときには注意する必要があります.ここでは、画像にバージョンを行うことができますし、また
以前に作成した(バージョン1 )イメージを
これらのイメージをレジストリにプッシュします.
この小さなDocker迂回の後、我々は最新のタグがバージョン2を意味するので、我々はShinyProxyのアプリケーションを更新するために追跡しています: 画像の新しいバージョンをプル あなたがイメージをアップデートするとき、あるno need to restart the Docker or ShinyProxy services . 次回ユーザーがShinyProxyインストールでアプリケーションを起動すると、新しいイメージがコンテナを起動するために使用されます.
あなたのイメージをversioningすることは、良い実行と考えられます.何か予期しないことが起こるとき、あなたは変化をロールバックすることができるように、それは多くの感覚を作ります.
あなたのイメージを慎重にタグ付けし、ローカルのアプリをテストする場合は、使用することができます
複数のアプリケーションがある場合は、それぞれの最新バージョンをプルする必要があります.スクリプトを使用したり、次の1ライナーを使用して、ホスト上のすべてのDockerイメージを更新します.
定期的にサーバー上の画像を更新するcronジョブを設定することができます.ラン
cronジョブは更新のポーリングタイプを表します.これは定期的に更新をチェックしています.一方、画像への変更がまれであれば、一定のポーリングの必要はない.一方、cron間隔を大きく設定すると、重要な更新が失われる可能性があります.
これを念頭に置いて更新の周波数を選択します.既存のアプリや画像のwebhooksはconsidered a better alternative to polling , webhooksは私がここでカバーしていない少し多くの仕事を必要とするが.
あなたのShinyProxyサーバーの既存のアプリケーションを更新する簡単です.あなたは、一度にすべての既に展開されたアプリケーションを更新するだけで1つのコマンドです-あなたのユーザーに混乱はありません.アプリを開く次のユーザーが更新されたバージョンが表示されます.しかし、タグ付けや注意してくださいあなたのイメージを不要な驚きを避けるために.
The misunderstood Docker tag: latest
Pruning unused Docker images
Cron guide
無料でエンタープライズ機能を提供しながらShinyProxyコンテナコンテナアプリケーションを実行します.あなたのユーザーを混乱させることなくアプリを更新する方法を学んでください.
ShinyProxy is one of the best self-hosting options あなたのアプリケーションのための認証とアプリケーションレベルの認証のようなエンタープライズ機能が必要なときにそこに.このポストでは、既存のアプリケーションを管理する方法を説明します.すべてのあなたのShinyProxyサーバーを再起動せずにこのようにすべてのユーザーが接続を維持.Docker画像で作業するときに覚えておくべき重要な問題がいくつかあります.
このチュートリアルのコードはanalythium/shiny-correlation githubリポジトリ.
どのようなときに更新プログラムを検討する
Remember how the apps are listed に
application.yml
ファイル名/etc/shinyproxy
フォルダ - id: 02_hello
display-name: Demo Shiny App
description: App with sliders and file upload
container-cmd: ["R", "-e", "shiny::runApp('/home/app')"]
container-image: analythium/shinyproxy-demo:latest
access-groups: [admins]
ShinyProxyのアプリケーションを更新する2つの方法があります.あなたは、唯一のDocker画像を更新することができます.これはcontainer-image
config . YAMLファイルのタグと他のすべては同じままです.だってapplication.yml
ファイルは同じままですが、サーバー上でShinyProxyサービスを再起動する必要はありません.あなたが何かを変えるならば
application.yml
設定ファイルは、これらの変更のためにShinyProxyサービスを再起動する必要があります.これはcontainer-image
タグ、新しいアプリケーションを追加したり、一般的な設定のいずれかに触れる.Deploying and managing ShinyProxy can get complex when many apps are used, especially when the configuration of ShinyProxy is often updated. When restarting a running ShinyProxy instance (in order to update its configuration), users will face a disconnect from their running applications. – ShinyProxy Docs
ShinyProxyを再起動することは、すべての現在のユーザが彼らの光沢のあるセッションを失い、ログインしているユーザがログアウトされることを意味します.これは、慎重にDocker画像を管理することによって避けることができる中断です.また、ユーザーがログインしていないときに、または中断が最小限で、事前にユーザーに広告が掲載されているときに更新をスケジュールすることができます.
最初のシナリオにフォーカスしましょう.ポストの残りの部分はあなたのユーザーに混乱を最小限に抑えるためにあなたのイメージタグを管理する方法を説明します.
にアプリケーションを追加
The analythium/shiny-correlation GitHubリポジトリは、単純な光沢のあるアプリが含まれます.このアプリは、ハローシャイニーヒストグラムの例の二変量バージョンです.我々は、ローカルアプリケーションを構築し、ShinyProxyサーバーに展開します.
ビルドのイメージ
タグなしでDockerイメージを構築しましょう
-f
使用するdockfileを指定するフラグdocker build -f Dockerfile-v1 -t analythium/correlation .
すべての依存関係をすでに含んだ親イメージを指定したので、ビルドプロセスはかなり速くなければなりません.ここではDockerfile-v1
:FROM analythium/shinyproxy-demo:latest
RUN rm -rf /home/app/*
COPY ./app-v1.R ./app.R
あなたがDockerイメージをリストするならばdocker image ls
, あなたは何か面白いものを見る.そのイメージにはタグが付いている:latest
, 私たちは少しずつ戻ってきます.REPOSITORY TAG IMAGE ID
analythium/correlation latest 90732201668c
を実行して画像をテストすることができますdocker run -p 4000:3838 analythium/correlation
コマンドと訪問http://localhost:4000
.サンプルサイズと相関を変更し、どのように強度の2次元推定が変更されている見てください.
光沢のあるアプリ:2相関変数の散乱プロットと2 D密度
にアプリケーションを追加
フォローするShinyProxy setup instructions またはShinyProxy 1-click app from the Digitalocean Marketplace ShinyProxyサーバーを設定します.
画像をレジストリにプッシュする
docker push analythium/correlation:latest
), に加えるShinyProxy configuration , ホストマシン上のイメージをプルし、ShinyProxyサービスを再起動しますservice shinyproxy restart
.既存のアプリケーションを更新
Dockerイメージ自体が変わるとき、しかし、その名前(タグを含む)は同じままでいます、あなたはShinyProxyを再開する必要はありません.あなたがDocker画像の新しいバージョンをあなたのDocker Registryに押しつけるとき、これは起こります
analythium/correlation
イメージ.Docker画像を更新する
光沢のあるアプリのバージョン2の更新は、配布を使用してrgl Rパッケージ.として、新しいイメージをタグ付けしたい
:v2
両方のバージョンを維持したいので.使用するDockerfile-v2
:FROM analythium/shinyproxy-demo:latest
USER root
RUN install2.r -r http://cran.rstudio.com/ rgl
RUN rm -rf /home/app/*
COPY ./app-v2.R ./app.R
USER app
このDockerFileは、光沢のあるアプリケーションのバージョン2をイメージにコピーし、RGLパッケージをインストールします.新しいイメージを作りましょう
docker build -f Dockerfile-v2 -t analythium/correlation:v2 .
今すぐドッカー画像のリストをプリントアウトdocker image ls
:REPOSITORY TAG IMAGE ID
analythium/correlation v2 9d98df8ea853
analythium/correlation latest 90732201668c
我々は、新しいイメージをタグ付けした:v2
でも前のイメージは:latest
. これは直観的な振る舞いです:latest
タグは、最後に構築されたイメージを指します.代わりにthe last build/tag that ran without a specific tag/version specified "If you push a new image with a tag which is neither empty nor ‘latest’,
:latest
will not be affected or created. – Vladislav Supalov
イメージタグ付けとバージョン管理
イメージタグを省略するときには注意する必要があります.ここでは、画像にバージョンを行うことができますし、また
:latest
タグは、最新のイメージの直感的な概念と一致します.以前に作成した(バージョン1 )イメージを
:v1
使用 docker tag
command :docker tag analythium/correlation analythium/correlation:v1
リストと確認:latest
は:v1
イメージIDが一致するためです.REPOSITORY TAG IMAGE ID
analythium/correlation v2 9d98df8ea853
analythium/correlation latest 90732201668c
analythium/correlation v1 90732201668c
今すぐタグなしでイメージを再構築する(これはキャッシュのために迅速にする必要があります)、これは新しいイメージを作る:latest
. 新しいバージョンとして最新のイメージをタグ付けします.docker build -f Dockerfile-v2 -t analythium/correlation .
docker tag analythium/correlation analythium/correlation:v2
リストを再度確認します:latest
イメージIDマッチ:v2
:REPOSITORY TAG IMAGE ID
analythium/correlation latest 9d98df8ea853
analythium/correlation v2 9d98df8ea853
analythium/correlation v1 90732201668c
新しいイメージをテストしますdocker run -p 4000:3838 analythium/correlation
訪問 http://localhost:4000/
相関変数の3 Dレンダリングで再生するには、次の手順に従います.これらのイメージをレジストリにプッシュします.
docker push analythium/correlation
docker push analythium/correlation:v1
docker push analythium/correlation:v2
アプリケーションを更新します
この小さなDocker迂回の後、我々は最新のタグがバージョン2を意味するので、我々はShinyProxyのアプリケーションを更新するために追跡しています:
ssh
rootユーザとしてShinyProxyサーバにdocker pull analythium/correlation:latest
あなたのイメージをversioningすることは、良い実行と考えられます.何か予期しないことが起こるとき、あなたは変化をロールバックすることができるように、それは多くの感覚を作ります.
あなたのイメージを慎重にタグ付けし、ローカルのアプリをテストする場合は、使用することができます
:latest
多くのトラブルなしであなたのShinyProxy構成のイメージタグ.また、ロールバックすることができます:v1
予想外の何かが起こるならば、あなたは設定を変えなければならなくて、このケースでサービスを再開しなければなりません.更新複数の既存のアプリ
複数のアプリケーションがある場合は、それぞれの最新バージョンをプルする必要があります.スクリプトを使用したり、次の1ライナーを使用して、ホスト上のすべてのDockerイメージを更新します.
docker images |grep -v REPOSITORY|awk '{print $1":"$2}'|xargs -L1 docker pull
時々、あなたはremove dangling images with docker image prune -f
. ダングリングイメージは、タグ付けされていないものであり、最新の画像で使用されない可能性のある任意のコンテナ、つまり中間層などで参照されません.これらは時間をかけて蓄積し、スペースを取ることができます.cronジョブを追加
定期的にサーバー上の画像を更新するcronジョブを設定することができます.ラン
crontab -e
root権限でcronユーティリティにアクセスできます.エディタを選択するnano
) そうしなければ、これらの行をファイルの一番下に追加して保存します.# Cleanup at 3:00am every Sunday
0 3 * * 0 docker image prune -f
# Update all images at 1:00am every day
0 1 * * * docker images |grep -v REPOSITORY|awk '{print $1":"$2}'|xargs -L1 docker pull
設定をチェックcrontab -l
.cronジョブは更新のポーリングタイプを表します.これは定期的に更新をチェックしています.一方、画像への変更がまれであれば、一定のポーリングの必要はない.一方、cron間隔を大きく設定すると、重要な更新が失われる可能性があります.
これを念頭に置いて更新の周波数を選択します.既存のアプリや画像のwebhooksはconsidered a better alternative to polling , webhooksは私がここでカバーしていない少し多くの仕事を必要とするが.
結論
あなたのShinyProxyサーバーの既存のアプリケーションを更新する簡単です.あなたは、一度にすべての既に展開されたアプリケーションを更新するだけで1つのコマンドです-あなたのユーザーに混乱はありません.アプリを開く次のユーザーが更新されたバージョンが表示されます.しかし、タグ付けや注意してくださいあなたのイメージを不要な驚きを避けるために.
更なる読書
Reference
この問題について(既存の光沢のあるアプリを更新する), 我々は、より多くの情報をここで見つけました https://dev.to/analythium/update-existing-shiny-apps-in-shinyproxy-5aahテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol