WSL2のUbuntuにDockerをインストールする方法のコマンド理解

WSL2のUbuntuにDockerをインストールしたい時に以下の記事にヒットした。

https://qiita.com/Jazuma/items/9274d90167a3b61791fa

問題なくインストールまでできたがコマンドの理解がついていっていないので理解を深めるために各コマンドが何をしているのかを確認する。

## sudo apt-get update

> サーバーからパッケージ・リストを入手する

https://xtech.nikkei.com/it/article/COLUMN/20060227/230709/

なぜ実行前にパッケージ・リストを入手するのかについては該当する情報が得られなかった。
そのためGeminiで質問をしその回答を添付した。
（この内容の正確性については確証が持てないため、誤りがあれば資料を提示の上ご指摘いただけると幸いです。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/330568/611e18fb-a4ee-def2-f514-082c31b80dd2.png)

https://qiita.com/pensuke628/items/1555cad4904327117982

## sudo apt-get install ca-certificates curl

### ca-certificatesについて
> Enterprise environments sometimes have a local Certificate Authority (CA) that issues certificates for use within the organisation. For an Ubuntu server to be functional, and to trust the hosts in this environment, this CA must be installed in Ubuntu’s trust store.
Certificate formats
There are two encoding formats for certificates:

Privacy Enhanced Mail (PEM): These are human-readable and in Base64-encoded ASCII format.

訳
エンタープライズ環境には、組織内で使用する証明書を発行するローカル証明機関 (CA) が存在する場合があります。Ubuntu サーバーが機能し、この環境のホストを信頼するには、この CA を Ubuntu の信頼ストアにインストールする必要があります。
証明書の形式
証明書には 2 つのエンコード形式があります。
Privacy Enhanced Mail (PEM): 人間が判読できる Base64 エンコード ASCII 形式です。

https://ubuntu.com/server/docs/install-a-root-ca-certificate-in-the-trust-store

つまりca-certificatesは必要な証明書をインストールするためのコマンドでありこれを行うことでローカルサイトに接続が可能となる

### curlについて

> curl（Client URL）は、コマンドラインからHTTPリクエストを送信するためのツールです。

https://zenn.dev/skrikzts/articles/8fe062618f3fa8

サイトに情報をアクセスするためのコマンド
これで外部のサイトから必要な情報を引き込むことができる

## sudo install -m 0755 -d /etc/apt/keyrings

```
install --help
  -D                  create all leading components of DEST except the last,
                        or all components of --target-directory,
                        then copy SOURCE to DEST
      --debug         explain how a file is copied.  Implies -v
  -g, --group=GROUP   set group ownership, instead of process' current group
  -m, --mode=MODE     set permission mode (as in chmod), instead of rwxr-xr-x
```

読み込み書き込み権限を入れつつ/etc/apt/keyringsにデータを移動させている。

必要な理由についてはGenimiでの回答が以下となる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/330568/9365386f-48e5-2e61-8ed1-81c8c7cbbc09.png)

## sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
curlコマンドにてdockerのダウンロードを行う。
なおそれぞれのオプションの意味は以下
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/330568/7e380f09-f97a-1992-91a1-a3c9f24d4b38.png)

なお-oから出力ファイルを指定するオプションとなっており、/etc/apt/keyrings/docker.ascというファイルへ保存する。

https://qiita.com/ryuichi1208/items/e4e1b27ff7d54a66dcd9

## sudo chmod a+r /etc/apt/keyrings/docker.asc
chmodコマンドを利用してアクセス制御を設定する。
オプションについてはaでユーザー、グループ、他のすべてのユーザーを示し、rで読み取り許可を行う。

https://www.ibm.com/docs/ja/aix/7.2?topic=c-chmod-command

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/330568/3638a756-166e-e5fe-b8d6-1ea0c0e961c2.png)


## echo \ "deb [arch=$(dpkg --print-architecture) signed by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \ $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

コマンドだけでは意図がつかみきれなかったのでgeminiで質問をしています。

> Dockerの公式リポジトリをUbuntuのパッケージ管理システムであるaptのソースリストに追加するためのコマンドです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/330568/656d741a-ea60-da41-1932-643169f06ab9.png)

echoコマンドで文字列の作成、ファイルへの追記はパイプコマンドを経由してteeコマンドでファイルへの追記を行っています。
> /dev/nullは標準出力が破棄され、ターミナルには何も表示されない状態となります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/330568/b85b81ab-2d77-c720-9885-4717a390aa9a.png)

## sudo apt-get update
変更内容を再度更新することで依存関係などを整理します。

最後に
コマンド単体だと何をどう動かしたかや行ったかは追えますがその背景となるファイルの構造やファイルの中身については追い切れてない印象です。
それが理解の妨げとなりただコマンドを叩いているだけになっていたので今回どのコマンドが何をしているのかを正確に追うためこの記事を書きました。

なお執筆者に基礎的な知識が不足しているためどのファイルでどの処理を行っているかの理解が不足しているのは否めませんでした。
そのためAIによる質問とその回答を載せましたがこれがどれだけ精確な内容であるかは確証が持てずにいます。
これらの内容に関して誤りなどをご指摘をいただけるととても助かります。

ここまで読んでいただきありがとうございました。