このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。
【Docker入門】Ubuntu 24.04 LTS コンテナ
ここでは、Docker Composeコマンドを使ったUbuntu24.04LTSコンテナの構築例を紹介します。
Ubuntu24.04LTSとは
Ubuntu 24.04LTSは「Noble Numbat」として開発されてきた最新のLTSで、2024年4月25日にリリースされました。
LTSとは、Long Term Supportの略でサポート期間が普通のものより長いことを意味しています。 普通のUbuntuはサポート期間が最低9ヶ月なのに対して、LTS版は最低5年のサポートが保証されます。
Ubuntu 24.04LTSは、2029年4月までの5 年間、無料のセキュリティアップデートおよびメンテナンスアップデートが保証されています。
学習環境としてのUbuntuコンテナ
UbuntuはLinuxの学習に最適な選択肢です。その理由はいくつかあります。まず第一に、Ubuntuは使いやすいデスクトップ環境を提供し、初心者でも比較的簡単に操作できます。また、豊富なドキュメントやチュートリアルがあり、学習プロセスをサポートします。さらに、大規模なコミュニティが存在し、フォーラムやオンラインチャットを通じて支援を受けることができます。Ubuntuは多様な用途に対応しており、さまざまな環境での学習を可能にします。
UbuntuコンテナはLinuxの学習環境としても最適です。さまざまなパッケージをインストールしたり、操作を試してみて、失敗しても使い捨てにすればよいからです。
Ubuntu24.04LTSコンテナの作成
「compose.yaml」を作成して、Ubuntu24.04LTSコンテナを作成します。
不要なDockerオブジェクトの削除
まず、不要なDockerオブジェクトをすべて削除しておきます。
以下のコマンドを実行します。
・「docker system prune -a」コマンドを実行します。
Are you sure you want to continue? [y/N] の質問には「y」と入力します。
PS C:\Users\joeac> docker system prune -a
WARNING! This will remove:
- all stopped containers
- all networks not used by at least one container
- all images without at least one container associated to them
- all build cache
Are you sure you want to continue? [y/N] y
Deleted Containers:
(略)
・「docker system prune -a」コマンドで削除されなかったDockerオブジェクトは、個別に削除しておきます。
環境によって削除されずに残っているDockerオブジェクトは異なります。
compose.yaml の作成
ディレクトリの作成と移動
Docker Composeでコンテナを作成するには、「compose.yaml」ファイルが必要になります。
デフォルトでは、カレントディレクトリにある「compose.yaml」ファイルが読み込まれるため、作業ディレクトリに移動しておきます。
・「cd desktop/docker」コマンドを実行します。
PS C:\Users\joeac> cd desktop/docker
PS C:\Users\joeac\Desktop\docker>
「compose.yaml」ファイルを保存する「ubuntu2404」ディレクトリを作成して、作成したディレクトリに移動します。次のコマンドを実行します。
- 「mkdir ubuntu2404」コマンド
- 「cd ubuntu2404」コマンド
PS C:\Users\joeac\Desktop\docker> mkdir ubuntu2404
Directory: C:\Users\joeac\Desktop\docker
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 2024/04/28 14:04 ubuntu2404
PS C:\Users\joeac\Desktop\docker> cd ubuntu2404
PS C:\Users\joeac\Desktop\docker\ubuntu2404>
VSCodeの起動
VSCodeで「compose.yaml」ファイルを作成します。
・「code compose.yaml」コマンドを実行します。
PS C:\Users\joeac\Desktop\docker\ubuntu2404> code compose.yaml
VSCodeが起動します。
「compose.yaml」ファイルの編集
・「compose.yaml」ファイルを以下のように編集して保存します。
services:
ubuntu:
image: ubuntu:24.04
container_name: ubuntu_container
tty: true
定義内容の解説
「compose.yaml」ファイルの定義を解説します。
フィールド | 説明 |
---|---|
services | サービスの定義を開始するセクション |
ubuntu | サービスの名前 |
image | 使用するDockerイメージを指定するフィールド |
ubuntu:24.04 というタグのUbuntuイメージを使用することを指定 | |
container_name | コンテナに付ける名前を指定するフィールド |
ubuntu_container という名前を持つコンテナを作成することを指定 | |
tty | コンテナにTTY(端末)を割り当てるかどうかを指定するブール値のフィールド |
true に設定されており、コンテナにTTYを割り当てることを指定 |
この「compose.yaml
」ファイルは、1つのサービス(ubuntu
)を定義しています。このサービスは、Ubuntu 22.04のDockerイメージを使用し、ubuntu_container
という名前のコンテナを作成します。また、コンテナにTTYを割り当てるように設定されています。
コンテナとの対話処理
Dockerコンテナが起動後にすぐに終了してしまう問題は、コンテナがフォアグラウンドで実行されるプロセスがないために発生します。通常、Dockerコンテナは、コンテナ内で実行されるプロセスが終了すると自動的に停止します。このため、コンテナ内に入って作業を行うためには、コンテナが起動したままである必要があります。
tty
を設定することで、この問題を解決できます。「tty: true
」を設定すると、コンテナにTTY(端末)が割り当てられ、コンテナがフォアグラウンドで実行されたかのように振る舞います。つまり、コンテナが起動した後も実行中のプロセスがない場合でも、コンテナが終了することがありません。その結果、ユーザーはコンテナ内に入ってコマンド操作を行うことができます
対話的な操作が必要な場合に、「tty: true
」を設定します。
コンテナの作成と実行
・「docker compose up -d」コマンドを実行します。
このコマンドは、「compose.yaml」ファイルを配置した場所で実行する必要があります。
PS C:\Users\joeac\Desktop\docker\ubuntu2404> docker compose up -d
[+] Running 2/2
✔ ubuntu Pulled 5.1s
✔ fdcaa7e87498 Pull complete 1.2s
[+] Running 2/2
✔ Network ubuntu2404_default Created 0.0s
✔ Container ubuntu_container Started
Ubuntu24.04LTSコンテナへの接続
「docker compose exec
」コマンドを使用すると、実行中のコンテナ内でコマンドを実行したり、インタラクティブなシェルセッションを開始したりすることができます。
【構文】docker compose exec [options] [service] [command]
options
: オプションを指定する場合があります。例えば、-u
オプションを使用してユーザーを指定したり、-T
オプションを使用してTTYの割り当てを制御したりします。service
: 実行するコマンドが属するサービス名を指定します。command
: 実行するコマンドを指定します。このコマンドは、指定されたサービス内で実行されます。
docker compose exec ubuntu /bin/bash
・「docker compose exec ubuntu /bin/bash」コマンドを実行します。
PS C:\Users\joeac\Desktop\docker\ubuntu2404> docker compose exec ubuntu /bin/bash
root@2df5afff0e0c:/#
Ubuntu20.04LTSコンテナのディレクトリ構成を確認します。
・「ls」コマンドを実行します。
root@2df5afff0e0c:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@2df5afff0e0c:/#