Rocky Linux 9へのDockerのインストールと使用方法
はじめに
Dockerは、アプリケーションプロセスをコンテナ内で実行することを簡単かつ容易にするアプリケーションです。これらのコンテナは仮想マシンのようでありながら、より携帯性があり、リソースを節約し、ホストオペレーティングシステムに依存しています。Dockerコンテナの異なるコンポーネントについての詳細な紹介については、「The Docker Ecosystem: An Introduction to Common Components」をご覧ください。
このチュートリアルでは、Rocky Linux 9 の既存のインストールにインストールして使用する方法を学びます。
前提条件
- A Rocky Linux 9 server with a non-root user with sudo privileges set up using Initial Setup Guide for Rocky Linux 9 explains how to set this up.
このチュートリアルのすべてのコマンドは、ルートユーザーではないユーザーとして実行する必要があります。コマンドにルートアクセスが必要な場合は、sudoが先行します。Rocky Linux 9の初期セットアップガイドでは、ユーザーの追加とsudoアクセスの付与方法が説明されています。
ステップ1 – Dockerのインストール
公式のRocky Linux 9リポジトリには、最新版ではない可能性があるDockerのインストールパッケージがあります。最新かつ最高のバージョンを入手するには、公式のDockerリポジトリからDockerをインストールしてください。このセクションでは、その方法を示します。
しかし最初に、パッケージデータベースを更新しましょう。
- sudo dnf check-update
次に、公式のDockerリポジトリを追加してください。
- sudo dnf config-manager –add-repo https://download.docker.com/linux/centos/docker-ce.repo
DockerにはRocky Linux専用のリポジトリはありませんが、Rocky LinuxはCentOSを基にしており、同じリポジトリを使用できます。リポジトリを追加した後、Dockerをインストールします。Dockerは3つのパッケージで構成されています。
- sudo dnf install docker-ce docker-ce-cli containerd.io
インストールが完了したら、Dockerデーモンを起動してください。
- sudo systemctl start docker
動作を確認してください。 (Dōsa o kakunin shite kudasai.)
- sudo systemctl status docker
以下のような出力で、サービスがアクティブで動作していることを示してください。
● docker.service – Docker Application Container Engine Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled) Active: active (running) since Sun 2016-05-01 06:53:52 CDT; 1 weeks 3 days ago Docs: https://docs.docker.com Main PID: 749 (docker)
最後に、必ずサーバーの再起動時に起動するようにしてください。
- sudo systemctl enable docker
Dockerをインストールすると、Dockerサービス(デーモン)だけでなく、dockerコマンドラインユーティリティまたはDockerクライアントも提供されます。このチュートリアルでは、dockerコマンドの使用方法を後で探求します。
ステップ2 — SudoなしでDockerコマンドを実行する(オプション)。
デフォルトでは、dockerコマンドを実行するには管理者権限(sudoを接頭辞に付ける)が必要です。また、Dockerのインストール中に自動的に作成されるdockerグループのユーザーもdockerコマンドを実行できます。sudoを付けずにdockerコマンドを実行しようとしたり、dockerグループに属していない場合は、以下のようなエラーメッセージが表示されます。
docker: Cannot connect to the Docker daemon. Is the docker daemon running on this host?. See ‘docker run –help’.
dockerコマンドを実行する際に、sudoを毎回入力したくない場合は、自分のユーザー名をdockerグループに追加してください。
- sudo usermod -aG docker $(whoami)
この変更を有効にするために、vServerからログアウトし、同じユーザーとして再ログインする必要があります。
もし自分がログインしていないdockerグループにユーザーを追加する必要がある場合は、そのユーザー名を明示的に指定して宣言します。
- sudo usermod -aG docker username
この記事の残りの部分は、あなたがdockerユーザーグループのユーザーとしてdockerコマンドを実行していることを前提としています。もしそうでない場合は、コマンドの前にsudoを付けて実行してください。
ステップ3 — Dockerコマンドを使用する
Dockerがインストールおよび動作している状態で、コマンドラインユーティリティに慣れる時が来ました。Dockerを使用するには、オプションおよびサブコマンドの連鎖に引き続いて引数を渡す必要があります。この構文は次のようになります。
- docker [option] [command] [arguments]
利用可能なすべてのサブコマンドを表示するには、次のように入力してください。
- docker
Docker 1.11.1以降、利用可能なサブコマンドの完全なリストは以下の通りです。
attach Attach to a running container build Build an image from a Dockerfile commit Create a new image from a container’s changes cp Copy files/folders between a container and the local filesystem create Create a new container diff Inspect changes on a container’s filesystem events Get real time events from the server exec Run a command in a running container export Export a container’s filesystem as a tar archive history Show the history of an image images List images import Import the contents from a tarball to create a filesystem image info Display system-wide information inspect Return low-level information on a container or image kill Kill a running container load Load an image from a tar archive or STDIN login Log in to a Docker registry logout Log out from a Docker registry logs Fetch the logs of a container network Manage Docker networks pause Pause all processes within a container port List port mappings or a specific mapping for the CONTAINER ps List containers pull Pull an image or a repository from a registry push Push an image or a repository to a registry rename Rename a container restart Restart a container rm Remove one or more containers rmi Remove one or more images run Run a command in a new container save Save one or more images to a tar archive search Search the Docker Hub for images start Start one or more stopped containers stats Display a live stream of container(s) resource usage statistics stop Stop a running container tag Tag an image into a repository top Display the running processes of a container unpause Unpause all processes within a container update Update configuration of one or more containers version Show the Docker version information volume Manage Docker volumes wait Block until a container stops, then print its exit code
特定のコマンドに使用可能なスイッチを確認するには、次のように入力してください。
- docker docker-subcommand –help
システム全体の情報を表示するには、次を使用してください。
- docker info
ステップ4 — Dockerイメージを使う
DockerコンテナはDockerイメージから実行されます。デフォルトでは、これらのイメージはDockerプロジェクトを開発するDocker社が管理するDocker Hubから取得されます。誰でもDocker Hub上で自分のDockerイメージを構築・ホストすることができるため、ほとんどのアプリケーションやLinuxディストリビューションではDockerコンテナを実行するために必要なイメージがDocker Hub上にホストされています。
Docker Hubから画像にアクセスしてダウンロードできるかどうかを確認するには、以下を入力してください。
- docker run hello-world
以下を含む出力は、Dockerが正常に動作していることを示す必要があります。
Hello from Docker. This message shows that your installation appears to be working correctly. …
「search」のサブコマンドを使用して、Docker Hubで利用可能なイメージを検索できます。例えば、Rocky Linuxのイメージを検索する場合は、次のように入力します。
- docker search rockylinux
スクリプトはDocker Hubをクロールし、検索文字列に一致する全てのイメージのリストを返します。この場合、出力は次のようになります。
NAME DESCRIPTION STARS OFFICIAL AUTOMATED centos The official build of CentOS. 2224 [OK] jdeathe/centos-ssh CentOS-6 6.7 x86_64 / CentOS-7 7.2.1511 x8… 22 [OK] jdeathe/centos-ssh-apache-php CentOS-6 6.7 x86_64 / Apache / PHP / PHP M… 17 [OK] million12/centos-supervisor Base CentOS-7 with supervisord launcher, h… 11 [OK] nimmis/java-centos This is docker images of CentOS 7 with dif… 10 [OK] torusware/speedus-centos Always updated official CentOS docker imag… 8 [OK] nickistre/centos-lamp LAMP on centos setup 3 [OK] …
「オフィシャル」の欄では、OKという印がついたものは、プロジェクトの背後にある会社が構築・サポートしたイメージを指します。使用したいイメージを特定したら、pullサブコマンドを使用してコンピュータにダウンロードすることができます。
- docker pull rockylinux
イメージをダウンロードした後、ダウンロードしたイメージを使ってコンテナを実行することができます。もしdockerをrunサブコマンドで実行する際にイメージがダウンロードされていない場合、Dockerクライアントはまずイメージをダウンロードし、それを使ってコンテナを実行します。
- docker run rockylinux
ご自身のコンピュータにダウンロードされた画像を表示するには、次のように入力してください。
- docker images
出力結果は、次のようにする必要があります:
[secondary_lable Output]
REPOSITORY TAG IMAGE ID CREATED SIZE
rockylinux latest 778a53015523 5 weeks ago 196.7 MB
hello-world latest 94df4f0ce8a4 2 weeks ago 967 B
このチュートリアルの後でご覧いただく通り、コンテナを実行するために使用するイメージは変更でき、新しいイメージを生成するために使用することも可能です。そして、それらのイメージはDocker Hubや他のDockerレジストリにアップロードすることができます(技術的には「プッシュ」と呼ばれています)。
ステップ5 — Dockerコンテナの実行
前のステップで実行したhello-worldのコンテナは、テストメッセージを出力した後に実行を終了するコンテナの一例です。しかし、コンテナはそれ以上に便利であり、対話型にも使用できます。結局のところ、コンテナは仮想マシンに似ていますが、よりリソースを節約することができます。
例えば、Rocky Linuxの最新のイメージを使用してコンテナを実行しましょう。-iおよび-tスイッチの組み合わせにより、コンテナへの対話型シェルアクセスが可能になります。
- docker run -it rockylinux
コンテナ内で作業していることを反映するために、コマンドプロンプトが次の形式に変わる必要があります。
[root@59839a1b7de2 /]#
重要:コマンドプロンプトでコンテナのIDを注意してください。上記の例では、IDは59839a1b7de2です。
今後は、コンテナ内で任意のコマンドを実行することができます。例えば、実行中のコンテナにMariaDBサーバーをインストールしましょう。sudoでコマンドを先頭に付ける必要はありません。なぜなら、コンテナ内でroot権限を持って操作しているからです。
- dnf install mariadb-server
ステップ6 — Dockerコンテナ内の変更をDockerイメージに反映させる
Dockerイメージを起動すると、仮想マシンと同様にファイルの作成、変更、削除ができます。行った変更はそのコンテナにのみ適用されます。コンテナを起動・停止することができますが、docker rmコマンドで破棄すると変更は永久に失われます。
このセクションでは、コンテナの状態を新しいDockerイメージとして保存する方法を紹介します。
Rocky Linuxコンテナ内にMariaDBサーバーをインストールした後、イメージが実行中のコンテナがありますが、そのコンテナは作成に使用したイメージとは異なります。
コンテナの状態を新しいイメージとして保存するためには、まずそれから出る必要があります。
- exit
次のコマンドを使用して、変更内容を新しいDockerイメージインスタンスにコミットしてください。-mオプションは、変更内容を知りやすくするためにあなたや他の人に使われるコミットメッセージです。-aは作者を指定するために使用されます。コンテナのIDは、インタラクティブなDockerセッションを開始したチュートリアルで前もってメモしたものです。Docker Hubで追加のリポジトリを作成しない限り、リポジトリは通常、あなたのDocker Hubのユーザー名です。
- docker commit -m “What did you do to the image” -a “Author Name” container-id repository/new_image_name
例えば:
- docker commit -m “added mariadb-server” -a “Sunday Ogwu-Chinuwa” 59839a1b7de2 sammy/rockylinux-mariadb
Note
操作が完了した後、コンピュータに保存されているDockerイメージの一覧には、新しいイメージだけでなく、元となった古いイメージも表示されるはずです。
- docker images
出力は以下のようになります。
REPOSITORY TAG IMAGE ID CREATED SIZE sammy/rockylinux-mariadb latest 23390430ec73 6 seconds ago 424.6 MB rockylinux latest 778a53015523 5 weeks ago 196.7 MB hello-world latest 94df4f0ce8a4 2 weeks ago 967 B
上記の例では、rockylinux-mariadbは、Docker Hubからの既存のRocky Linuxイメージを元に作成された新しいイメージです。サイズの違いは、行われた変更を反映しています。そしてこの例では、変更されたのはMariaDBサーバがインストールされたことです。したがって、次回Rocky Linuxを実行する際には、事前にMariaDBサーバがインストールされた新しいイメージを使用することができます。イメージはまた、Dockerfileと呼ばれるものからビルドすることもできますが、それはこの記事の範囲を超える非常に詳細なプロセスです。その詳細は将来の記事で探求します。
ステップ7 — Dockerコンテナの一覧表示
Dockerをしばらく使った後、コンピュータ上には多くのアクティブ(実行中)および非アクティブなコンテナがあります。アクティブなコンテナを表示するには、以下を使用してください。
- docker ps
以下のような出力が表示されます。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f7c79cc556dd rockylinux “/bin/bash” 3 hours ago Up 3 hours silly_spence
すべてのコンテナー(アクティブおよび非アクティブなもの)を表示するには、-a スイッチを使用してください。
- docker ps -a
最新に作成したコンテナを表示するには、-l スイッチを渡してください。
- docker ps -l
実行中のコンテナを停止するのは、単純にタイプするだけです。
- docker stop container-id
docker ps コマンドの出力から、コンテナの ID を見つけることができます。
ステップ8 – DockerイメージをDockerリポジトリにプッシュする。
既存の画像から新しい画像を作成したら、次の論理的なステップはそれを選ばれた友人たちと共有したり、Docker Hubやアクセス権限を持つ他のDockerレジストリ上で世界中と共有することです。Docker Hubや他のDockerレジストリに画像をプッシュするには、そこにアカウントを持っている必要があります。
このセクションでは、DockerイメージをDocker Hubにプッシュする方法を説明します。
Docker Hubでアカウントを作成するには、まずDocker Hubに登録してください。その後、イメージをプッシュするためには、まずDocker Hubにログインしてください。認証を求められます。
- docker login -u docker-registry-username
正しいパスワードが指定されていれば、認証は成功するはずです。その後、次のコマンドを使用して独自のイメージをプッシュできます。
- docker push docker-registry-username/docker-image-name
完成までには時間がかかりますが、完成した際にはこのような出力になります。
The push refers to a repository [docker.io/sammy/rockylinux-mariadb] 670194edfaf5: Pushed 5f70bf18a086: Mounted from library/rockylinux 6a6c96337be1: Mounted from library/rockylinux …
画像をレジストリにプッシュした後、それはアカウントのダッシュボードにリストされるべきです。以下の画像で示されているように。
もしプッシュの試みがこのようなエラーを引き起こした場合、おそらくログインしていない可能性があります。
The push refers to a repository [docker.io/sammy/rockylinux-mariadb] e3fbbfb44187: Preparing 5f70bf18a086: Preparing a3b5c80a4eba: Preparing 7f18b442972b: Preparing 3ce512daaf78: Preparing 7aae4540b42d: Waiting unauthorized: authentication required
ログインして、プッシュの試行を繰り返してください。
結論
この記事では紹介されている以上に、Dockerにはまだまだたくさんの機能がありますが、それをRocky Linux 9で使い始めるにはこれだけで十分です。Dockerはほとんどのオープンソースプロジェクトと同様に、急速に進化しているコードベースから構築されていますので、常に最新の情報を得るためにプロジェクトのブログページを訪れる習慣をつけることをおすすめします。
DOコミュニティの他のDockerチュートリアルもぜひご覧ください。