0
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 学習3日目

Last updated at Posted at 2024-01-25

Dockerの学習を始めて3日目。
まだ全体の流れがイメージできていない、メモのような内容です。
間違っているところがあるかもしれませんし、
読みづらい記事になっているかと思います。。。
理解が深まり次第、その都度、更新・訂正します!
(間違いのご指摘や、アドバイスいただければとても嬉しいです!)

《目的》

  1. Dockerの理解
  2. docker-composeの理解
  3. コンテナオーケストレーションツール(AWS ECS)の理解

1-4 ビルドしてみる 続き

昨日は、アルパインLinuxをベースにして、
bushとGit、curlをインストールしたテストステージのDockerimage(名前:dockerimage2)を作成しました。
スクリーンショット 2024-01-25 12.25.22.png

使用コマンド

#履歴を見る
docker history Dockerimageの名前

スクリーンショット 2024-01-25 12.33.53.png
ここで、オレンジの線の部分に関して。アルパイン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を作成する

スクリーンショット 2024-01-25 16.10.55.png

以下、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を作成する

スクリーンショット 2024-01-25 16.29.53.png

#COPY コピー元 コピー先 今回の場合、requirementsの文字が入ってる/src配下の全てを、Docker imageの/build/にコピーする
COPY /src/requirements* /build/

#Linuxコマンドのcdと同じで、WORKDIR 作業場所指定
WORKDIR /build

現状をdocker imagesコマンドで確認。myimage1〜3作成できている。
スクリーンショット 2024-01-25 16.32.54.png

1-6 スナップショット的な機能

DockerimageのIDを指定すれば仮想マシンのスナップショットのようにその時点のDockerコンテナにログインできる。

使用コマンド

docker run -it DockerimageID /bin/bash
  1. myimage2にログインしまだbuildがないことを確認。
    スクリーンショット 2024-01-25 19.39.36.png

  2. myimage3にログインしbuild内にequirementsという文字列が含まれたファイルが2つあることを確認。
    スクリーンショット 2024-01-25 19.37.48.png

まるで指定の時点のコンテナにSSH接続しているみたいに操作できる。exitコマンドで抜ける。

1-7 ビルド負荷軽減の工夫

同じCOPY /src/以下省略が出てきた。1回で済まさずになぜ2回に分けるのか?
スクリーンショット 2024-01-25 22.13.20.png

myimage2でソースコードのコピーを一括で行ってしまうと、もしソースコードの改修があった場合、myimage2内にある、時間がかかるパッケージのインストールももう一度行わなければいけなくなり余分な時間がかかる。そのため、あまり変更がなさそうなパッケージインストールだけでレイヤーを固めておく。 今回のように、頻繁に変更が行われそうなアプリケーションのソースコードなどは後ろに持ってくる。
スクリーンショット 2024-01-25 22.21.57.png
これはビルドにかかる時間をできるだけ短縮するための工夫となる。

1-8 CMDRUNの使い分け

(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したら、その時点で起動したコンテナを削除する。
スクリーンショット 2024-01-26 9.01.20.png
テスト完了。

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 イメージの名前
0
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
0
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?