Dockerをイチから触ってみるぜ②（コンテナ環境にアクセスする）

コンテナ環境へのアクセスの基本コマンドをまとめました。
大きく
・イメージからコンテナを新規作成する場合の起動コマンド
・作成して稼働しているコンテナに対してのコマンド
と分けて紹介します。


## イメージからコンテナを新規作成してしてLinuxにログインする
Linux（Ubuntu）のコンテナイメージを取得＆実行してきます。
今回はタグバージョン（20.04）も指定します。

```:コマンド
>Docker container run -it ubuntu:20.04
```
※ -itというオプションは-i（コンテナに対しての標準入力をOPENにする）, -t（コマンドの結果の見た目を綺麗にする） をつなげた形です。


```:実行結果
Unable to find image 'ubuntu:20.04' locally
20.04: Pulling from library/ubuntu
Digest: sha256:8e5c4f0285ecbb4ead070431d29b576a530d3166df73ec44affc1cd27555141b
Status: Downloaded newer image for ubuntu:20.04
root@8b082daf9906:/#
```
Dockerイメージがローカルに存在しない場合はDockerHubからダウンロードされコンテナ実行されます。
実行された後Bashへrootユーザでログインが行われます。（このからはLinuxにログインした世界となります。）


## コンテナイメージからコンテナを作成する際のデフォルトコマンドを変更する
まずコンテナイメージに設定されているデフォルトコマンドは以下で確認できます。
```:コマンド
>>docker image inspect ubuntu:20.04
```

実行結果にコンテナイメージの情報が出力されるのでCmdという部分がデフォルトのコマンド（/bin/bash）になります。
```:実行結果（抜粋）
       "Created": "2024-10-11T03:38:27.357079367Z",
        "DockerVersion": "27.3.1",
        "Author": "",
        "Config": {
            "Hostname": "",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "/bin/bash"
            ],
            "Image": "",
            "Volumes": null,
```

上記のメージに対してDockerを作成（Docker Run）をする時にオプションコマンドを追記することでDockerのデフォルトコマンドを変更できます。
ls -l を指定した場合は以下の結果が表示されます。
```:コマンド&実行結果
>docker container run -it ubuntu:20.04 ls -l
total 48
lrwxrwxrwx   1 root root    7 Oct 11 02:03 bin -> usr/bin
drwxr-xr-x   2 root root 4096 Apr 15  2020 boot
drwxr-xr-x   5 root root  360 Jan 19 05:02 dev
drwxr-xr-x   1 root root 4096 Jan 19 05:02 etc
drwxr-xr-x   2 root root 4096 Apr 15  2020 home
lrwxrwxrwx   1 root root    7 Oct 11 02:03 lib -> usr/lib
lrwxrwxrwx   1 root root    9 Oct 11 02:03 lib32 -> usr/lib32
lrwxrwxrwx   1 root root    9 Oct 11 02:03 lib64 -> usr/lib64
```

Imageから作成されたコンテナのデフォルトコマンドが上書きされています。このコンテナを起動するたびにls -lが実行されます。
```:コマンド&実行結果
>docker container ls -a
CONTAINER ID   IMAGE          COMMAND       CREATED          STATUS                        PORTS     NAMES
37ed101068a3   ubuntu:20.04   "ls -l"       3 minutes ago    Exited (0) 8 seconds ago                focused_black
13834cb530c0   ubuntu:20.04   "ls"          3 minutes ago    Exited (0) 3 minutes ago                practical_shockley
48d43ae5ac7b   ubuntu:20.04   "pwd"         3 minutes ago    Exited (0) 3 minutes ago                optimistic_austin
f35241136877   ubuntu:20.04   "/bin/bash"   28 minutes ago   Exited (127) 15 minutes ago             hardcore_solomon
```


## 起動済のコンテナに対してコマンドを実行する
落としていた状態のコンテナを起動してUPの状態にします。
```:コマンド
>docker container start hardcore_solomon
```
<br>
アップの状態から以下のコマンドを入力するコマンドが実行できます。この場合既にアップしているコンテナにls -lを実行してます。<br>
exec コンテナ名（or コンテナID） 実行したいコマンド

```:コマンド
>docker container exec hardcore_solomon ls -l
```
<br>

bashで再度アクセスしたい場合は以下になります。
```:コマンド
>docker container exec -it hardcore_solomon bash
```


## まとめ
イメージからコンテナを新規作成してコマンドを実行する
>docker container run -it {イメージ名} {実行したいコマンド}

既存のコンテナでコマンドを実行する
>docker container exe -it{コンテナ名}｛実行したいコマンド｝


となります。以上