0
0

More than 3 years have passed since last update.

コンテナ内でdockerイメージをビルドしてECRにプッシュする

Last updated at Posted at 2021-05-30

ローカルのコンテナ内でdockerのイメージをビルドしてECRにプッシュ

CodeBuildのように、amazonlinuxイメージを使用したコンテナ内でイメージをビルドし、ECRにプッシュできることを確かめます。ディレクトリ構造は以下の通りです。

ディレクトリ構造
.
├── Dockerfile
└── SpringBootProject
    ├── Dockerfile
    ├── build
    ├── build.gradle
    ├── gradle
    ├── build.sh
    ├── gradlew
    ├── settings.gradle
    └── src    

まずはSpringBootProjectをビルドするamazonlinuxのDockerfileです。

Dockerfile
FROM amazonlinux

#AWSCLIのインストール
RUN ["yum","install","-y","unzip"]

RUN ["curl","https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip","-o","awscliv2.zip"]

RUN ["unzip","awscliv2.zip"]

RUN ["/aws/install"]

#dockerのインストール
RUN amazon-linux-extras install -y docker

#プロジェクトディレクトリをコピー
COPY ./SpringBootProject/ /SpringBootProject

#ビルドスクリプトの実行
CMD cd SpringBootProject && ./build.sh

以下はbuild.shです。

build.sh
#!/bin/bash

#AWSの認証情報を環境変数に設定
export AWS_DEFAULT_OUTPUT="yaml"
export AWS_CLI_FILE_ENCODING=UTF-8
export AWS_ACCESS_KEY_ID=#your_access_key_id
export AWS_SECRET_ACCESS_KEY=#your_secret_access_key
export AWS_DEFAULT_REGION=ap-northeast-1
aws sts get-caller-identity --no-paginate --no-cli-pager

#gradleを使う為、JAVA_HOMEを設定
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.282.b08-1.amzn2.0.1.x86_64

#ビルド
/SpringBootProject/gradlew build

#ECRにプッシュ(先にレポジトリを作っておく必要があります。)
aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin account_id.dkr.ecr.ap-northeast-1.amazonaws.com
docker build -t repository_name .
docker tag repository_name:latest account_id.dkr.ecr.ap-northeast-1.amazonaws.com/repository_name:latest
docker push account_id.dkr.ecr.ap-northeast-1.amazonaws.com/repository_name:latest

SpringBootProjectディレクトリ内のDockerfileです。

Dockerfile
FROM amazonlinux

RUN yum install -y java-1.8.0-openjdk-devel.x86_64

COPY /build/libs/SpringBootProject.jar /

コンテナ起動

コンテナ内でDockerを使うことになる為、docker.sockをマウントする必要があります。

https://devopscube.com/run-docker-in-docker/#:~:text=To%20run%20docker%20inside%20docker,sock%20as%20a%20volume.&text=Just%20a%20word%20of%20caution,privileges%20over%20your%20docker%20daemon.

イメージビルド&コンテナ起動
docker build . -t backend
docker run -v /var/run/docker.sock:/var/run/docker.sock -ti backend

-成功-
image.png

本編

実際にCodeBuildでECRにイメージをプッシュしています。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0