ちょっと話題の記事

【AWS利用者向けの初めてのDocker】EC2とDockerコンテナのライフサイクルを比較

2016.03.09

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

コンニチハ、千葉です。

整理する機会がありましたので、共有です!

Dockerコンテナに慣れてくると、「EC2インスタンスみたいねー」と感じてきます。

仮想化の技術は全然違うのですが、ライフサイクルなんかはEC2とほぼ一緒です。

特にAMIを使用したEC2のライフサイクルに似ています。

ということで今回は、復習も兼ねてDockerコンテナのライフサイクルと、EC2ライフサイクルをそれぞれ比較してみました。

DockerコンテナとEC2ライフサイクル

図で表すとこんなイメージです。白箱がコマンドです。

AWSのライフサイクルと対比してみると、イメージしやすいのではないかと思います。

docker-life-cycle-1

コンポーネントの対比

  • 【コンテナイメージ】AWSでいうところのAMI
  • 【コンテナ】AWSでいうところのEC2インスタンス
  • 【Docker Registry】AWSでいうS3のような役割で、コンテナを格納しておく場所。コンテナを格納したり、取り出したり、コンテナのバージョン管理もできます。
  • 【Dockerエンジン】Macやwindows等のローカル端末、EC2等です。Macやwindowsでは仮想環境でLinuxを起動しdockerコマンドがインストールされています。

ライフサイクルの対比

DockerコンテナのライフサイクルとEC2のライフサイクルでの違いはほとんどありません。

が、大きな違いが1つあります。それは、Docker Registryからコンテナイメージがローカル端末等のLinuxが動いている環境に移動するということです。これはEC2のAMIとは大きく動きが違います。

よく言われる、Dockerがポータビリティ性が高いと言われるところとなります。コンテナイメージをLinuxが動いている環境に移動し、コンテナとして起動できます。

それでは細かく見てみます。

Dockerコンテナのライフサイクル

コンテナの作成

コンテナの作成方法は2パターンあります。

  • Dockerfileを使ったオーケストレーションするdocker build
  • docker pullでコンテナイメージを取得してdocker runでコンテナを作成する方法

AWSでいうと、前者はCloudFormation + オーケストレーションツール(Ansible等)を使ったようなもの、後者はrun-instancesでEC2インスタンスを作成するようなイメージです。

起動・停止・再起動

起動・停止・再起動については、DockerコンテナとAWSで差はありません。

  • docker runでコンテナ作成
  • docker startでコンテナ起動
  • docker runでコンテナ停止
  • docker psで現在起動しているコンテナ一覧
  • docker ps -aで起動/停止している全コンテナ一覧

またライフサイクル上には違いはありませんが、Docker利用時の注意ポイントがあります。それは、EC2ではinit.dでデーモンを起動しますがDockerコンテナはこれができません。そもそもなのですが、docker runした時に、EC2みたいなブート処理があるわけではないからです。docker runで起動するプロセスを指定します。このプロセスが起動します。もし複数のプロセスを起動したい場合は、Supervisorで起動できます。

コンテナイメージの作成

こちらもライフサイクルはAMIとほとんど同じです。停止しているコンテナに対して、docker commitでコンテナイメージを作成できます。このコンテナイメージはdocker pushによりDocker Registryに保管できます。

コンテナイメージ削除

AMI、EC2インスタンスを削除するイメージで、コンテナイメージ、コンテナを削除できます。ただし、docker rmiはローカルのコンテナイメージを削除するだけなので、完全削除する場合はDocker Registry上のイメージも削除する必要があります。

まとめ

これからDockerを初めてみよう!という方の参考になると幸いです。まとめてみて、私も再発見があり勉強になりました!まとめるの大切。