Dockerの学習を始めて3日目。
まだ全体の流れがイメージできていない、メモのような内容です。
間違っているところがあるかもしれませんし、
読みづらい記事になっているかと思います。。。
理解が深まり次第、その都度、更新・訂正します!
(間違いのご指摘や、アドバイスいただければとても嬉しいです!)
《目的》
- Dockerの理解
- docker-composeの理解
- コンテナオーケストレーションツール(AWS ECS)の理解
1-4 ビルドしてみる 続き
昨日は、アルパインLinuxをベースにして、
bushとGit、curlをインストールしたテストステージのDockerimage(名前:dockerimage2)を作成しました。
使用コマンド
#履歴を見る
docker history Dockerimageの名前
ここで、オレンジの線の部分に関して。アルパインLinuxのインストールに関するとこは、Dockerimage2もDockerimage1と同じ設定なので、新たにインストールせずにキャッシュを使っている。
1-5 Dockerimageを削除する
一旦ここもで作成してきたDockerimageを全て削除。
下記のようにmyimage1
myimage2
myimage3
を作成する。
Dockerimageの削除
#Dockerimageの削除
docker rmi -f DockerimageのID
#現在保管されているDockerimageの一覧表示
docker images -q
#docker images -qで表示されたDockerimageを全部削除する
docker rmi -f `docker images -q`
myimage1
myimage2
を作成する
以下、Dockerfile9行目と10行めの解説(アプリケーションを動かすためのパッケージをインストールをしている)
#アルパインLinuxベースでインストール
RUN apk add --no-cache gcc python3-dev py3-pip libffi-dev musl-dev linux-headers mariadb-dev
#パイソンがパッケージを取り扱うためのファイルをアーカイブする機能
RUN pip3 install wheel -U
myimage3
を作成する
#COPY コピー元 コピー先 今回の場合、requirementsの文字が入ってる/src配下の全てを、Docker imageの/build/にコピーする
COPY /src/requirements* /build/
#Linuxコマンドのcdと同じで、WORKDIR 作業場所指定
WORKDIR /build
現状をdocker images
コマンドで確認。myimage1〜3作成できている。
1-6 スナップショット的な機能
DockerimageのIDを指定すれば仮想マシンのスナップショットのようにその時点のDockerコンテナにログインできる。
使用コマンド
docker run -it DockerimageID /bin/bash
まるで指定の時点のコンテナにSSH接続しているみたいに操作できる。exit
コマンドで抜ける。
1-7 ビルド負荷軽減の工夫
同じCOPY /src/以下省略
が出てきた。1回で済まさずになぜ2回に分けるのか?
myimage2でソースコードのコピーを一括で行ってしまうと、もしソースコードの改修があった場合、myimage2内にある、時間がかかるパッケージのインストールももう一度行わなければいけなくなり余分な時間がかかる。そのため、あまり変更がなさそうなパッケージインストールだけでレイヤーを固めておく。 今回のように、頻繁に変更が行われそうなアプリケーションのソースコードなどは後ろに持ってくる。
これはビルドにかかる時間をできるだけ短縮するための工夫となる。
1-8 CMD
とRUN
の使い分け
(Dockerfile内で使用される命令や指示を "ディレクティブ" と呼びます。)
# Test entrypoint
CMD ["python3", "manage.py", "test", "--noinput", "--settings=todobackend.settings_test"].
CMD
1行のコマンドとして考える。あらゆる種類のプロンプトの入力を求める指示を表示しないというコマンド。
《Dockerfile》
↓Dockerfileを元に docker build
でDockerimageを作成するが、その時に同時に行いたい処理、例えばパッケージインストールなどの処理はRUN
で指定する。
↓
《Dockerimage》が出来る
↓Dockerimageを元にdocker run
でコンテナを起動させるが、その時に行いたい処理は、CMD
で指定する。
↓
《Dockerコンテナ》起動
1-9 docker run
コンテナ起動
docker run -it --rm dockerimageの名前
オプションの--rm
は、コンテナが一度exit
したら、その時点で起動したコンテナを削除する。
テスト完了。
1-10 テストステージ終了 まとめ
使用したコマンド
■コマンドメモ
sudo systemctl status docker.service
sudo systemctl start docker.service
docker build -t イメージの名前 .
docker images
docker history イメージの名前
docker build -t イメージの名前 .
docker inspect xxxxxx
docker rmi -f xxxxxx
docker images -q
docker rmi -f `docker images -q`
docker run -it イメージの名前 /bin/bash
docker run -it --rm イメージの名前