EC2でDockerを動かす

これやってみた

http://docs.aws.amazon.com/AmazonECS/latest/developerguide/docker-basics.html

ここでの完成形

  • EC2 + Docker
  • ローカルのMacでDockerイメージをビルド、DockerHubへプッシュ
  • EC2上でDockerHubからDockerイメージをプル、Dockerコンテナ起動
+-----+  docker push   +------------+  docker pull   +--------------+
| Mac | -------------> | Docker Hub | -------------> | EC2 + Docker |
+-----+                +------------+                +--------------+

1. ローカルのMacにて Docker環境を立ち上げる

  • Boot2Dockerの仕組み

    • OS X 上に docker clientとboot2dockerを入れて、clientからboot2docker VMを操作
      • Docker client
      • Boot2Docker VM
        • Docker Daemon
          • コンテナ
          • コンテナ
          • コンテナ
  • ローカルのMacBoot2Dockerをインストール

  • boot2dockrを開始して、環境変数をセット
  • これでdockerコマンドが動くようになる
which docker
which boot2docker
boot2docker init
boot2docker start
eval "$(boot2docker shellinit)"
boot2docker status
  • VMにログインするには boot2docker ssh
  • 停止するにはboot2docker stop

2. Macにて コンテナをビルド&起動、Dockerレジストリにpush

  • DockerHubのアカウントを取得しておく
  • サンプルアプリケーションをclone
  • Dockerfileを開いてビルドの内容を確認してみる
git clone https://github.com/awslabs/ecs-demo-php-simple-app
cd ecs-demo-php-simple-app
cat Dockerfile
  • カレントディレクトリをビルド(名前には自分のDockerHubアカウントを入れる)

  • できあがったimageの確認
  • コンテナを起動
  • -pオプションでコンテナ内外のポートを接続する
    • 左 = ホストマシンのポート
    • 右 = コンテナのポート
docker build -t my-repo/amazon-ecs-sample .
docker images
docker run -p 80:80 my-repo/amazon-ecs-sample
  • VMのIPを確認
  • http://boot2docker ip の結果IPアドレス/
  • DockerHubへpush
boot2docker ip
docker login
docker push my-repo/amazon-ecs-sample

3. EC2にDockerを入れる

  • AWSマネジメントコンソール
    • EC2 Amazon Linux インスタンス起動
    • ec2-userでSSH接続
    • dockerをインストール
    • ec2-userからdockerコマンドを叩くために、dockerグループにいれていったんログアウト
sudo yum update -y
sudo yum install -y docker
sudo service docker start

sudo usermod -a -G docker ec2-user
id ec2-user
exit
docker info

4. EC2にDockerイメージをダウンロード

docker login
docker pull my-repo/amazon-ecs-sample
docker images

5. EC2でDockerコンテナを起動

docker run -p 80:80 my-repo/amazon-ecs-sample
  • 停止するにはCtrl-c