4
Help us understand the problem. What are the problem?

posted at

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)

やりたいこと

記事名のとおりです。

手順

1 M1MacBookにDockerをインストール

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

2 Dockerデーモン起動のためのコマンドをMacのターミナルに入力

スクリーンショット 2021-11-19 17.39.16.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

3 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のイメージ
  の2つがきちんと取得できていることが分かります。

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

% 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」(実行中のプロセス表示)の意味で登場します。

5 作成した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環境が構築できます。

6 次回以降の起動

1.Docker desktopを起動

2.Macターミナルにて、

docker start centos7

CentOS7コンテナが起動するので、初回同様、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ユーザーでログインした状態になります。

参考サイト

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
4
Help us understand the problem. What are the problem?