このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。
【Docker入門】Ubuntuコンテナ
ここでは、Docker Composeコマンドを使ったUbuntuコンテナの構築例を紹介します。
Ubuntuとは
まず、簡単にUbuntuについて簡単におさらいしておきます。
UbuntuはLinuxのディストリビューションであり、人気と実績を兼ね備えたOSです。カノニカル社からサポートを受けており、半年ごとに最新版をリリースしています。
Ubuntuは、一般のデスクトップPC用OSとして知名度を高めてきましたが、近年はサーバーOSとしても注目されており、人気を集めています。また、UbuntuはDebianから派生しており、Ubuntuの開発はDebianのソースコードをベースに行われています。
学習環境としてのUbuntuコンテナ
UbuntuはLinuxの学習に最適な選択肢です。その理由はいくつかあります。まず第一に、Ubuntuは使いやすいデスクトップ環境を提供し、初心者でも比較的簡単に操作できます。また、豊富なドキュメントやチュートリアルがあり、学習プロセスをサポートします。さらに、大規模なコミュニティが存在し、フォーラムやオンラインチャットを通じて支援を受けることができます。Ubuntuは多様な用途に対応しており、さまざまな環境での学習を可能にします。
UbuntuコンテナはLinuxの学習環境としても最適です。さまざまなパッケージをインストールしたり、操作を試してみて、失敗しても使い捨てにすればよいからです。
Ubuntuコンテナの作成
「compose.yaml」を作成して、Ubuntuコンテナを作成します。
不要な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」ファイルを保存する「ubuntu」ディレクトリを作成して、作成したディレクトリに移動します。次のコマンドを実行します。
- 「mkdir ubuntu」コマンド
- 「cd ubuntu」コマンド
PS C:\Users\joeac\Desktop\docker> mkdir ubuntu
Directory: C:\Users\joeac\Desktop\docker
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 2024/04/13 23:52 ubuntu
PS C:\Users\joeac\Desktop\docker> cd ubuntu
PS C:\Users\joeac\Desktop\docker\ubuntu>
VSCodeの起動
VSCodeで「compose.yaml」ファイルを作成します。
・「code compose.yaml」コマンドを実行します。
PS C:\Users\joeac\Desktop\docker\ubuntu> code compose.yaml
VSCodeが起動します。
「compose.yaml」ファイルの編集
・「compose.yaml」ファイルを以下のように編集して保存します。
services:
ubuntu:
image: ubuntu:22.04
container_name: ubuntu_container
tty: true
定義内容の解説
「compose.yaml」ファイルの定義を解説します。
フィールド | 説明 |
---|---|
services | サービスの定義を開始するセクション |
ubuntu | サービスの名前 |
image | 使用するDockerイメージを指定するフィールド |
ubuntu:22.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\ubuntu> docker compose up -d
[+] Running 2/2
✔ ubuntu 1 layers [⣿] 0B/0B Pulled 5.3s
✔ bccd10f490ab Pull complete 1.4s
[+] Running 1/2
- Network ubuntu_default Created 0.4s
✔ Container ubuntu_container Started
Ubuntuコンテナへの接続
「docker compose exec
」コマンドを使用すると、実行中のコンテナ内でコマンドを実行したり、インタラクティブなシェルセッションを開始したりすることができます。
【構文】docker compose exec [options] [service] [command]
options
: オプションを指定する場合があります。例えば、-u
オプションを使用してユーザーを指定したり、-T
オプションを使用してTTYの割り当てを制御したりします。service
: 実行するコマンドが属するサービス名を指定します。command
: 実行するコマンドを指定します。このコマンドは、指定されたサービス内で実行されます。
「docker compose exec ubuntu ls」コマンドを実行します。
Ubuntuコンテナのディレクトリ構成を確認します。
PS C:\Users\joeac\Desktop\docker\ubuntu> docker compose exec ubuntu ls
bin boot dev etc home lib lib32 lib64 libx32 media mnt opt proc root run sbin srv sys tmp usr var
PS C:\Users\joeac\Desktop\docker\ubuntu>