私のdockerエッセイ16:特定のnodejsイメージを構築する
4328 ワード
一、背景
あるネットユーザーはブロックチェーン取引の項目をテストする必要があります.テストスクリプトはnodejs環境で実行する必要があります.スクリプトは
二、試してみます
dockerにはすでに
Docerfileファイルを作成します.内容は以下の通りです.
しかし、構築に失敗しました.ヒントは以下の通りです.
三、nodejsバージョンを交換する.
後に友達とnodejsバージョンが8.11.2であることを確認しましたが、dockerhubには8.11.3しかありません.まずバージョンの問題を確認して、ミラーを引き出します.
四、考え方を変え続けます.
問題の原因に戻りますが、gitはインストールされていません.従って、uuntuミラーを使用することを考慮したが、このミラーは、gitをインストールする必要があり、次に、ローカルホストでnodejs依存パケットをダウンロードすることを考慮する.server.jsディレクトリで実行:
五、nodeを更新する
更新コマンド:
nodejsバージョンを調べます.
node、nodejsを更新したら、ホストのserver.jsディレクトリで実行します.
八、包装docker
本論文で試みた方法と考え方は参考にしてください.
あるネットユーザーはブロックチェーン取引の項目をテストする必要があります.テストスクリプトはnodejs環境で実行する必要があります.スクリプトは
server.js
、package.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を実行すると、正常な運転結果が見られます.依存パッケージが完全にインストールされたということです.八、包装docker
server.js
依存のためのカバンはnode_にあります.modulesディレクトリの下で、このディレクトリを先にミラーの/home/Serviceディレクトリに包装して、それをベースミラーとして、server.js
とpackage.json
をホーム/Serviceディレクトリにコピーすると、docker環境の構築ができます.Docerfileの内容は前の面とほぼ同じです.構築されたdockerのミラーは使えます.docker pull latelee/node
引き取る本論文で試みた方法と考え方は参考にしてください.