はじめに
この実験では、CentOS 7 環境の構築と構成方法を学びます。従来のアプローチでは VirtualBox で完全な仮想マシンを使用しますが、この実験では Docker コンテナを採用した、よりモダンで効率的な手法を利用します。クラウドベースの環境内で、軽量で隔離された CentOS 7 コンテナをデプロイし、従来の仮想マシン(VM)のようなオーバーヘッドなしで機能的な Linux システムを操作します。
プロセスは、Docker Hub レジストリから公式の CentOS 7 イメージをプル(取得)することから始まります。次に、このイメージに基づいて新しいコンテナを作成し、構成します。最後に、GNOME デスクトップ環境をインストールしてグラフィカルログインを有効にすることで実行中のシステムをカスタマイズし、グラフィカルユーザーインターフェース(GUI)を備えた完全に動作する CentOS 7 インスタンスを完成させます。
VirtualBox と CentOS 7 ISO のダウンロードとインストール
このステップでは、CentOS 7 システムを入手して環境を準備します。元の演習では VirtualBox を使用して完全な仮想マシンをインストールしますが、このクラウドベースの実験環境では、Docker コンテナを使用するより効率的でモダンなアプローチをとります。Docker を使用すると、コンテナと呼ばれる軽量な環境で隔離されたアプリケーションやオペレーティングシステムを実行できます。これは従来の仮想マシンよりも起動がはるかに速く、リソースの消費も少なくて済みます。
まず、コンテナイメージの公開レジストリである Docker Hub から、公式の CentOS 7 イメージをダウンロード(Docker の用語では「プル」)することから始めます。
最初に、CentOS 7 イメージをプルしましょう。docker pullコマンドはレジストリからイメージを取得します。イメージ名としてcentosを、タグとして CentOS 7 バージョンに対応する7を指定します。
ターミナルで次のコマンドを実行してください。
docker pull centos:7
ダウンロードの進行状況が表示されます。Docker はイメージをレイヤーごとにプルします。完了すると、次のような出力が表示されます。
7: Pulling from library/centos
a1d0c7532777: Pull complete
Digest: sha256:0f4ec88e21daf75124b8a9e5ca03c37a5e937e0e108a255d890492430789b60e
Status: Downloaded newer image for centos:7
docker.io/library/centos:7
イメージがダウンロードされたので、ローカルシステムで利用可能であることを確認しましょう。docker imagesコマンドを使用して、ローカルにあるすべての Docker イメージを一覧表示できます。
docker images
出力には、タグが7のcentosのエントリが含まれているはずです。IMAGE IDやCREATED(作成日)は、お使いのシステムによって異なる場合があります。
REPOSITORY TAG IMAGE ID CREATED SIZE
centos 7 eeb6ee3f44bd 2 years ago 204MB
CentOS 7 イメージのダウンロードが正常に完了しました。次のステップで、このイメージからコンテナを作成して実行する準備が整いました。
CentOS 7 用の新しい仮想マシンの作成と構成
このステップでは、CentOS 7 環境を作成し、構成します。従来の仮想マシンの代わりに、ダウンロードしたcentos:7 Docker イメージを使用してコンテナを起動します。コンテナはイメージの実行インスタンスです。これがこの実験の残りの部分で「仮想マシン」として機能します。
docker runコマンドを使用してコンテナを作成し、起動します。いくつかの重要なオプションを含めます。
-it: これらのフラグの組み合わせにより、ターミナルをコンテナのターミナルに接続し、対話的にコマンドを実行できるようになります。--name centos_workstation: コンテナにcentos_workstationという覚えやすい名前を割り当てます。これにより、後で管理(起動、停止、削除)が容易になります。centos:7: 実行したいイメージを指定します。/bin/bash: コンテナの起動時に実行されるコマンドです。Bash シェルを起動し、コマンドプロンプトを表示します。
では、次のコマンドを実行して CentOS コンテナを起動してください。
docker run -it --name centos_workstation centos:7 /bin/bash
コマンドを実行すると、ターミナルのプロンプトが変化することに気づくでしょう。次のようになります。
[root@a1b2c3d4e5f6 /]#
この新しいプロンプトは、現在rootユーザーとして CentOS 7 コンテナ内にいることを示しています。英数字の文字列(例:a1b2c3d4e5f6)は、コンテナ固有の ID です。もはや LabEx ホスト環境のシェルにはいません。
元の演習の計画に従って、root 以外のユーザーを作成しましょう。student1という名前のユーザーを作成します。これにはuseraddコマンドを使用します。
useradd student1
次に、student1のパスワードを設定します。簡単にするために、パスワードもstudent1を使用します。passwdコマンドを実行すると、新しいパスワードの入力と再入力を求められます。
passwd student1
プロンプトが表示されたら、student1と入力して Enter を押し、再度student1と入力して Enter を押します。
Changing password for user student1.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
このステップを完了するには、メインの LabEx ターミナルに戻る必要があります。exitと入力して Enter を押し、コンテナのシェルを終了します。
exit
これによりコンテナが停止し、~/projectディレクトリのプロンプトに戻ります。centos_workstationコンテナは作成済みであり、今後のステップで再度起動できます。
カスタムパーティション設定による CentOS 7 のインストール
このステップでは、新しい CentOS 7 環境を構成します。元の演習では、カスタムディスクパーティショニングを含む詳細なインストールプロセスが含まれています。今回の Docker ベースの環境では、このプロセスは異なります。あらかじめ構築されたイメージを使用しているため、「インストール」はすでに完了しています。また、Docker コンテナはホストのファイルシステムをレイヤー構造で使用するため、/、/home、/varなどのパーティションを手動で作成するという概念は標準的なコンテナには適用されません。
代わりに、新しいシステムをデプロイした後の一般的なタスクである、実行中のコンテナの初期構成に焦点を当てます。コンテナを起動し、ソフトウェアパッケージを更新し、root 以外のユーザーが管理タスクを実行できるようにsudoをインストールします。
まず、前のステップで作成したコンテナを起動しましょう。現在は停止状態です。docker startコマンドを使用します。
docker start centos_workstation
このコマンドはコンテナ名centos_workstationを出力し、起動したことを確認します。次に、docker attachを使用してターミナルを起動中のコンテナに接続します。
docker attach centos_workstation
ターミナルのプロンプトが、以前と同様にコンテナの root シェルに変わります。
[root@a1b2c3d4e5f6 /]#
次に、必要なサービスを構成し、トラブルシューティングの対象となる環境を整えます。まず、CentOS 7 がメンテナンス終了(EOL)を迎えているため、リポジトリの構成を修正する必要があります。
sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-Base.repo
sed -i 's/#baseurl/baseurl/g' /etc/yum.repos.d/CentOS-Base.repo
sed -i 's|http://mirror.centos.org|http://vault.centos.org|g' /etc/yum.repos.d/CentOS-Base.repo
yum clean all
最小限の CentOS 7 イメージは非常にベーシックです。まず、CentOS のパッケージマネージャーであるyumを使用して、インストールされているすべてのパッケージを最新バージョンに更新することから始めましょう。-yフラグは、確認プロンプトに対して自動的に「yes」と回答します。
yum update -y
このプロセスには数分かかる場合があります。完了したら、最小イメージには含まれていないsudoパッケージをインストールします。sudoを使用すると、許可されたユーザーが別のユーザー(通常は root ユーザー)としてコマンドを実行できるようになります。
yum install -y sudo
インストールが完了したら、先ほど作成したstudent1ユーザーにsudo権限を付与する必要があります。CentOS では、通常、ユーザーをwheelグループに追加することでこれを行います。
usermod -aG wheel student1
usermodはユーザーアカウントを修正するコマンドです。-aGフラグは、ユーザーを補助グループ(この場合はwheel)に追加(append)することを指定します。
student1がsudoアクセス権を持っていることを確認するために、そのユーザーに切り替えてテストしてみましょう。
su - student1
プロンプトが[student1@a1b2c3d4e5f6 ~]$に変わります。ここで、sudoを付けてwhoamiコマンドを実行してみてください。自分がrootであることを報告するはずです。
sudo whoami
期待される出力は以下の通りです。
root
素晴らしい!コンテナは、更新されたシステムとsudo権限を持つユーザーで構成されました。次のステップに進むために、コンテナを終了しますが、バックグラウンドで実行したままにします。exitとは入力しないでください。代わりに、Ctrl+Pに続いてCtrl+Qのキーシーケンスを押します。これにより、コンテナを実行したままターミナルをコンテナから切り離し(デタッチ)、LabEx のプロンプトに戻ることができます。
GNOME デスクトップのインストールとグラフィカルログインの有効化
このステップでは、グラフィカルデスクトップをインストールするという元の演習の目標を、現在の環境に適応させます。今回使用しているようなコンテナ環境では、GNOME のような完全なグラフィカルユーザーインターフェース(GUI)をインストールすることは標準的な方法ではありません。コンテナは軽量であるように設計されており、通常はコマンドラインから管理されます。
代わりに、関連するソフトウェアパッケージのグループをインストールするという同じスキルを、一般的なコマンドラインツールのセットをインストールすることで練習します。また、新しい環境でブラウザにアクセスできるようにするという元の目標を達成するために、テキストベースのウェブブラウザをインストールします。
まず、実行中のコンテナに入る必要があります。前のステップで、centos_workstationコンテナをバックグラウンドで実行したままにしました。docker execコマンドを使用して、student1ユーザーとしてコンテナ内に新しいシェルを開きます。
すでにコンテナ内にいる場合は、このコマンドをスキップしてください。
docker exec -it centos_workstation su - student1
コマンドプロンプトが[student1@a1b2c3d4e5f6 ~]$に変わり、コンテナ内にstudent1としてログインしたことが示されます。
次に、yumを使用して「Development Tools(開発ツール)」パッケージグループをインストールしましょう。このグループには、gcc、make、gitなど、ソースからソフトウェアをコンパイルするために不可欠なツールが含まれています。student1はsudo権限を持っているため、このインストールを実行できます。-yフラグは、プロンプトに対して自動的に「yes」と回答します。
sudo yum groupinstall -y "Development Tools"
このインストールでは多くのパッケージがダウンロードおよびインストールされるため、完了までに数分かかる場合があります。パッケージがインストールされるにつれて、多くの出力が表示されます。
次に、セットアップを完了するために、軽量なテキストベースのウェブブラウザであるlynxをインストールしましょう。これは、ウェブサイトを素早く確認したり、コマンドラインから直接ファイルをダウンロードしたりするのに便利なツールです。
sudo yum install -y lynx
lynxのインストールは非常に早く終わるはずです。簡単なウェブサイトにアクセスして、新しいブラウザをテストしてみましょう。
lynx example.com
ターミナルにexample.comのホームページのテキストコンテンツが表示されます。矢印キーを使用して移動できます。lynxを終了するには、キーボードのqキーを押します。確認(Are you sure you want to quit? [Y/N])を求められたら、yを押します。
これで、重要な開発ツールとコマンドラインブラウザを備えた CentOS 環境の構成に成功しました。この実験を終了するには、コンテナを退出します。
exitと入力してstudent1ユーザーからログアウトし、さらにもう一度exitと入力してコンテナのシェルを抜け、メインの LabEx ターミナルに戻ります。
exit
exit
まとめ
この実験では、Docker を使用したモダンなコンテナベースのアプローチで CentOS 7 環境をセットアップする方法を学びました。まず、docker pull centos:7コマンドを使用して、Docker Hub の公開レジストリから公式の CentOS 7 イメージを取得しました。次に、docker imagesコマンドでローカルの Docker イメージを一覧表示し、イメージが正常にダウンロードされ、ローカルシステムで利用可能であることを確認しました。
この初期セットアップにより、このイメージからコンテナを作成して実行する後続のステップの基礎が整いました。全体的な目的は、軽量で効率的な Docker コンテナ内で、カスタム構成や GNOME グラフィカルデスクトップ環境のインストールを含む、完全な CentOS 7 の導入作業を実践することでした。



