初心者がdockerを自分のPCに入れて動かしてみた

# １．はじめに
自分のPCにdockerをインストールし、動かしてみます。
オンプレミスのサーバ構築する会社で働いていたので、仕事でdockerに触る機会がなく、次の職場では必要なので慌てて学習する人です。

本記事は、2024年11月時点、Windows 11 Home で実施しています。

# ２．docker desktopインストール
公式ページからdocker desktopをダウンロードし、インストールします。
インストールのオプションは、特に何も変更せず、デフォルトのままとします。
https://www.docker.com/ja-jp/products/docker-desktop/
なお参考にした資料では、Docker Toolboxを推奨するものもありましたが、2024年11月現在、Docker Toolboxはサポート終了しており、Windows 11 Homeに対応していないようです。

# ３．hello world
docker desktopの画面を起動すると、サインアップするよう勧められます。
ユーザーID持っていないとイメージを落としてくるのが不便なので、持っていない人はサインアップした方がよさそうです。
このままdocker desktop画面UIでも作業できるのですが、コマンドを覚えたいのでpowershellで作業します。
powershellを起動し、コマンドを実行します。
```powershell
PS C:\Users\testuser> docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
c1ec31eb5944: Download complete
Digest: sha256:d211f485f2dd1dee407a80973c8f129f00d54604d2c90732e8e320e5038a0348
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/
```
 ローカルに「hello world」のイメージが無いため、自動でネットからダウンロードして起動してくれているようです。便利。
 コンテナの実行状況は、以下のようにコマンドで確認します。
```powershell
PS C:\Users\testuser> docker ps -a
CONTAINER ID   IMAGE         COMMAND    CREATED         STATUS                     PORTS     NAMES
a0f0712e2d82   hello-world   "/hello"   5 minutes ago   Exited (0) 5 minutes ago             inspiring_hofstadter
 ```

 # ４．Linuxイメージの作成
それでは簡単なLinuxイメージを作って起動してみます。
2024年11月現在、ちょうどCentOSがサポート終了となり、今までのようにCentOSで実験する訳にはいきません。
代替のLinuxディストリビューションはいくつかあるのですが、今はAlmaLinuxがメジャーになりつつあります。
今回は、AlmaLinuxのバージョン8で実験します。

powershellで実行しやすいようユーザーディレクトリ直下にtestフォルダを作成し、以下のファイルを設置します。
 C:\Users\testuser\test\Dockerfile
```Dockerfile
FROM almalinux:8
RUN yum update -y
```
powershellで、testフォルダの上の階層のディレクトリから、以下のようにコマンド実行します。
「-t」は、イメージ名とタグを付与するオプションです。イメージ名をalmalinux、タグ名をver.8と指定してみました。
```powershell
PS C:\Users\testuser> docker build -t almalinux:ver.8 test
[+] Building 6.1s (7/7) FINISHED                                                                                docker:desktop-linux
 => [internal] load build definition from Dockerfile                                                                            0.0s
 => => transferring dockerfile: 74B                                                                                             0.0s
 => [internal] load metadata for docker.io/library/almalinux:8                                                                  1.9s
 => [auth] library/almalinux:pull token for registry-1.docker.io                                                                0.0s
 => [internal] load .dockerignore                                                                                               0.0s
 => => transferring context: 2B                                                                                                 0.0s
 => [1/2] FROM docker.io/library/almalinux:8@sha256:d7dbaf57916185b2be09e1eaa1156b543f3937164ffa08d7fdc020a0a3800a5a            0.0s
 => => resolve docker.io/library/almalinux:8@sha256:d7dbaf57916185b2be09e1eaa1156b543f3937164ffa08d7fdc020a0a3800a5a            0.0s
 => CACHED [2/2] RUN yum update -y                                                                                              0.0s
 => exporting to image                                                                                                          4.0s
 => => exporting layers                                                                                                         0.0s
 => => exporting manifest sha256:0146bf2f9b74056872ac2db50a993e03ad9b9621f8262b9e9fd2ffbd04e9941b                               0.0s
 => => exporting config sha256:935c9463378d9de1f981eebe6a3d8050021bcb2a2ef8c67ab1e12f988a88cead                                 0.0s
 => => exporting attestation manifest sha256:fb71980e8790fca069aede0a665195ac5309639406274a3fa749473724c01f9c                   0.0s
 => => exporting manifest list sha256:29c6964d1d5563303001cac24660111e0e274bb6cc9a8f8b9bdadc6f65488f63                          0.0s
 => => naming to docker.io/library/almalinux:ver.8                                                                              0.0s
 => => unpacking to docker.io/library/almalinux:ver.8                                                                           3.9s

View build details: docker-desktop://dashboard/build/desktop-linux/desktop-linux/ms2h5wlr562weukjd6x1la93v
```
うまくいっていれば、以下のようにイメージが作成されています。
```powershell
PS C:\Users\testuser> docker images
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
almalinux     ver.8     29c6964d1d55   5 hours ago     536MB
hello-world   latest    d211f485f2dd   18 months ago   24.4kB
```

# ５．作成したlinuxイメージからコンテナ起動
起動して、そのままrootログインまで実行します。
「-it」オプションで対話型セッションを開始し、「--name mylinux」でコンテナに名前を付けています。
（参考）https://offers.jp/media/programming/a_4105
```powershell
PS C:\Users\testuser> docker run -it --name mylinux almalinux:ver.8
[root@a63eb00c86be /]# cat /etc/redhat-release
AlmaLinux release 8.10 (Cerulean Leopard)
```
簡単にlinux環境ができあがりましたね。
exitしてから、コンテナのプロセスを確認します。
```powershell
PS C:\Users\testuser> docker ps -a
CONTAINER ID   IMAGE             COMMAND       CREATED          STATUS                      PORTS     NAMES
a63eb00c86be   almalinux:ver.8   "/bin/bash"   9 minutes ago    Exited (0) 27 seconds ago             mylinux
a0f0712e2d82   hello-world       "/hello"      43 minutes ago   Exited (0) 43 minutes ago             inspiring_hofstadter
```
ステータスが「Exited」ですね。
今度は、docker startで実行してみます。
```powershell
PS C:\Users\testuser> docker start mylinux
mylinux
```
ステータスが「Up」になりました！
```powershell
PS C:\Users\testuser> docker ps -a
CONTAINER ID   IMAGE             COMMAND       CREATED          STATUS                      PORTS     NAMES
a63eb00c86be   almalinux:ver.8   "/bin/bash"   14 minutes ago   Up 4 seconds                          mylinux
a0f0712e2d82   hello-world       "/hello"      48 minutes ago   Exited (0) 48 minutes ago             inspiring_hofstadter
```
最後に、このコンテナの中にログインしてコマンド実行してみます。
```powershell
PS C:\Users\testuser> docker exec -it mylinux bash
[root@a63eb00c86be /]# pwd
/
[root@a63eb00c86be /]# ls
bin  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
```

# ６．終わりに
自分のPCで遊ぶ用の環境…ゴホゴホ…勉強のためdocker環境を作ってみました。
ここから何を作っていくかアイデア次第ですね。
ご拝読ありがとうございました！