AWSでDockerコンテナを立ち上げる・管理するやり方
数年前から注目されている**「Docker」**ですが、ローカル環境だけではなくサーバーないしクラウド環境にて環境構築を行うときにもよく利用されています。Dockerは仮想環境を高速に構築できるからです。また、DockerはAWSでも利用することができます。
今回はAWS上にDockerをデプロイするときに利用できる、AWSが提供しているサービスの種類とそれぞれの利用方法を説明します。
AWSでDockerを利用する
ここではまず、Dockerについて簡単に説明を行います。そこからDockerを利用する方法をいくつか紹介します。
Dockerとは
Dockerは、コンテナという仮想環境単位上にサービスを展開できるサービスです。
DockerにはLinux上で動くクライアントとデーモンが存在し、この2つがソケット通信することで、コンテナ上でサービスを展開できるように振る舞うことが実現できています。
近年、ここまでDockerが注目されるようになった理由は、イメージを作っておきさえすれば何度でも同じ環境を構築できる点にあります。
ソフトウェアないしサービス開発の仕事では、大体において「開発・テスト・本番・QA」の4つの環境を使いまわす必要性があります。これらをすべて管理するのはなかなか骨が折れる作業である上、手作業が絡む場合はどうしても抜け漏れが発生しやすくなります。
作成したイメージを使い回しできるDockerなら、こういった抜け漏れを防止することができるため注目されているわけです。
AWS上でDockerを利用する方法
AWSでDockerを利用する方法はいくつか存在します。
今回ご紹介するのは、以下の4つの方法です。
- EC2上にDockerをインストールする
- AWS CLIを使ってDockerを操作する
- AWS for Dockerを使って環境を構築する
- Amazon Elastic Container Serviceを使ってコンテナを管理する
次の見出しから、上記の各方法ついて順番に解説していきます。また、ECSを使ってDockerイメージをAWS上へRegistryしたり、AWS Batchで登録したイメージを利用したりできることについても少し触れます。
EC2上にDockerをインストールする
最初はオーソドックスな方法であるAWS EC2上にDockerを直接インストールして利用する方法を解説します。Docker自体はLinuxのカーネルを利用しているので、LinuxのEC2インスタンスを利用することになります。
設定にはdocker-composeを使います。docker-composeを使うことで、コンテナをビルドしたり、コンテナ同士を連携し、複数サービスを連携させたりすることができます。docker-composeはymlファイルを作成して、コマンドを実行することで操作します。docker-composeで使うymlファイルには、指定する事柄がいくつかあります。
■ Docker上でWordPress環境を構築するymlファイルのサンプル
version: '3' # docker compose fileのバージョン
services: # サービスの定義
wordpress:
hostname: wordpress
container_name: wordpress-env
image: wordpress
restart: always
ports:
- 8000:80
environment:
WORDPRESS_DB_HOST: mysql
WOEDPRESS_DB_USER: adminuser
WORDPRESS_DB_PASSWORD: adminpass
WORDPRESS_DB_NAME: db
mysql:
hostname: mysql
container_name: mysql-env
image: mysql:5.7
restart: always
environment:
MYSQL_DATABASE: db
MYSQL_USER: adminuser
MYSQL_ROOT_PASSWORD: adminpass
MYSQL_RANDOM_ROOT_PASSWORD: '1'
上記のファイルを作成した後、以下のコマンドを実行します。
sudo docker-compose up -d
コマンドを実行すると、Dockerが自動でimageを取得しはじめます。ネットワーク環境やマシンスペックによりますが、コンテナが起動するまでおおよそ5分かかります。
コンテナの起動が完了したら、以下のコマンドでコンテナの情報を確認しましょう。
sudo docker ps
STATUSが ”*Up ●●minutes”*となっていれば、サービスが立ち上がっている状態です。
また、別の方法として AWS ECS を利用する方法もあります。
AWS ECSとは、より手軽にEC2インスタンス上にDockerを展開、操作することができるサービスです。利用方法は、まずコンテナ作成を行います。コンテナ作成時に指定する情報の例は以下のとおりです。
コンテナ情報
- コンテナ名: wordpress_test
- リポジトリ:リポジトリ名+リポジトリ名
- メモリ:1000MB (任意で変更可能)
- ポートマッピング:ホストポート 8000:コンテナポート 80
- CPUユニット数:1
さらにクラスターを作成します。クラスター自体は「ECインスタンスタイプ」と「インスタンス数」「EBSストレージ」を指定して作成します。
一例を挙げます。
クラスター情報
- クラスター名:test_cluster
- ECインスタンスタイプ:m5.large
- インスタンス数:1
- ESBストレージ:22GB(任意で変更可能)
あとはクラスターをタスクとして実行すれば、Dockerを使った環境をAWS上にデプロイできます。
AWS CLIを使ってDockerを操作する
上記であげたEC2インスタンスを利用する方法ですが、AWS CLI を使っても利用可能です。
CLIとはCommand Line Interfaceのことであり、ローカルのコンソールからコマンドを使ってAWSへの操作を行うことができるツールです。LinuxもしくはmacOSであれば、bashやzsh、WindowsであればPowerShellもしくはコマンドプロンプトから操作できます。
AWS for Dockerを使って環境を構築する
Docker for AWS は、Dockerの公式ページにて提供されているAWSとの連動型サービスです。
Docker for AWS setup & prerequisites
https://docs.docker.com/docker-for-aws/
こちらはDocker Swarmを使ったnode同士の連携がはじめから設定できるようになっています。
スタックの作成方法は簡単で、「スタックの名前」およびSwarm Sizeのパラメータである「Swarmマネージャー数」と「Worker Node数」を指定。あとはデフォルト値で、スタックの作成は完了です。下に設定情報の一例を挙げます。
スタックの情報
- スタックの名前: DockerTest
- Swarm Size
- ManagerSize:1
- ClusterSize:3
スタック作成完了後はマネージャーノードにSSHでログインし、Dockerのサービスを作成、さらにコンテナを起動させることで、サービスを利用できるようになります。スタックの構成としては、Manager Nodeと呼ばれる大本のNodeの下に、スタック作成時に指定したWorker Nodeが紐づいているような構成になっています。
Docker for AWSはとくに意識しなくても、コンテナ同士の連携を前提とした構成を意識しているので、いちいち手動で複数のコンテナを立ち上げなくてOKなところが魅力です。
Amazon Elastic Container Serviceを使ってコンテナを管理する
Amazon Elastic Container Service(以下、ECS)とは、Dockerイメージを管理するサービスです。
Docker Hubのようなコンテナ管理をAWS上で展開できるサービスだと考えてもらえば、わかりやすいかと思います。AWSへDockerコンテナを追加する際には、Amazon Elastic Container Registry(以下、ECR)を使います。ここで追加されたコンテナはECSで利用できるようになります。
CLIを使って以下のようなコマンドを実行することで、ECRからAWSへDockerイメージをプッシュできます。
docker push "アカウントID".dkr.ecr.us-east-1.amazonaws.com/"イメージ名"
また、ECRへ登録したイメージは、AWS Batch上でDockerコンテナを起動させるときにも利用できます。
AWS Batchとは、あるバッチ処理をAWS上で実行・管理できるサービスです。ジョブ定義とジョブキューを設定することで、指定した処理をまとめて実行できます。
AWS BatchでDockerイメージをEC2上にデプロイ
↓
作成されたコンテナ内のサービスを利用したBatch処理を実行
↓
処理が終わったらDockerイメージを破棄
まとめ
AWS上でDockerコンテナを動かす方法をご紹介しました。おさらいとして、解説を振り返ってみましょう。
- EC2上にDockerをインストール、docker-composeを使ってコンテナを立ち上げる
- AWS for Dockerを使ってDockerクラスターを構築する
- ECSを使ってコンテナを管理する
- ECRを使ってECSへDockerイメージを追加する
- AWS BatchでDockerイメージをデプロイしてBatch処理を行う
AWSとDockerを使った環境構築はとても便利なので、仕事だけではなく個人開発でも覚えていると便利です。