M1MacBookでCentOSを使えるようにする【DockerHubからCentOSイメージを取得】

#前提条件

**OS**
 MacOS Monterey 12.0.1
**CPU**
 Apple M1(arm64) 
**Docker**
Docker Desktop 4.2.0 (70708) 
**CentOS**
CentOS Linux release 7.9.2009 (AltArch)

#やりたいこと

記事名のとおりです。

#手順

###*１　M1MacBookにDockerをインストール*

https://www.docker.com/get-started

Docker desktopをインストールします。
（M1をお使いの場合は、Apple chipの方をインストールしてください）

###*２　Dockerデーモン起動のためのコマンドをMacのターミナルに入力*
![スクリーンショット 2021-11-19 17.39.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1068535/0b7158ba-35e7-6a5a-b401-f1c82e4387d6.png)
（中央に示されたコマンドをコピペします）


```
% docker run -d -p 80:80 docker/getting-started
```

Dockerデーモンが起動すると思います。
  ⇨イメージ名「docker/getting-started」を用いたコンテナを新規作成してます。

【コマンド詳細（オプション）】
-d： コンテナーをデタッチ（detached）モード、つまりバックグラウンドで実行し、コンテナIDを付与します。
`--detach                         
    Run container in background and print container ID`

-p 80:80： ホストの 80 ポートをコンテナーの 80 ポートにマッピングします。
`-p, --publish list            
Publish a container's port(s) to the host`



![スクリーンショット 2021-11-19 18.06.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1068535/90553afe-6a81-a569-aa4b-03e62330de41.png)

###*３　Docker HubからCentOS7のイメージを取得（pull）*

```
% docker pull centos:centos7
```

●イメージ取れたことを確認

```
% docker images
REPOSITORY               TAG       IMAGE ID       CREATED        SIZE
centos                   centos7   dfc30428e163   8 weeks ago    301MB
docker/getting-started   latest    613921574f76   5 months ago   26.7MB
```
①docker desktopを起動したときに使ったdocker/getting-startedのイメージと、
②先ほどpullしたCentOSのイメージ
　　の２つがきちんと取得できていることが分かります。


###*４　取得したイメージを使ってコンテナを作成*

```
% docker run -it -d --name centos7 centos:centos7
```
【コマンド詳細（オプション）】

-nameオプションはそのまま、コンテナにCentOS7という名前をつけるために使っています。

オプションの「-it」の意味は下記。

【-iオプション】
Dockerホストとコンテナ内のシェルを接続したままにする
`-i, --interactive          Keep STDIN open even if not attached`
  ※interactive=対話、相互作用 
  ※STDIN＝標準入力 【standard input】

【-tオプション】
コンテナ内のシェルが使用するttyを割り当てる
`-t, --tty                  Allocate a pseudo-TTY`
　Allocate＝割り当てる
   　pseudo＝擬似
　⇨コンテナで構築したCentOSのシェル（bash）へ擬似的に端末を割り当てる？という意味合いかと思います（すいません、上手く表現できません。。。）

【-dオプション】
前述の通りです。


```
% docker ps
CONTAINER ID   IMAGE                    COMMAND                  CREATED          STATUS          PORTS                NAMES
0a412e1af0a1   centos:centos7           "/bin/bash"              8 seconds ago    Up 8 seconds                         centos7
6a588ccfd4cf   docker/getting-started   "/docker-entrypoint.…"   29 minutes ago   Up 29 minutes   0.0.0.0:80->80/tcp   quirky_carson
```

↑作成したコンテナが起動したことを確認。
起動中のコンテナを一覧表示（List containers）するコマンドです。
※psコマンドは Linuxコマンドにおいて「Process Status」（実行中のプロセス表示）の意味で登場します。


###*５　作成したCentOSコンテナ内でLinuxコマンドを使えるようにする*
コンテナが無事起動したら、CentOSを動かせるようにします。


```
 docker exec -it centos7 /bin/bash
```
  ※ exec=execute（実行する）

【docker exec】
docker execコマンドは、指定したコマンドやスクリプトなどを、指定したコンテナ内部で起動することができます。
`exec        Run a command in a running container`
　　（起動中のコンテナ内でコマンドを実行する）
　⇨ここでは、CentOSのコマンドを実行できるようにする、ということですね。

オプションの「-it」の意味は前述の通りです。

【centos7  /bin/bash】
コンテナ名　/ コマンド
※コマンドは、上記docker -psの時にCOMMANDとして出力されています

初回はここまでの手順を踏むことで、CentOS環境が構築できます。

###*６　次回以降の起動*
1.Docker desktopを起動

2.Macターミナルにて、

```
docker start centos7
```

CentOS７コンテナが起動するので、初回同様、rootユーザとして CentOSのシェルにコマンドを叩けるようにします。

```
 docker exec -it centos7 /bin/bash
```

ありがとうございました。 




#補足
Macのターミナルで

```
docker --help
```


```
docker run --help
```
と入力すれば、オプションなどのコマンドの詳細が得られます。全て英語で読みづらいですが、ネットに転がっている情報は色んな解釈や加工がされている可能性がある分、--helpで呼び出せる情報が最も正確だと言えるかもしれません。
各手順で入力したコマンドの詳細（英文のところ）などは、helpコマンドから抜粋しながら書いてます。

（今回登場したオプションを抜粋）

`(docker)`
-ps          List containers
-pull        Pull an image or a repository from a registry
-start       Start one or more stopped containers
-exec        Run a command in a running container

`（docker run）`
  -d, --detach                         Run container in background and print container ID
  -p, --publish list                   Publish a container's port(s) to the host

`(docker exec)`
-i, --interactive          Keep STDIN open even if not attached
-t, --tty                  Allocate a pseudo-TTY

####注意点
上記手順でCentOS環境を作ると、rootユーザーでログインした状態になります。


#参考サイト
https://weblabo.oscasierra.net/docker-centos7/