概要
前回 Amazon EC2 Container Service (ECS) を使って docker コンテナを 1 つ立ち上げてみました
と同時にサービスの概念 (クラスタやタスク、サービスなど)も説明しました
今回は docker-compose 的なことが ECS でもできる「ecs-cli」というコマンドラインツールを使って複数のコンテナを立ち上げてみました
環境
- Amazon EC2 Container Service (ECS) 2017/01/05 時点
- ecs-cli 0.4.5
- CentOS 7.3.1611
事前準備
特にないです
前回の作業のままでも特に問題ないです
が、この記事では前回作成した ECS 上のリソースはすべて削除してから作業しています
ecs-cli のインストール
作業マシンである CentOS7 上にインストールしましょう
- curl -o /usr/local/bin/ecs-cli https://s3.amazonaws.com/amazon-ecs-cli/ecs-cli-linux-amd64-latest
- chmod +x /usr/local/bin/ecs-cli
ecs-cli の初期化
操作するリージョンとクラスタを指定して初期化します
ecs-cli configure --region ap-southeast-2 --cluster ecs-cli-cluster
cat ~/.ecs/config
config ファイルができていれば OK です
リージョンは ap-southeast-2 を使っています
クラスタ名は自由に決めて OK です、今回は「ecs-cli-cluster」という名前にしました
今回は実施しなかったのですが、前回紹介した AWS CLI での aws configure
で認証ファイルを作成するのは必要かもしれません
クラスタの作成
ECS 上にクラスタとコンテナインスタンスを作成します
ecs-cli up --capability-iam --keypair your_ssh_key
INFO[0001] Created cluster cluster=ecs-cli-cluster
INFO[0002] Waiting for your cluster resources to be created...
INFO[0002] Cloudformation stack status stackStatus="CREATE_IN_PROGRESS"
INFO[0064] Cloudformation stack status stackStatus="CREATE_IN_PROGRESS"
INFO[0125] Cloudformation stack status stackStatus="CREATE_IN_PROGRESS"
INFO[0187] Cloudformation stack status stackStatus="CREATE_IN_PROGRESS"
Cloudformation からクラスタとコンテナインスタンスが作成されます
特に指定はしてませんが、他にもセキュリティグループや VPC に必要なリソースが作成されています
作成完了後にコンソールで確認すると以下のようにクラスタとコンテナインスタンスが作成されています
コンテナの作成と起動
クラスタが作成できたらコンテナを作成し起動します
コンテナを起動するための yml ファイルを作成します
- cat wordpress.yml
vim wordpress.yml
wordpress:
image: wordpress
mem_limit: 268435456
ports:
- "80:80"
links:
- mysql
mysql:
image: mysql
mem_limit: 268435456
environment:
MYSQL_ROOT_PASSWORD: password
docker hub にある wordpress と mysql イメージを使ってコンテナを作成します
wordpress は 80 ポートでバインドします
基本的なフォーマットは docker-compose.yml と同じですが、いくつか使えない構文があるので注意してください
特に「build」が使えないのでイメージは事前に作成して docker hub で公開しておく必要があります
http://docs.aws.amazon.com/AmazonECS/latest/developerguide/cmd-ecs-cli-compose.html
yml ファイルを作成したらコンテナを起動してみましょう
ecs-cli compose --file wordpress.yml up
INFO[0001] Using ECS task definition TaskDefinition="ecscompose-compose:2"
INFO[0001] Starting container... container="8081492f-617a-4072-b03b-c5bf55cf6c2a/mysql"
INFO[0001] Starting container... container="8081492f-617a-4072-b03b-c5bf55cf6c2a/wordpress"
INFO[0001] Describe ECS container status container="8081492f-617a-4072-b03b-c5bf55cf6c2a/wordpress" desiredStatus=RUNNING lastStatus=PENDING taskDefinition="ecscompose-compose:2"
INFO[0001] Describe ECS container status container="8081492f-617a-4072-b03b-c5bf55cf6c2a/mysql" desiredStatus=RUNNING lastStatus=PENDING taskDefinition="ecscompose-compose:2"
INFO[0013] Started container... container="8081492f-617a-4072-b03b-c5bf55cf6c2a/wordpress" desiredStatus=RUNNING lastStatus=RUNNING taskDefinition="ecscompose-compose:2"
INFO[0013] Started container... container="8081492f-617a-4072-b03b-c5bf55cf6c2a/mysql" desiredStatus=RUNNING lastStatus=RUNNING taskDefinition="ecscompose-compose:2"
起動できたら ps でプロセスを確認するとコンテナが起動しているのを確認できると思います
- ecs-cli ps
Name State Ports TaskDefinition
8081492f-617a-4072-b03b-c5bf55cf6c2a/wordpress RUNNING 54.206.100.168:80->80/tcp ecscompose-compose:2
8081492f-617a-4072-b03b-c5bf55cf6c2a/mysql RUNNING ecscompose-compose:2
コンソールで確認してもタスクが起動しコンテナが RUNNING になっていることが確認できると思います
動作確認
コンテナインスタンスの 80 番ポートにアクセスすると wordpress の画面が表示されるのが確認されると思います
設定や記事の投稿も問題なく行えました
コンテナを停止したい場合は以下でできます
start にすれば再度同じコンテナを起動できます
ecs-cli compose --file wordpress.xml stop
が stop/start でコンテナを再起動すると ECS 上では別タスクが走ることになり全く別のコンテナが起動してしまいます
つまりデータを保存している DB も完全に初期化されてしまいます
ちょっここの辺りは別途調査して別記事とかで初回できればと思います
これができないと辛いですよね
最後に
ecs-cli を使って ECS 上に複数のコンテナを使ったアプリを立ち上げてみました
普通はこのあとサービスの登録を行いコンテナが自動起動するように設定するようです
前回はコンソールをメインで説明していきましたが今回はコマンドラインをベースに ECS を操作しました
コマンドラインベースの場合一番はじめにリポジトリやサービスを作る必要がないので、もしかしたらこっちのほうが導入しやすいかもしれません
ただ、基本的には docker-compose 用のツールになるので yml ファイルを準備したり ecs-cli の操作方法は覚える必要があります
また今回は docker hub で公開されているイメージを使いました
独自で作成したアプリも ECS 上で動かすことができるようなのでそれも試してみたいと思います
0 件のコメント:
コメントを投稿