【AWS利用者向けの初めてのDocker】EC2とDockerコンテナのライフサイクルを比較
コンニチハ、千葉です。
整理する機会がありましたので、共有です!
Dockerコンテナに慣れてくると、「EC2インスタンスみたいねー」と感じてきます。
仮想化の技術は全然違うのですが、ライフサイクルなんかはEC2とほぼ一緒です。
特にAMIを使用したEC2のライフサイクルに似ています。
ということで今回は、復習も兼ねてDockerコンテナのライフサイクルと、EC2ライフサイクルをそれぞれ比較してみました。
DockerコンテナとEC2ライフサイクル
図で表すとこんなイメージです。白箱がコマンドです。
AWSのライフサイクルと対比してみると、イメージしやすいのではないかと思います。
コンポーネントの対比
- 【コンテナイメージ】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を初めてみよう!という方の参考になると幸いです。まとめてみて、私も再発見があり勉強になりました!まとめるの大切。