前回まで
getting startedを終わり(一部スキップ)次はwhat is nextのpageから基礎を固めることに。dockerとimageの概要、起動、確認方法とかを学んだ
what is Docker Compose
One best practice for containers that each container should do one thing and do it well.
やはり一つのコンテナは一つのことに集中するのがいいらしい。
With Docker Compose, you can define all of your containers and their configurations in a single YAML file
YAMLファイルなるものを使うとcontainersをまとめることができますと。
try it out
dockersamples/todo-list-appをダウンロード。解答。中身はこんな感じ
yamlファイルの中身はこんな感じ
imageとそれに付随するコマンドを上から書いていく感じかな。volumesはよくわかんないけど
docker compose up -d --buil
怒られる。windowsにおけるdokcer daemonはdocker desktopが起動していること?
docker desktopを実行し、コマンドを再実行→成功。
GUI上でtodo-list-app-mainだけ色が変わっている
この一覧の流れで、二つのimageがdocker hubからダウンロードされる→ネットワークが構築される→databaseをpersistするためのvolumeが作られる→二つのコンテナが適切なコンフィグで起動される ということをしたらしい
ぶっ壊す(tear it down)
docker compose down
todo-list-app-mainそのものが消えた
ただしvolumeは残っているらしい。volumeってなんだ?と進めばわかるか
Understanding the image layers
container iamges are composed of layers
イメージはレイヤーで構成される。OSを構築するレイヤー。pythonをインストールするレイヤー。requirementsをinstallするレイヤーなど。こうすることで使いまわせるから便利だぞと。
tyr it out
create a base image
- コンテナの作成&起動
docker run -name=base-container -ti ubuntu
- nodeのinstall
apt update && apt install -y nodejs
- nodeの動作確認
node -e 'console.log("Hello world!")'
- ここまでの変更をlayerとして保存する
docker container commit -m 'add node' base-container node-base
dockerないよと怒られる
コマンドプロンプトをもう一つ立ち上げて実行。成功 - nodeが入っていることを証明する
docker run node-base node -e "console.log('hello world again')"
- base-containerを削除する
docker rm -f base-container
- 最終形。なぜかnode-baseがふたつある
build an app image
- 作成したイメージをベースに新たなコンテナを定義?する
docker run --name=app-container -ti node-base
- コンテナでアプリを作る
echo 'console log("hello from an app")' > app.js
- 変更を新しいイメージとして保存する
docker container commit -c "CMD node app.js" -m "Add app" app-container sample-app
コンテナ起動時にapp.jsを実行する内容となっているらしい - 動作確認
docker run sample-app
- docker desktopを確認。
imageがnode-baseのままなのがよくわかんない - 消す
docker rm -f app-container
消してもsample-appは残っている。現状があまり理解できない
とりあえず今日はここまで