alpineの作成の最小のdockerのミラー像

4690 ワード

dockerを使ってサービスを実行して、あなたは一致した環境を持つことができて、正確にサービスの運行の資源(cpu、メモリ)を制御することができて、便利な設定のポートとネット、鏡像の倉庫管理とコードを配布することができます.今はますます多くの開発者がサービスをdockerに実行することを選択しています.
多くのnodejsユーザーがdockerを使う時、直接デフォルトのnodeイメージを使いました.でも大きすぎると思いませんか?今node:6.10.1ミラーの体積はすでに666 Mに達しました.実は同じ機能を実現するには43.5 Mだけで十分です.サイズが小さいということは、より低いリソース消費、より速いダウンロード速度、より小さい伝送帯域幅を意味する.ここでは、簡単なノドミラーを作成する方法を紹介します.
FROM:alpineベースミラーを設定します.
現在、dockerの下で一番軽い操作システムはalpineで、一つのalpineの体積は5 M未満です.nodeのデフォルトのミラー依存の基礎ミラーはdebianで、debian:jessieは体積が123 Mを打ったので、サイズを小さくしたいです.まず基礎ミラーからalpineに切り替えます.
FROM alpine:3.5
RUN:nodeユーザを設定する
adduser -D -u 1000 node
nodeを設定するユーザは任意です.ユーザーを追加してから、実行容器でnodeユーザを指定できるアイデンティティ実行サービスです.
RUN:nodeコンパイルツールのインストール
apk add --no-cache \
    libstdc++ \
&& apk add --no-cache --virtual .build-deps \
    binutils-gold \
    curl \
    g++ \
    gcc \
    gnupg \
    libgcc \
    linux-headers \
    make \
    python 
  • appk add--no-cacheはローカルキャッシュを使用してパケットデータベースをインストールしないで、直接に遠隔からインストールパッケージ情報のインストールを取得します.これで私達はappudateでインストールパッケージデータベースを取得する必要がなくなりました.
  • app add-virtual.build-depsは、今回インストールしたすべてのパケットを.build-depsという仮想パケットにパッケージ化します.このようにする利点は、これらのパケットをappdel.build-depsのキーでクリアすることができる
  • である.
    RUN:nodeのソースパッケージを導入する公開鍵
    for key in \
        9554F04D7259F04124DE6B476D5A82AC7E37093B \
        94AE36675C464D64BAFA68DD7434390BDBE9B9C5 \
        FD3A5288F042B6850C66B31F09FE44734EB7990E \
        71DCFD284A79C3B38668286BC97EC7A07EDE3FC1 \
        DD8F2338BAE7501E3DD5AC78C273792F7D83545D \
        B9AE9905FFD7803F25714661B63B535A4C206CA9 \
        C4F0DFFF4E8C1A8236409D08E73BC641CC11F4C8 \
        56730D5401028683275BD23C23EFEFE93C4CFFFE \
    ; do \
    gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; \
    done
    
    これらの公開鍵は、curlを通じてダウンロードされたnodejsソースファイルを検証するために使用されます.
    RUN:ダウンロードとnode検査のソースファイル
    curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION.tar.xz" \
    && curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc" \
    && gpg --batch --decrypt --output SHASUMS256.txt SHASUMS256.txt.asc \
    && grep " node-v$NODE_VERSION.tar.xz\$" SHASUMS256.txt | sha256sum -c -
    
  • ドルのNODE_VERION:nodeバージョン、例えば6.10.1
  • RUN:コンパイルインストールnode
    tar -xf "node-v$NODE_VERSION.tar.xz" \
    && cd "node-v$NODE_VERSION" \
    && ./configure \
    && make -j$(getconf _NPROCESSORS_ONLN) \
    && make install 
    
  • npmが必要でない場合は、第3の動作を置き換えることができます.
  • ドルのNODE_VERION:nodeバージョン、例えば6.10.1
  • RUN:クリーンアップ
    apk del .build-deps \
    && cd .. \
    && rm -Rf "node-v$NODE_VERSION" \
    && rm "node-v$NODE_VERSION.tar.xz" SHASUMS256.txt.asc SHASUMS256.txt
    
  • ドルのNODE_VERION:nodeバージョン、例えば6.10.1
  • CMD:ミラーの入り口を設定してnodeです.
    CMD [ "node" ]
    
    上はnodejsミラーを作成するためにステップが必要です.下の手順は必要に応じて追加します.
    yarnをインストール
  • インストール依存apped--no-cache--virtual.build-deps-yarn curl gnup
  • 公開鍵を導入する
  • for key in \
    6A010C5166006599AA17F08146C2130DFD2497F5 \
    ; do \
      gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; \
    done
    
  • ダウンロード検証
  •  curl -fSL -o yarn.js "https://yarnpkg.com/downloads/$YARN_VERSION/yarn-legacy-$YARN_VERSION.js" \
     && curl -fSL -o yarn.js.asc "https://yarnpkg.com/downloads/$YARN_VERSION/yarn-legacy-$YARN_VERSION.js.asc" \
     && gpg --batch --verify yarn.js.asc yarn.js \
     && rm yarn.js.asc
    
    $YARN_VERSION:  yarn  , 0.22
    
  • インストール
  • mv yarn.js /usr/local/bin/yarn \
    && chmod +x /usr/local/bin/yarn \
    
  • .appdel.build-deps-yarn
  • を整理します.
    c++プラグイン
    c+++プラグインをサポートするには、python、make、g++をインストールする必要があります.
    apk add --no-cache python make g++
    
    headersファイル
    一部のc++モジュールの使用中にもnode-headersファイルをダウンロードする必要があります.node-headersファイルは国内でダウンロードするのは不安定です.ミラーに統合することをお勧めします.そうしないと、コンパイルの長い間動かない状況に会うかもしれません.
  • nodejsのソースコードを参照して、検査手順をダウンロードし、headersファイルをダウンロードして、curl-SLOをチェックします.https://nodejs.org/dist/v N O_D E V_E R_I O N/n o d e−v NODE_V ERSION/node−v{NODE VERRSION}−headers.tar.xz”
  • headersファイルをインストールする
  • mkdir /root/.node-gyp
    tar --strip-component 1 -xzf node-v${NODE_VERSION}-heraders.tar.xz /root/.node-gyp/$NODE_VERSION
    rm -rf node-v${NODE_VERSION}-headers.tar.xz
    $NODE_VERSION:  node  , 6.10.1
    
    結論としては、最小のdockerのミラー像を作成するのは簡単で意義があります.