AlmaLinux9にDocker及びdocker composeをインストール

AlmaLinux 9.3にDockerをインストールする方法は、基本的にはCentOS 8以降の手順と同じらしいです。AlmaLinuxはCentOSの後継として設計されており、パッケージ管理やシステム管理の多くが同様の方法で行えます。以下の公式サイトの手順を参考にしてインストールします。

CentOS
Learn how to install Docker Engine on CentOS. These instructions cover the different installation methods, how to uninst...

AlmaLinuxとは?

AlmaLinuxは、無料で使えるオープンソースのLinuxオペレーティングシステム(OS)です。Linuxは、WindowsやmacOSのようなパソコンを動かすためのOSの一つです。AlmaLinuxは、特にサーバーでよく使われるLinuxの種類で、企業や開発者が信頼して使っています。

AlmaLinuxの特徴

  1. CentOSの後継: AlmaLinuxは、以前人気だったCentOSというOSの後継として登場しました。CentOSが開発終了になった後、同じように使える安定したLinuxが必要だということで、AlmaLinuxが作られました。
  2. 無料で使える: AlmaLinuxは誰でも無料でダウンロードして使えます。ライセンス料もなく、商用利用も可能です。
  3. 安定していて長期間サポートされる: AlmaLinuxは、長い間(最大10年間)サポートされるので、サーバーのような重要なシステムで安心して使うことができます。
  4. CentOSやRHEL(Red Hat Enterprise Linux)と互換性あり: AlmaLinuxはCentOSやRHELとほぼ同じなので、これらのOSを使っていた人は簡単にAlmaLinuxに切り替えることができます。システム管理者や開発者が同じような操作や設定を使えるのも大きなポイントです。

どんなときに使うの?

AlmaLinuxは、特にサーバーとして使われることが多いです。例えば、Webサイトやアプリを動かすためのコンピューター(サーバー)にインストールされ、安定して長期間使うことができます。

AlmaLinuxの使い方は難しいの?

最初は少し慣れが必要かもしれませんが、インターネット上にたくさんのガイドやチュートリアルがあります。また、基本的なコマンドを覚えれば、初心者でも十分に扱えるようになります。

  • AlmaLinuxは、無料で使える安定したLinuxのOS。
  • CentOSの後継として、多くの人に信頼されている。
  • サーバーでの利用が多く、長期間サポートされるため、重要なシステムでも安心。
  • WindowsやmacOSに比べると、少し難しく感じるかもしれませんが、使いこなせば強力なツールです!

Dockerのインストール方法

Dockerは、サーバーや開発環境でとても便利なツールで、簡単にアプリケーションを動かすために使います。AlmaLinuxでは、以下の手順でDockerをインストールできます。

ステップ1: リポジトリを使ったインストール

まずは、Dockerをインストールするためにリポジトリ(ソフトウェアをダウンロードする場所)を設定する必要があります。

1. 必要なパッケージをインストール

リポジトリを設定するために「yum-utils」というパッケージをインストールします。このパッケージには、リポジトリの設定に使うyum-config-managerという便利なツールが含まれています。

sudo yum install -y yum-utils

sudoというコマンドを使うと、管理者権限でインストールできるので、パソコンの設定を変更する時に使います。

2. Dockerのリポジトリを追加

次に、Dockerをインストールできるように、Dockerの公式リポジトリを追加します。これを実行することで、Dockerを簡単にダウンロード・インストールできるようになります。

sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

ステップ2: Dockerのインストール

リポジトリを設定したら、次はDockerをインストールします。

1. Docker本体をインストール

以下のコマンドで、Dockerの本体、必要な追加ツール(containerdやDocker Composeなど)を一緒にインストールします。

sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

コマンドの説明:

  • docker-ce はDockerの本体
  • docker-ce-cli はコマンドラインからDockerを操作するためのツール
  • containerd.io はDockerがコンテナを管理するのに必要なツール
  • docker-buildx-plugindocker-compose-plugin は、複数のコンテナを扱うためのプラグインです

インストール中に、GPGキーの確認を求められることがあります。これは、ソフトウェアの正当性を確認するためのものです。指紋(数字と文字のコード)が 060A 61C5 1B55 8A7F 742B 77AA C52F EB6B 621E 9F35 と一致するか確認して、一致すれば「OK」を選択してください。

2. Dockerを起動

Dockerをインストールしただけでは、まだDockerが動いていません。次にDockerを起動します。

sudo systemctl start docker

このコマンドを実行すると、Dockerが動き始め、コンテナを作成したり、管理できるようになります。

補足説明:グループの設定

Dockerをインストールすると、「docker」というグループが自動で作られますが、初めてのインストール時にはユーザーはこのグループに追加されません。そのため、毎回sudoコマンドをつけて実行する必要があります。これが面倒な場合は、自分のユーザーを「docker」グループに追加することもできますが、それはまた別の話になります。

  • 最初にyum-utilsをインストールしてリポジトリを設定します。
  • 次に、Docker本体と追加ツールをインストールします。
  • 最後に、Dockerを起動して、使い始められる状態にします。

なぜ sudo が必要なの?

Dockerを使う時、デフォルトでは sudo をつけてコマンドを実行する必要があります。これは、DockerがUnixソケットというものを通じて動作しており、そのソケットの管理はrootユーザー(管理者)が行っているためです。つまり、普通のユーザーではそのソケットにアクセスできないので、 sudo を使わないとDockerコマンドが動かせません。

でも、毎回 sudo を入力するのは面倒ですよね?そこで、 sudo なしでDockerを使えるようにする方法を説明します。

sudo なしでDockerを使う方法

1. Dockerグループを作成して自分を追加する

Dockerを使うためのグループを作成し、そのグループに自分のユーザーを追加します。これを行うと、Dockerが動くソケットにアクセスできるようになり、 sudo をつけずにコマンドを実行できるようになります。

1. Dockerグループを作成

まず、docker というグループを作ります。以下のコマンドを実行します:

sudo groupadd docker

このコマンドは、 docker という名前の新しいグループを作成します。ただ、すでに作成されていたようです。

groupadd: group ‘docker’ already exists

2. 自分のユーザーをDockerグループに追加

次に、自分のユーザーをこの docker グループに追加します。以下のコマンドを実行してください:

sudo usermod -aG docker $USER

このコマンドは、現在ログインしているユーザーを docker グループに追加するものです。$USER は今使っているユーザー名に自動的に置き換わります。

3. 再ログイン

グループに追加したら、一度ログアウトして再度ログインしてください。これにより、新しいグループの設定が有効になります。

4. グループの変更を即時反映する方法(オプション)

再ログインせずにすぐに変更を反映させたい場合は、以下のコマンドを使ってグループを切り替えます:

newgrp docker

これで、新しく作成した docker グループが即時反映されます。

注意事項:セキュリティについて

docker グループに追加されると、そのユーザーはrootレベルの権限を持つことになります。つまり、非常に強力な操作ができるようになるため、注意が必要です。セキュリティリスクがあることを理解して使いましょう。

Dockerの設定が上手くいかなかった場合

もし sudo なしでDockerコマンドを実行するとエラーが出る場合、以前に sudo を使ってDockerを動かしたことでファイルの権限が変わってしまった可能性があります。以下のようなエラーが出た場合:

WARNING: Error loading config file: /home/user/.docker/config.json –
stat /home/user/.docker/config.json: permission denied

これは、Dockerの設定ファイルの権限が正しくないことを示しています。以下のコマンドを使って修正できます。

sudo chown "$USER":"$USER" /home/"$USER"/.docker -R
sudo chmod g+rwx "$HOME/.docker" -R

このコマンドで、.docker ディレクトリとその中のファイルの権限を正しく修正します。

Dockerをインストールした後、デフォルトではサービスが自動で起動しないことがあります。そこで、以下の手順でDockerを手動で起動できます。

Dockerの状態を確認

まず、systemctlコマンドでDockerが動いているかどうか確認します。

sudo systemctl status docker

このコマンドで表示される結果に「inactive (dead)」などと表示されている場合、Dockerサービスがまだ起動していないことを意味します。

Dockerを起動

その場合は、以下のコマンドでDockerサービスを手動で起動します。

sudo systemctl start docker

これで、Dockerが起動し、コンテナを実行する準備が整います。

Dockerを自動的に起動する設定

最後に、パソコンを起動するたびに自動でDockerを動かす方法も紹介します。これには systemd という仕組みを使います。以下のコマンドで設定します。これをしておかないと以下のエラーになります。

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

sudo systemctl enable docker.service
sudo systemctl enable containerd.service

これで、パソコンが再起動してもDockerが自動で立ち上がるようになります。もしこの設定をやめたい場合は、次のコマンドで無効化できます:

sudo systemctl disable docker.service
sudo systemctl disable containerd.service
  • sudo なしでDockerを使うためには、 docker グループを作成し、自分のユーザーをそのグループに追加する。
  • グループの変更は再ログインまたは newgrp コマンドで反映できる。
  • ファイル権限の問題があれば、コマンドで修正することができる。
  • Dockerを自動で起動したい場合は、 systemctl enable コマンドで設定できる。

AlmaLinuxでは、Dockerをインストールした後にサービスが自動的に起動しないのは、システムでDockerとその関連サービスが**自動起動(enable)**に設定されていないためです。

Ubuntuの場合、多くのパッケージはインストール時に自動でサービスを有効化して再起動後も起動するように設定されることが多いですが、AlmaLinuxや他のRed Hat系ディストリビューション(CentOSやRocky Linuxなど)では、インストール後に手動でサービスを有効化しなければならない場合があります。

sudo systemctl enable の役割:

  • sudo systemctl enable docker.servicesudo systemctl enable containerd.service は、システム起動時にDockerとContainerdのサービスが自動的に開始するように設定します。
  • これを行わないと、サービスは再起動後に手動で開始する必要があります。

なぜAlmaLinuxで自動起動しないのか?

  1. ディストリビューションの違い: AlmaLinux(Red Hat系)は、パッケージのインストール時に自動的にサービスを有効化する設定がUbuntuとは異なる場合があります。そのため、手動でenableコマンドを使用してサービスを有効にする必要があります。
  2. サービス管理の違い: パッケージの設計やインストール手順が異なるため、AlmaLinuxでは多くの場合、サービスの自動起動設定をユーザーが明示的に行う必要があります。

これで、システム再起動後にDockerとContainerdが自動的に起動するようになり、再度手動でサービスを開始する必要がなくなるはずです。

ホストがAlmaLinuxの場合の影響

AlmaLinux自体はRed Hat系のLinuxディストリビューションなので、パッケージ管理やシステムの構造がDebian系とは異なります。しかし、コンテナ技術(特にDocker)は、ホストのOSとは独立して動作するように設計されています。つまり、ホストがAlmaLinuxであっても、Debianベースのコンテナを動かすこと自体は問題ありません。

ただし、以下の点に注意が必要です:

  1. パッケージ管理の違い: コンテナ内ではaptdpkgが使われ、ホストではdnfyumが使われるため、ホスト側とコンテナ内で異なるパッケージ管理コマンドを使うことになります。これは、同じ操作ができない場合があるので、少し慣れが必要です。
  2. ファイルシステムや権限の管理: ホストとコンテナでファイルの所有権やパーミッションの設定が異なる場合があります。特にAlmaLinuxのホスト側での権限設定(たとえばwww-dataユーザーがないなど)がDebianベースのコンテナと食い違うことがあり、その場合は手動で設定を調整する必要があります。
  3. トラブルシューティング: AlmaLinuxとDebian系の違いからくる依存関係やライブラリの不整合が原因で、稀に問題が発生することがあります。この場合、コンテナのログやエラーメッセージを見ながら、適切な解決策を探す必要があります。
  • 結論としては、AlmaLinuxをホストにしてDebian系のコンテナを動かすことに大きな問題はありませんが、ファイル権限やパッケージ管理の違いなど、一部の設定やトラブルシューティングに手間がかかることがあります。
  • もし手間を減らしたい場合、ホストをUbuntuなどのDebian系に統一するのも選択肢ですが、Dockerを正しく使えばホストがAlmaLinuxでも問題なく動作させることができます。

コンテナが rootベース で動作する場合、基本的にホストのOSがAlmaLinuxであっても、大きな問題は発生しにくいです。なぜなら、コンテナ内での操作はホストとは独立しているため、コンテナの中で動作するソフトウェアやパッケージ管理はホストOSに直接依存しません。以下、rootベースでコンテナを動かすことについて説明します。

rootベースで動作する場合のポイント

  1. コンテナの独立性: Dockerコンテナは、基本的にホストから隔離された環境で動作します。つまり、コンテナ内でrootとして操作を行っても、その影響が直接ホストに及ぶことは少なく、ホスト側のOSがAlmaLinuxであるか、他のLinuxであるかはあまり関係ありません。コンテナ内での操作は、Debian系のイメージを使っていても問題なく動作します。
  2. ファイル権限の違いが軽減される: コンテナがrootユーザーとして動作していれば、ホストとコンテナ間でのファイル所有権やパーミッションの問題はほとんど起こりません。rootユーザーは通常、全てのファイルやディレクトリにアクセスできるため、ファイル権限の違いによる問題を回避できます。
  3. セキュリティ上の注意点: rootベースでコンテナを動かすことには、セキュリティリスクが伴います。rootユーザーで動作するコンテナが侵害された場合、ホストOSへの影響が大きくなる可能性があります。セキュリティを考慮する場合、rootlessモードでの運用や、ユーザー権限を制限する設定を行うことが推奨されます。
  4. ホストへの影響: 仮にホスト側の権限管理やファイルのオーナーシップの問題があったとしても、コンテナがrootで動作するなら、その影響を受けにくいです。ただし、ホストOS側とコンテナ間でファイルを共有する場合(ボリュームマウントなど)に、rootベースだと権限の設定が異なるため、手動で調整する必要が出てくることがあります。
  • コンテナがrootベースで動作していれば、ホストがAlmaLinuxであっても基本的に問題は発生しません。
  • rootユーザーとして動作するため、権限やファイルアクセスの問題はほぼ解決できますが、セキュリティリスクを考慮する必要があります。
  • rootlessモードや他のセキュリティ対策を検討することも推奨されます。

具体的に rootベースで動作するコンテナ は、一般的にはどのコンテナでもrootユーザーで動作させることが可能です。デフォルトでは、ほとんどのDockerコンテナはrootユーザーとして動作します。しかし、以下のようなケースや用途で特にrootベースのコンテナがよく使われます。

よく見られるrootベースのコンテナ

  1. Webサーバーコンテナ(例:Apache、Nginx)
    • イメージ例: httpd, nginx
    • Webサーバーのコンテナは多くの場合、rootユーザーで起動されます。その後、Webサーバー自体はwww-dataなどの非rootユーザーに権限を切り替えることもありますが、起動時はrootで動くため、rootベースで動作することが一般的です。
  2. データベースサーバーコンテナ(例:MySQL、PostgreSQL)
    • イメージ例: mysql, postgres
    • データベースサーバーのコンテナも、通常はrootユーザーで初期設定が行われ、その後アプリケーション内部で専用ユーザーに権限が移行されることがあります。設定や権限を変更しない限り、rootユーザーでの操作が可能です。
  3. パッケージインストールやカスタムセットアップが必要なコンテナ
    • イメージ例: ubuntu, debian, almalinux
    • 汎用的なOSベースのイメージ(UbuntuやDebianなど)は、rootユーザーで操作されることが多いです。パッケージをインストールしたり、システム設定を行う際にroot権限が必要なので、rootユーザーとして動作します。
  4. CI/CDパイプライン用のコンテナ
    • イメージ例: jenkins, gitlab-runner
    • JenkinsやGitLab RunnerなどのCI/CDツール用コンテナは、特権が必要な作業(ビルドやデプロイ作業など)があるため、rootで動作することが多いです。
  5. 開発環境やテスト用コンテナ
    • イメージ例: node, python, ruby
    • 開発用コンテナ(Node.jsやPythonなど)は、開発中にシステムへのフルアクセスを必要とすることがあるため、rootユーザーで動作することが一般的です。開発者が特定のパッケージをインストールしたり、システム設定を変更するためにroot権限が使われます。
  6. システム管理ツールや監視ツールのコンテナ
    • イメージ例: prometheus, grafana, zabbix
    • 監視ツールやシステム管理ツールも、サーバー内のリソースへのアクセスや設定変更が必要なため、rootで動作させることがあります。

コンテナをrootで動かすメリットとデメリット

メリット

  • 全てのシステムリソースにアクセスできるため、自由にカスタマイズや設定が可能。
  • 管理が簡単で、root権限を持つため、権限の問題でつまずくことが少ない。

デメリット

  • セキュリティリスクが高まる。特に、外部からアクセスされるコンテナの場合、rootでの動作は非常に危険です。
  • 誤操作によってホストOSにも影響を与える可能性がある。

Rootlessモードの代替

もしセキュリティが心配な場合、Rootlessモードを使うことで、root権限なしにDockerコンテナを実行することもできます。これは特に本番環境でセキュリティを重視する場合に有効です。

  • 多くのコンテナはデフォルトでrootユーザーとして動作しますが、Webサーバーやデータベースサーバー、CI/CDツールなど、rootで動かすことが一般的なコンテナが特に多いです。
  • rootベースでの動作は便利ですが、セキュリティ上のリスクも伴いますので、必要に応じてrootlessモードなどのセキュリティ対策を考慮することをお勧めします。

実際に試してみたところ、Drupalはrootユーザーでのマウントでも問題なく動作しましたが、WordPressではうまくいきませんでした。Drupalはファイルシステムや権限管理に柔軟性がありますが、WordPressはその点でやや厳格な場合があります。

DrupalとWordPressの権限設定の違いについて

  • Drupal: Drupalは、インストールや動作時に必要なディレクトリの権限をrootでも動かすことができる場合があります。特に、モジュールやテーマの管理では、Drupal自体が柔軟に対応しているため、root権限のままでも問題が発生しにくいことがあります。
  • WordPress: 一方、WordPressはWebサーバー(通常はApacheやNginx)がwww-dataapacheユーザーで動作していることを前提としており、ファイルの所有者がrootのままだとパーミッションエラーが発生することがあります。そのため、ファイルの所有権を適切に設定しないと、WordPressの動作に支障をきたすことがあります。

AlmaLinuxで学べること

  1. システム管理の基本: サービスの手動起動や自動起動の設定を通じて、Linuxシステムの内部で何が起こっているのかを深く理解することができます。例えば、systemctlコマンドでサービスを管理する方法や、サービスの依存関係を確認するプロセスなど、サーバー運用の基礎知識を身に付けることができます。
  2. セキュリティや権限管理: Red Hat系のディストリビューションは、セキュリティが非常に重視されています。SELinux(Security-Enhanced Linux)やファイルの所有権、パーミッション設定についての知識を学びながら、サーバーのセキュリティ管理を高める方法も習得できます。
  3. パッケージ管理: AlmaLinuxのdnfyumを使ったパッケージ管理は、依存関係やアップデート管理を通じて、システムの安定性を保つための方法を深く学べます。特にエンタープライズ向けの環境では、パッケージ管理は非常に重要です。
  4. エンタープライズ向け環境の習得: AlmaLinuxは企業環境で広く使われているRed Hat系ディストリビューションと互換性があるため、企業で実際に運用されているシステムに近い環境を学ぶことができます。これにより、より実践的なスキルを身につけることができます。
  • AlmaLinuxは、システム管理セキュリティパッケージ管理などをより深く学ぶのに適しており、Linuxの基礎をしっかり理解するための優れた環境を提供します。
  • 一方、Ubuntuのようなディストリビューションは初心者向けで簡単に扱えるため、最初に慣れるには便利ですが、AlmaLinuxのような環境での運用経験を積むことで、より高度なスキルが身に付きます。

学びを深めるためにはAlmaLinuxのような少し手間のかかるディストリビューションが良いかもしれませんね。

タイトルとURLをコピーしました