AWS ECSサービスを構築しよう(その1)

Redmine4.2と,依存関係でDBが必要なので,mariaDB(10.11.2)(MySQL系)2つのdockerコンテナを作成します。Redmineコンテナ起動後にwebhookというpluginをインストール,更にDBをRDS(mySQL)に変更後,作成したコンテナからイメージを作成し,ECRに登録します。そのイメージからECSサービスをデプロイします。今回は,ECRに登録するイメージを作成するまでの手順です。

1. 利用するAWSのリソースと作成するシステム構成図

             図A システム構成図

2. Docker環境構築

EC2(図AのDockerコンテナ)にdocker,docker-composeをインストールして,dockerが動作する環境を構築します。
#Dockerのインストール
sudo yum install -y docker
sudo systemctl start docker
sudo usermod -a -G docker ec2-user
#自動起動を有効にする
sudo systemctl enable docker
#docker-composeのインストール
sudo curl -L https://github.com/docker/compose/releases/download/1.28.5/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose  ←一行です
sudo chmod +x /usr/local/bin/docker-compose

#Docker Composeが使用できるか確認
/usr/local/bin/docker-compose --version
docker-compose version 1.28.5, build c4eb3a1f

コマンド docker ps とすると以下のメッセージ出力
#Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containe
rs/json": dial unix /var/run/docker.sock: connect: permission denied
###対策 dockerグループにec2-userを追加
sudo usermod -g docker ec2-user

3. docker-compose.ymlファイルを作成して、docker コンテナを作成

作成するコンテナの設計図ですね。今回は,redmineとそのDBのコンテナを作成して,webhookというPluginを入れ、更にDBをRDS(Mysql)に変更します。
version: '3.8'
services:
  redmine:
    image: redmine:4.2
    container_name: redmine
    ports:
      - 80:3000
    environment:
      REDMINE_DB_MYSQL: redmine-db
      REDMINE_DB_PASSWORD: xxxxxx
    depends_on:
      - redmine-db
    restart: always

  redmine-db:
    image: mariadb
    container_name: redmine-db
    ports:
      - 3306:3306
    environment:
      MYSQL_ROOT_PASSWORD: xxxxxx
      MYSQL_DATABASE: redmine
    volumes:
      - ./data/db:/var/lib/mysql
    command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci
    restart: always

4. Docker コンテナの作成と起動

docker-compose.ymlファイルのあるディレクトリで以下のコマンドを実行します。完了したら,docker ps -a コマンドで動作しているかどうか確認します。
sudo su
cd /usr/local/src/redmine
/usr/local/bin/docker-compose  up -d
$ docker ps -a
CONTAINER ID   IMAGE         COMMAND                  CREATED         STATUS         PORTS                                       NAMES
9e7f0be2bc5b   redmine:4.2   "/docker-entrypoint.…"   7 seconds ago   Up 5 seconds   0.0.0.0:80->3000/tcp, :::80->3000/tcp       redmine
3cd27d886b4f   mariadb       "docker-entrypoint.s…"   8 seconds ago   Up 6 seconds   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp   redmine-db

docker コンテナが作成されて起動されているのがわかります。Webでアクセスして確認しましょう。アドレスは、EC2のグローバルアドレスです。http://xx.xx.xx.xx/ログイン出来ればOKです。
               図B redmineログイン画面

5. webhook pluginをコンテナにインストール

作成したコンテナ(図AのDockerコンテナ)にwebhookというpluginをインストールします。
#Docker コンテナの中に入ります
docker container exec -it redmine bash
# pluginsディレクトリに移ります
root@f3baf480c406:/usr/src/redmine# cd plugins/
root@f3baf480c406:/usr/src/redmine/plugins# git clone https://github.com/suer/redmine_webhook.git ← 一行
root@f3baf480c406:/usr/src/redmine/plugins#  cd redmine_webhook
root@f3baf480c406:/usr/src/redmine/plugins/redmine_webhook# bundle install
rake redmine:plugins:migrate RAILS_ENV=production
#docker コンテナから抜けます
root@f3baf480c406:/usr/src/redmine/plugins/redmine_webhook# exit

redmine コンテナを再起動します。
docker stop redmine
docker start redmine
ブラウザでアクセスして、管理タブをクリックプラグインが表示されればOKです。
            図C webhook pluginインストール後

6. RDSと接続

privateサブネットに作成したRDS(Mysql)に接続させるように変更していきます。
#database接続定義(database.yml)の作成

production:
  adapter: "mysql2"
  host: "databasexxx.xxxxxx.ap-northeast-1.rds.amazonaws.com"
  port: "3306"
  username: "Admin"
  password: "xxxxxx"
  database: "redmine_db"

database.ymlをdockerコンテナ内にコピー
sudo docker cp database.yml redmine:/usr/src/redmine/config/

#redmine  migrate実行
#docker コンテナ内部に入ります
docker container exec -it redmine bash
/usr/src/redmin/# bundle exec rake generate_secret_token
/usr/src/redmine# bundle exec rake db:migrate RAILS_ENV=production
これで,ECSサービスとして起動可能なredmineコンテナが作成できました。
このコンテナを利用してECRに登録するimageを作成します。

7. ECR登録用のイメージ作成

作成したDockerコンテナからECRに登録するイメージを作成します。
#コンテナからイメージの作成
$ docker commit redmine redminesql

#イメージの確認
$ docker images
REPOSITORY        TAG       IMAGE ID       CREATED         SIZE
redminesql        latest    304ab9ccde49   8 seconds ago   554MB
fortune-whale     latest    0df1bdab20e2   2 days ago      280MB
redmine           4.2       d4ea63462562   2 days ago      531MB
mariadb           latest    4a632f970181   2 weeks ago     401MB
docker/whalesay   latest    6b362a9f73eb   7 years ago     247MB
これで登録するdockerのイメージが作成できました。次回は、ECRにログインしてimageの登録,ECSのデプロイ,ECSタスクの実行する手順です。