1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Dockerとdocker-composeの動作を図にしてみました

Posted at

そろそろDockerコンテナをもとにCI/CDを実践してみようかと思ったところ、Dockerのイメージとコンテナの概念をしっかり理解していないとCI/CDパイプラインが作成できないことに気づき、少々混乱しました。

ということでDockerおよびdocker-conposeの動作についてまとめてみました。

CI/CDにコンテナを使うときの課題

わかったつもりで使っていましたが、CI/CDパイプラインを構築しようと思うと以下でつまずきました。

永続化したファイルってイメージに含まれるの?

docker-compose.ymlに記述したenvironment部分ってどうなる?

Dockerfileとイメージ・コンテナの関係は?

接続データベースを商用環境のコンテナやテスト環境のコンテナでは変更したいけどどうしたらいい?

実際にコンテナベースでCI/CDを構築しようと思うとしっかりとDockerコンテナの仕様を知らないと運用できないですね😥

まずはコンテナ、イメージの関係を整理する

ということでDockerのコンテナ、イメージの関係を整理することにしました。
コンテナとは?イメージとは?を記載している方は多くいるので助かっているのですが、Dockerコマンドやdocker-composeコマンドのbuild,up,run,createなどで何が起こるのかについては少々情報が少ないです。

そんな中で以下の記事を参考にしながら図式化してみました。
※私なりの解釈で書いています。

Dockerの動作

スクリーンショット 2022-11-11 11.50.56.png

  1. buildを行うとDockerfileをもとにイメージを組み立てる、その際ローカルファイルをイメージに取り込む(バインドする)ことができる
  2. createを行うとイメージからコンテナを作る
  3. startでコンテナを起動する、その際ローカルファイルをマウントできる

docker-composeの動作

スクリーンショット 2022-11-11 11.51.11.png

  1. buildを行うとdocker-compose.ymlファイルをもとにイメージを組み立てる、その際Dockerfileの利用やローカルファイルのバインドも可能
  2. startを行うとまず停止中のコンテナがないかを調べ、なければイメージからコンテナを作成。その後コンテナを実行する。その際ローカルファイルをマウントできる

まとめ

自身で開発したプログラムなどはバインドまたはマウントして永続化しているはずです。
しかし、マウントしただけでは開発プログラムはイメージに取り込まれません。
AWS Fargateなどでテスト環境、商用環境を構築しようと思うと独自生成したイメージを利用することになるのでマウントではなく、バインドしてあげる必要があるというわけですね。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?