このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

【Docker入門】Debianコンテナ

ここでは、Docker Composeコマンドを使ったDebianコンテナの構築例を紹介します。

Debianとは

まず、簡単にDebianについて簡単に説明しておきます。

 Debian(デビアン)は、LinuxディストリビューションのひとつであるオープンソースのOSソフトウェアです。1993年に誕生し、セキュリティと安定性に重点を置いていることから、サーバー用途からデスクトップ用途まで幅広く利用されています。Debianは、パッケージ管理システムであるAPT(Advanced Package Tool)を使用しています。

URL:https://www.debian.org/

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

 Debianは、Linuxディストリビューションの中でも非常に人気が高いディストリビューションです。その人気の理由は、Debianは安定性と信頼性に重点を置いており、長期サポートと厳格な品質管理が行われているからです。

 DebianコンテナはLinuxの学習環境としても最適ですし、Debianに気軽に触ってみたい方におススメなコンテナです。

Debianコンテナの作成

「compose.yaml」を作成して、Debianコンテナを作成します。

不要な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」ファイルを保存する「debian」ディレクトリを作成して、作成したディレクトリに移動します。次のコマンドを実行します。

  • 「mkdir debian」コマンド
  • 「cd debian」コマンド
PS C:\Users\joeac\Desktop\docker> mkdir debian

    Directory: C:\Users\joeac\Desktop\docker

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d----          2024/04/14     2:25                debian

PS C:\Users\joeac\Desktop\docker> cd debian
PS C:\Users\joeac\Desktop\docker\debian>

VSCodeの起動

VSCodeで「compose.yaml」ファイルを作成します。

・「code compose.yaml」コマンドを実行します。

PS C:\Users\joeac\Desktop\docker\debian> code compose.yaml

VSCodeが起動します。

「compose.yaml」ファイルの編集

・「compose.yaml」ファイルを以下のように編集して保存します。

services:
  debian:
    image: debian:12.5
    container_name: debian_container
    tty: true

定義内容の解説

「compose.yaml」ファイルの定義を解説します。

フィールド説明
servicesサービスの定義を開始するセクション
debianサービスの名前
image使用するDockerイメージを指定するフィールド
debian:12.5というタグのDebianイメージを使用することを指定
container_nameコンテナに付ける名前を指定するフィールド
debian_containerという名前を持つコンテナを作成することを指定
ttyコンテナにTTY(端末)を割り当てるかどうかを指定するブール値のフィールド
trueに設定されており、コンテナにTTYを割り当てることを指定
「compose.yaml」ファイルの定義

 この「compose.yaml」ファイルは、1つのサービス(debian)を定義しています。このサービスは、Debian 12.5のDockerイメージを使用し、debian_containerという名前のコンテナを作成します。また、コンテナにTTYを割り当てるように設定されています。

コンテナとの対話処理

 Dockerコンテナが起動後にすぐに終了してしまう問題は、コンテナがフォアグラウンドで実行されるプロセスがないために発生します。通常、Dockerコンテナは、コンテナ内で実行されるプロセスが終了すると自動的に停止します。このため、コンテナ内に入って作業を行うためには、コンテナが起動したままである必要があります。

 ttyを設定することで、この問題を解決できます。「tty: true」を設定すると、コンテナにTTY(端末)が割り当てられ、コンテナがフォアグラウンドで実行されたかのように振る舞います。つまり、コンテナが起動した後も実行中のプロセスがない場合でも、コンテナが終了することがありません。その結果、ユーザーはコンテナ内に入ってコマンド操作を行うことができます

対話的な操作が必要な場合に、「tty: true」を設定します。

コンテナの作成と実行

「docker compose up -d」コマンドを実行します。

このコマンドは、「compose.yaml」ファイルを配置した場所で実行する必要があります。

PS C:\Users\joeac\Desktop\docker\debian> docker compose up -d
[+] Running 2/2
 ✔ debian 1 layers [⣿]      0B/0B      Pulled                       6.1s
   ✔ 609c73876867 Pull complete                                     1.5s
[+] Running 1/2
 - Network debian_default      Created                              0.5s
 ✔ Container debian_container  Star...                              0.4s

Debianコンテナへの接続

 「docker compose exec」コマンドを使用すると、実行中のコンテナ内でコマンドを実行したり、インタラクティブなシェルセッションを開始したりすることができます。

【構文】
docker compose exec [options] [service] [command]

  • options: オプションを指定する場合があります。例えば、-uオプションを使用してユーザーを指定したり、-Tオプションを使用してTTYの割り当てを制御したりします。
  • service: 実行するコマンドが属するサービス名を指定します。
  • command: 実行するコマンドを指定します。このコマンドは、指定されたサービス内で実行されます。

「docker compose exec debian ls」コマンドを実行します。

Debianコンテナのディレクトリ構成を確認します。

PS C:\Users\joeac\Desktop\docker\debian> docker compose exec debian ls
bin   dev  home  lib64  mnt  proc  run   srv  tmp  var
boot  etc  lib   media  opt  root  sbin  sys  usr
PS C:\Users\joeac\Desktop\docker\debian>