コンテナーを利用した R 言語の開発
前提条件
R 言語アプリケーションのコンテナー化 を完了していること。
概要
本節ではコンテナー化したアプリケーションに対する開発環境の構築方法を学びます。 ここでは以下を行います。
- ローカルデータベースを追加して、そのデータを維持します。
- Compose の設定を通じて、コード編集および保存とともに、実行中の Compose サービスが自動的に更新されるようにします。
サンプルアプリケーションの入手
サンプルアプリケーションを入手するため、新たなリポジトリをクローンすることが必要です。 この中に、データベースに接続するためのロジックが含まれています。
リポジトリのクローンを行うディレクトリに移動して、以下のコマンドを実行します。
$ git clone https://github.com/mfranzon/r-docker-dev.git
データベース利用のためのアプリケーション設定
Shiny アプリケーションとローカルデータベースの間の接続を実現するため、Dockerfile
内の COPY
命令を修正する必要があります。
-COPY src/ .
+COPY src_db/ .
ローカルデータベースの追加とデータ維持
コンテナーにおいては、データベースなどのローカルサービスを設定します。
本節では compose.yaml
ファイルを修正してデータベースサービスを定義し、データを維持するためのボリュームも定義します。
クローンを行ったリポジトリのディレクトリにある compose.yaml
ファイルを IDE またはテキストエディターで開きます。
compose.yaml
ファイルでは、データベース設定を行うためのプロパティ記述がコメント化されているので、コメントを解除します。
You must also mount the database password file and set an environment variable on the shiny-app
service pointing to the location of the file in the container.
The following is the updated compose.yaml
file.
services:
shiny-app:
build:
context: .
dockerfile: Dockerfile
ports:
- 3838:3838
environment:
- POSTGRES_PASSWORD_FILE=/run/secrets/db-password
depends_on:
db:
condition: service_healthy
secrets:
- db-password
db:
image: postgres
restart: always
user: postgres
secrets:
- db-password
volumes:
- db-data:/var/lib/postgresql/data
environment:
- POSTGRES_DB=example
- POSTGRES_PASSWORD_FILE=/run/secrets/db-password
expose:
- 5432
healthcheck:
test: ["CMD", "pg_isready"]
interval: 10s
timeout: 5s
retries: 5
volumes:
db-data:
secrets:
db-password:
file: db/password.txt
メモ
Compose ファイル内の命令に関する詳細は Compose ファイルリファレンス を参照してください。
Before you run the application using Compose, notice that this Compose file specifies a password.txt
file to hold the database's password. You must create this file as it's not included in the source repository.
In the cloned repository's directory, create a new directory named db
and inside that directory create a file named password.txt
that contains the password for the database. Using your favorite IDE or text editor, add the following contents to the password.txt
file.
mysecretpassword
Save and close the password.txt
file.
You should now have the following contents in your r-docker-dev
directory.
├── r-docker-dev/
│ ├── db/
│ │ └── password.txt
│ ├── src/
│ │ └── app.R
│ ├── src_db/
│ │ └── app_db.R
│ ├── requirements.txt
│ ├── .dockerignore
│ ├── compose.yaml
│ ├── Dockerfile
│ ├── README.Docker.md
│ └── README.md
Now, run the following docker compose up
command to start your application.
$ docker compose up --build
Now test your DB connection opening a browser at:
http://localhost:3838
以下のようなポップアップメッセージが表示されます。
DB CONNECTED
端末画面から ctrl
+c
を押下してアプリケーションを停止します。
サービスの自動更新
Use Compose Watch to automatically update your running Compose services as you edit and save your code. For more details about Compose Watch, see Use Compose Watch.
compose.yaml
ファイルの 15 行めから 18 行めに記述されているプロパティは、カレントワーキングディレクトリ内にあるファイルに変更があった場合に、Docker に対してイメージの再ビルドを指示するものです。
|
|
Run the following command to run your application with Compose Watch.
$ docker compose watch
Now, if you modify your app.R
you will see the changes in real time without re-building the image!
端末画面から ctrl
+c
を押下してアプリケーションを停止します。
まとめ
In this section, you took a look at setting up your Compose file to add a local database and persist data. You also learned how to use Compose Watch to automatically rebuild and run your container when you update your code.
関連情報
次のステップ
In the next section, you'll take a look at how to set up a CI/CD pipeline using GitHub Actions.