NodeJSアプリサービスのDockerImageビルドとECRへプッシュする自動化について


この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。

概要

プロジェクトでNode.jsを利用して作成したAPIサービスをDockerとしてAWSのEC2に運用するような要求ですし、サービスのDockerImageはAWSのECR(Elastic Container Repository)に管理することを求めています。サービスのDockerImage作成とECRへのプッシュサンプルソースをこちらでメモいたします。

DockerFileの作成

Docker は Dockerfile に書かれた命令を読み込み、自動的にイメージを構築します。 Dockerfile はイメージを構築するために必要な全ての命令を、順番通りに記述したテキストファイルです。

FROM mhart/alpine-node:12

LABEL maintainer="google@gmail.com"

ENV APP_ROOT /app_name/
WORKDIR $APP_ROOT

RUN apk update
# copy necessary files
COPY . #APP_ROOT
RUN yarn install --prod

EXPOSE 3000

CMD ["yarn","server"]

Docker-Composeでイメージをビルドする

Docker-Composeにおいては YAML ファイルを使ってアプリケーションサービスの設定を行います。コマンドを1つ実行するだけで、設定内容に基づいたアプリケーションサービスの生成、起動を行います

version: '3'
services:
  app_name:
    container_name: app_name
    image: {awsAcountID}.dkr.ecr.ap-northeast-1.amazonaws.com/{RepositoryName}:$AppImg_Tag
    restart: always
    network_mode: "host"
    logging:
      driver: "json-file"
    volumes:
      - /var/log:/app_name/logs/

ビルドを自動化するシェル

docker-build.shファイルを作成して、"sh docker-build.sh AppImg_Tag"を叩くと、DockerImage作成とECRへのプッシュを自動化されること。

#!/bin/sh
# imput the image tag when run the build shell
export AppImg_Tag=${1:?"One param is needed Please input tag version!"}

# use the docker compose file to build docker image
compose_yml=./docker-compose.yml

# docker image build
docker-compose -f $compose_yml build --no-cache source_controller

# register docker image into ECR
aws ecr get-login-password | docker login --username AWS --password-stdin {AWSAccountID}.dkr.ecr.ap-northeast-1.amazonaws.com
docker push {AWSAccountID}.dkr.ecr.ap-northeast-1.amazonaws.com/{RepositoryName}:$AppImg_Tag
Last modified: 2024-02-05

Author