🌊
【Docker/ECR/ECS】 コンテナ入門まとめ②
前後編
#参考文献
- 【AWS】初めてのECR
- イメージのプッシュ
- AWS CLI の設定
- 既存のRailsアプリにDockerを導入する手順
- 既存のrailsプロジェクトをDockerで開発する手順
- Debianのdockerイメージでmysql-clientが無くてハマった人へ
- Dockerfile 記述のベストプラクティス
- database.yml の管理方法いろいろ
1. Dockerfile
◆ mysql-client問題
- Debian10 "buster"(Ubuntuの母らしい)では、"mysql-client"は存在しない
- "default-mysql-client"パッケージを使用する必要がある
Dockerfile
FROM ruby:2.6.5 ※GemfileのRubyバージョン要確認
RUN apt-get update && apt-get install -y nodejs --no-install-recommends && rm -rf /var/lib/apt/lists/*
RUN apt-get update && apt-get install -y default-mysql-client --no-install-recommends && rm -rf /var/lib/apt/lists/*
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
RUN mkdir /app ※アプリケーション名
WORKDIR /app
ADD Gemfile /app/Gemfile
ADD Gemfile.lock /app/Gemfile.lock
RUN bundle install
ADD . /app
2. docker-compose.yml
◆ ビルドコンテキストについて
- docker build実行時の"カレントディレクトリ"を指定する
- デフォルトでは、Dockerfileが"カレントディレクトリ"と認識される
version: '2'
services:
db:
image: mysql:latest
environment:
MYSQL_DATABASE: データベース名
MYSQL_ROOT_PASSWORD: XXXXXXX
MYSQL_USER: ユーザ名
MYSQL_PASSWORD: XXXXXXX
ports:
- "3306:3306"
web:
build:
context: .
dockerfile: Dockerfile
command: bundle exec rails s -p 3000 -b '0.0.0.0'
tty: true
stdin_open: true
depends_on:
- db
ports:
- "3000:3000"
volumes:
- .:/app ※アプリケーション名
3. database.yml
◆ 環境変数について
password: <%= ENV['DOCKER_DATABASE_PASSWORD'] %>
$ export DOCKER_DATABASE_PASSWORD=password ※パスワード
database.yml
default: &default
adapter: mysql2
encoding: utf8
pool: 5
host: db
development:
<<: *default
username: ユーザ名
password: XXXXXXX
database: データベース名
production:
<<: *default
database: データベース名
username: ユーザ名
password: <%= ENV['DOCKER_DATABASE_PASSWORD'] %>
4. ECRプッシュ作業
AWS CLI設定 ※AWSマネジメントコンソール"マイセキュリティ資格情報"参照
$ aws configure --profile ecr
AWS Access Key ID [None]: ***********************
AWS Secret Access Key [None]: *************************
Default region name [None]: ap-northeast-1
Default output format [None]: json
ECRログインコマンド
$ aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin ***.ecr.ap-northeast-1.amazonaws.com
イメージ作成
$ docker build -t 【イメージ名】 .
タグ付け
$ docker tag イメージ名:タグ名 ***.dkr.ecr.ap-northeast-1.amazonaws.com/イメージ名:タグ名
プッシュコマンド
$ docker push ***.dkr.ecr.ap-northeast-1.amazonaws.com/イメージ名:タグ名
Discussion