web-dev-qa-db-ja.com

Docker構成実行糸インストール

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
4
jj-aa

最初に、Dockerfileに応じてイメージを作成します。

  1. 画像Ruby:2.5を取得して、そこから新しい画像を作成します
  2. すべての依存関係をインストールする
  3. フォルダを作成/app
  4. すべてのファイルをシステム(プロジェクトディレクトリ)からイメージの/appパスにコピーします
  5. yarnおよびbundleをインストールします(イメージ内のメソッドを呼び出します)

その後、プロジェクトフォルダーをイメージの/appフォルダーに「マウント」するため、システムのルートフォルダーと同じになります。その後、コンテナを「生成」し、Dockerファイル(存在する場合)からCMDコマンドを実行します。

これはイメージ/コンテナー生成フローの詳細な説明ではありませんであることを考慮に入れてください。問題。だからあなたはできる

  1. コンテナーから直接コードを実行します(Dockerfileで行ったように)
  2. または(docker-compose.ymlで行ったように)ソースコードをコンテナーにコピーしてボリュームとしてマウントし、システムで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フォルダーが(システム内の)プロジェクトフォルダーになるコンテナーを作成します。そのため、コードの変更はすぐに反映されます。

7