この記事は公開されてから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