Docker-composeビルドコマンド中にDockerfileでステップRUNヤーンインストールを実行すると、次のようになります。
[1/4]パッケージを解決しています... [2/4]パッケージを取得しています... info [email protected]:プラットフォーム「linux」はこのモジュールと互換性がありません。 info "[email protected]"はオプションの依存関係であり、互換性チェックに失敗しました。インストールから除外します。 [3/4]依存関係をリンクしています...警告 "@ Rails/webpacker> [email protected]"には、満たされていないピア依存関係 "caniuse-lite@^1.0.30000697"があります。警告 "> [email protected]"には、満たされていないピア依存関係 "webpack@^2.2.0 || ^ 3.0.0"があります。警告 "webpack-dev-server> [email protected]"には、満たされていないピア依存関係 "webpack@^1.0.0 || ^ 2.0.0 || ^ 3.0.0"があります。 [4/4]新しいパッケージをビルドしています...
しかし、node_modulesフォルダーは作成されません。一方、走ると
docker-compose run SERVICE_NAME yarn install
私は得ます:
[1/4]パッケージを解決しています... [2/4]パッケージを取得しています... info [email protected]:プラットフォーム「linux」はこのモジュールと互換性がありません。 info "[email protected]"はオプションの依存関係であり、互換性チェックに失敗しました。インストールから除外します。 [3/4]依存関係をリンクしています...警告 "@ Rails/webpacker> [email protected]"には、満たされていないピア依存関係 "caniuse-lite@^1.0.30000697"があります。警告 "> [email protected]"には、満たされていないピア依存関係 "webpack@^2.2.0 || ^ 3.0.0"があります。警告 "webpack-dev-server> [email protected]"には、満たされていないピア依存関係 "webpack@^1.0.0 || ^ 2.0.0 || ^ 3.0.0"があります。 [4/4]新しいパッケージをビルドしています...
ただし、フォルダnode_modules IT ISプロジェクトフォルダに作成されます。
なぜなのかわからない...同じ機能を期待していますが、何か不足しています。
ここに私のdocker-composeサービス
services:
Ruby:
build:
context: .
dockerfile: docker/Ruby/Dockerfile
networks:
- some-network
volumes:
- .:/app
ports:
- "3000:3000"
depends_on:
- mysql
command: bundle exec Rails s -p 3000 -b '0.0.0.0'
Dockerfile
FROM Ruby:2.5
# Install dependencies:
# - build-essential: To ensure certain gems can be compiled
# - nodejs: Compile assets
# - npm: Install node modules
# - yarn: Install & manage node modules [should make npm obsolete]
# - libpq-dev
RUN curl -sL https://deb.nodesource.com/setup_8.x | bash - && \
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \
echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \
apt-get update && \
apt-get install -qq -y build-essential nodejs yarn \
libpq-dev \
mysql-client
RUN mkdir /app
COPY . /app
WORKDIR /app
# install node dependencies
RUN yarn install
RUN bundle install
最初に、Dockerfileに応じてイメージを作成します。
Ruby:2.5
を取得して、そこから新しい画像を作成します/app
/app
パスにコピーしますyarn
およびbundle
をインストールします(イメージ内のメソッドを呼び出します)その後、プロジェクトフォルダーをイメージの/app
フォルダーに「マウント」するため、システムのルートフォルダーと同じになります。その後、コンテナを「生成」し、Dockerファイル(存在する場合)からCMD
コマンドを実行します。
これはイメージ/コンテナー生成フローの詳細な説明ではありませんであることを考慮に入れてください。問題。だからあなたはできる
yarn install
を実行するか、インストールコマンドを使用してエントリポイントスクリプトを作成します:entrypoint: ./entrypoint.sh
ファイルの例
ソースファイルを「オンザフライ」で更新する場合(コンテナを再構築せずに更新を確認する場合)、2番目の方法を使用する必要があります。
プロジェクトディレクトリにrun.shファイルを作成します。
run.sh
#!/bin/sh
echo '--- run yarn install'
yarn install
echo '--- run bundle install'
bundle install
# HERE YOU CAN RUN ANY OTHER SCRIPT BEFORE CONTAINER BUILDING
echo '--- create docker image and up it'
Sudo docker-compose up -d --build
docker-compose.yml
変更する必要はありません(質問のようにしてください)。
Dockerfile
FROM Ruby:2.5
# Install dependencies:
# - build-essential: To ensure certain gems can be compiled
# - nodejs: Compile assets
# - npm: Install node modules
# - yarn: Install & manage node modules [should make npm obsolete]
# - libpq-dev
RUN curl -sL https://deb.nodesource.com/setup_8.x | bash - && \
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \
echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \
apt-get update && \
apt-get install -qq -y build-essential nodejs yarn \
libpq-dev \
mysql-client
WORKDIR /app
コンテナをビルドしてアップするにはコマンドを実行するだけ:sh run.sh
システムにノードの依存関係をインストールします。その後、/app
フォルダーが(システム内の)プロジェクトフォルダーになるコンテナーを作成します。そのため、コードの変更はすぐに反映されます。