誰にも見えないブログ

雑なメモ。まとまってない文章等

dockerチュートリアル2:イメージのビルドと実行

続きです

yuyubu-sub.hateblo.jp

開発フロー

https://docs.docker.com/get-started/part2/

  • 一般的なdockerの開発フロー
    • 1.各アプリケーションのコンポーネントのcontainerを作成・テストする
    • 2.必要な各containerとインフラを組み合わせてアプリケーションを作る
    • 3.コンテナ化されたアプリケーションをテスト、共有、展開する
  • 今回のチュートリアルでは1に着目する
    • containerのベースになるimageを作成する
      • 各containerはproccessであり、ファイルシステムは分離されている
        • imageにapplicationが必要なフィアルを含める必要がある
  • applicationの依存は全てcontainerで解決するのでhost環境にはdockerさえあれば良い
  • Node.jsのサンプルアプリケーション(掲示板)のcontainer化を試す
git clone https://github.com/dockersamples/node-bulletin-board
cd node-bulletin-board/bulletin-board-app

build

  • Dockerfile
    • 中のfile構成をどうするか、というのをDockerfileというものに書く
      • memo: Dockerfiles describe how to assemble a private filesystem for a container→private file systemをアセンブルする?という表現が謎。file構成を決定する、程度の日本語訳だと思うが。s
FROM node:current-slim

WORKDIR /usr/src/app
COPY package.json .
RUN npm install

EXPOSE 8080
CMD [ "npm", "start" ]

COPY . .
  • コマンド解説

    • FROM:ベースになるimageを取得してくる
      • node:current-slimはnodeの公式のものらしい。
    • WORKDIR:後続のコマンドの実行等を実行する場所を指定する
      • もちろんhost側ではなくimage側のdirectoryである
    • COPY:imageにファイルをコピーする
    • RUN:ビルド時に実行されるコマンド
    • EXPOSE:hostと通信するportを書く
    • CMD:コンテナ化時に実行されるコマンド
  • 一般的にFROMから書き始めるのがお作法的に良いとされている。((What you see above is a good way to organize a simple Dockerfile; always start with a FROM command, follow it with the steps to build up your private filesystem, and conclude with any metadata specifications. ))

    • 弊社で使ってるDockerなどもそうなっていた
  • build

docker image build -t bulletinboard:1.0 .
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN vue-event-bulletin@1.0.0 No repository field.
npm WARN The package morgan is included as both a dev and production dependency.

実行

docker container run --publish 8000:8080 --detach --name bb bulletinboard:1.0