このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。
【Docker入門】Ubuntu 20.04 LTS コンテナ

ここでは、Docker Composeコマンドを使ったUbuntu20.04LTSコンテナの構築例を紹介します。
Ubuntu 20.04 LTSとは
「Ubuntu 20.04 LTS」は、LinuxディストリビューションであるUbuntuの20.04バージョンの中でも特に重要なリリースです。"LTS"は"Long Term Support"の略称であり、長期間にわたるサポートが提供されることを意味します。
このバージョンは、セキュリティの強化、安定性の向上、新機能の追加など、さまざまな面で改善が施されています。Ubuntu 20.04 LTSは、デスクトップ環境からサーバー、クラウド、IoTデバイスまで幅広い用途に対応しており、開発者やシステム管理者にとって信頼性の高い基盤となっています。

学習環境としてのUbuntuコンテナ

UbuntuはLinuxの学習に最適な選択肢です。その理由はいくつかあります。まず第一に、Ubuntuは使いやすいデスクトップ環境を提供し、初心者でも比較的簡単に操作できます。また、豊富なドキュメントやチュートリアルがあり、学習プロセスをサポートします。さらに、大規模なコミュニティが存在し、フォーラムやオンラインチャットを通じて支援を受けることができます。Ubuntuは多様な用途に対応しており、さまざまな環境での学習を可能にします。
UbuntuコンテナはLinuxの学習環境としても最適です。さまざまなパッケージをインストールしたり、操作を試してみて、失敗しても使い捨てにすればよいからです。
Ubuntu20.04LTSコンテナの作成
「compose.yaml」を作成して、Ubuntu20.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」ファイルを保存する「ubuntu2004」ディレクトリを作成して、作成したディレクトリに移動します。次のコマンドを実行します。
- 「mkdir ubuntu2004コマンド
- 「cd ubuntu2004」コマンド
PS C:\Users\joeac\Desktop\docker> mkdir ubuntu2004
Directory: C:\Users\joeac\Desktop\docker
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 2024/04/28 12:26 ubuntu2004
PS C:\Users\joeac\Desktop\docker> cd ubuntu2004
PS C:\Users\joeac\Desktop\docker\ubuntu2004>
VSCodeの起動
VSCodeで「compose.yaml」ファイルを作成します。
・「code compose.yaml」コマンドを実行します。
PS C:\Users\joeac\Desktop\docker\ubuntu2004> code compose.yaml
VSCodeが起動します。

「compose.yaml」ファイルの編集
・「compose.yaml」ファイルを以下のように編集して保存します。
services:
ubuntu:
image: ubuntu:20.04
container_name: ubuntu_container
tty: true
定義内容の解説
「compose.yaml」ファイルの定義を解説します。
フィールド | 説明 |
---|---|
services | サービスの定義を開始するセクション |
ubuntu | サービスの名前 |
image | 使用するDockerイメージを指定するフィールド |
ubuntu:20.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\ubuntu2004> docker compose up -d
[+] Running 2/2
✔ ubuntu Pulled 5.4s
✔ 4477f8fe99eb Pull complete 1.2s
[+] Running 2/2
✔ Network ubuntu2004_default Created 0.0s
✔ Container ubuntu_container Started
Ubuntu20.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\ubuntu2004> docker compose exec ubuntu /bin/bash
root@45702b0ce43c:/#
Ubuntu20.04LTSコンテナのディレクトリ構成を確認します。
・「ls」コマンドを実行します。
root@45702b0ce43c:/# ls
bin boot dev etc home lib lib32 lib64 libx32 media mnt opt proc root run sbin srv sys tmp usr var
root@45702b0ce43c:/#