私のdockerエッセイ16:特定のnodejsイメージを構築する


一、背景
あるネットユーザーはブロックチェーン取引の項目をテストする必要があります.テストスクリプトはnodejs環境で実行する必要があります.スクリプトはserver.jspackage.jsonで、主にweb3に依存しています.テストを便利にするために、より良い解決策はdockerを利用して環境を構築することです.本論文はuuntu 16.04で実験を行った.
二、試してみます
dockerにはすでにnodejsのオフィシャルコンテナがあります.最新バージョンは10.5.0です.直接使用コマンド:
docker pull node:alpine
鏡像を引き出すことができます.予備.注:ミラーの体積を節約するために、alpineバージョンを使用します.
Docerfileファイルを作成します.内容は以下の通りです.
FROM node:alpine
 
# Create app directory
RUN mkdir -p /home/Service
WORKDIR /home/Service
 
# Bundle app source
COPY . /home/Service
RUN npm install
 
CMD [ "npm", "start" ]
Docerfileの最後の行は、コンテナを起動する時にnpm startコマンドを実行することを表しています.このコマンドは自動的にserver.jsファイルを探します.他の名前の場合は修正が必要です.ここでは取り上げません.server.jsおよびpackage.jsonの両ファイルは、Docerfileと同じディレクトリである.コマンドを使う
docker build -t mynode .
dockerのミラーを構築します.注:-t mynodeは、構築後のイメージ名を表し、docker imagesで確認できる.
しかし、構築に失敗しました.ヒントは以下の通りです.
Step 5/6 : RUN npm install
 ---> Running in f99a9f66b07d
npm WARN deprecated [email protected]: Use mz or fs-extra^3.0 with Promise Support
npm WARN deprecated [email protected]: ⚠️  WARNING ⚠️ tar.gz module has been deprecated and your application is vulnerable. Please use tar module instead: https://npmjs.com/tar
npm ERR! code ENOGIT
npm ERR! Error while executing:
npm ERR! undefined ls-remote -h -t git://github.com/frozeman/WebSocket-Node.git
npm ERR! 
npm ERR! undefined
npm ERR! No git binary found in $PATH
npm ERR! 
npm ERR! Failed using git.
npm ERR! Please check if you have git installed and in your PATH.
前のエラー情報から見れば、Promiseとweb 3バージョンに問題があると思います.package.jsonファイルを調べたら、web 3バージョンは1.0.0-beta.34で、最新バージョンになりました.Promiseも大丈夫です.読み間違えて、コンテナにgitがないように注意します.別の考えを変えて、まずnode:alpineの容器の中に入って、更に手動でnpm startを呼び出します.起動容器コマンド:
docker run -it -v /home:/home node:alpine sh
-v/home:/homeはホストの/homeディレクトリを容器に載せる/homeディレクトリを示しています.テストしやすいです.結果は古いようです
三、nodejsバージョンを交換する.
後に友達とnodejsバージョンが8.11.2であることを確認しましたが、dockerhubには8.11.3しかありません.まずバージョンの問題を確認して、ミラーを引き出します.
docker pull node:8.11.3-alpine
このようなやり方ですが、依然として間違いがあります.問題はここではありません.(注:これは当時の問題解決の過程を記録するためだけです)
四、考え方を変え続けます.
問題の原因に戻りますが、gitはインストールされていません.従って、uuntuミラーを使用することを考慮したが、このミラーは、gitをインストールする必要があり、次に、ローカルホストでnodejs依存パケットをダウンロードすることを考慮する.server.jsディレクトリで実行:
npm install
インストール過程に問題があることを発見しました.
五、nodeを更新する
更新コマンド:
npm install npm@latest -g
n stable
六、nodejsを更新する
nodejsバージョンを調べます.
$ nodejs -v
v4.2.6
アンマウント
$ sudo apt remove nodejs
新規ファイル:/etc/appt/sources.list.d/nodesource.list、このファイルに書き込み:
deb https://deb.nodesource.com/node_6.x xenial main
deb-src https://deb.nodesource.com/node_6.x xenial main
ファイルを保存します.gpg keyをダウンロードします.
curl -s https://deb.nodesource.com/gpgkey/nodesource.gpg.key | sudo apt-key add -
更新元:
sudo apt-get update
nodejsの代替バージョンを調べます.
sudo apt-cache policy nodejs
nodejs:
  Installed: 6.14.3-1nodesource1
  Candidate: 6.14.3-1nodesource1
  Version table:
 *** 6.14.3-1nodesource1 500
        500 https://deb.nodesource.com/node_6.x xenial/main amd64 Packages
        100 /var/lib/dpkg/status
     4.2.6~dfsg-1ubuntu4.1 500
        500 http://mirrors.cloud.aliyuncs.com/ubuntu xenial-updates/universe amd64 Packages
     4.2.6~dfsg-1ubuntu4 500
        500 http://mirrors.cloud.aliyuncs.com/ubuntu xenial/universe amd64 Packages
インストールnodejs:
sudo apt-get install nodejs
nodejsバージョンを調べます.
nodejs -v
v6.14.3
七、続けてみます
node、nodejsを更新したら、ホストのserver.jsディレクトリで実行します.
npm install
取り付けの依存カバンはnode_に保存します.modulesディレクトリの下です.npm startを実行すると、正常な運転結果が見られます.依存パッケージが完全にインストールされたということです.
八、包装dockerserver.js依存のためのカバンはnode_にあります.modulesディレクトリの下で、このディレクトリを先にミラーの/home/Serviceディレクトリに包装して、それをベースミラーとして、server.jspackage.jsonをホーム/Serviceディレクトリにコピーすると、docker環境の構築ができます.Docerfileの内容は前の面とほぼ同じです.構築されたdockerのミラーは使えます.
docker pull latelee/node
引き取る
本論文で試みた方法と考え方は参考にしてください.