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

【Docker入門】Amazon Linuxコンテナ

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

Amazon Linuxとは

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

 Amazon Linuxは、Amazon Web Services(AWS)が提供するクラウド向けのLinuxディストリビューションです。AWS上でのアプリケーション開発やデプロイメントをサポートするために特別に設計されています。Amazon EC2 インスタンスで利用できます。

 Amazon Linux は、Red Hat 社が出資する開発プロジェクトである Fedora をベースに作られています。そのため、RHEL に似ていますが、RHEL のクローンではありません。

URL:https://aws.amazon.com/jp/amazon-linux-2/

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

 Amazon Linux は、Amazon Web Services (AWS) の Linux オペレーティングシステムです。Amazon EC2 インスタンスで利用できます。

 Amazon Linuxコンテナは、Amazon Linuxに気軽に触ってみたい方におススメなコンテナです。

Amazon Linuxコンテナの作成

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

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

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

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

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d----          2024/04/14     3:57                amazonlinux

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

VSCodeの起動

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

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

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

VSCodeが起動します。

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

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

services:
  amazonlinux:
    image: amazonlinux:2023
    container_name: amazonlinux_container
    tty: true

定義内容の解説

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

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

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

コンテナとの対話処理

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

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

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

コンテナの作成と実行

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

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

PS C:\Users\joeac\Desktop\docker\amazonlinux> docker compose up -d
[+] Running 2/2
 ✔ amazonlinux 1 layers [⣿]      0B/0B      Pulled                  6.4s
   ✔ 81e74100301d Pull complete                                     1.6s
[+] Running 1/2
 - Network amazonlinux_default      Created                         0.4s
 ✔ Container amazonlinux_container  Started                         0.4s

Amazon Linuxコンテナへの接続

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

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

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

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

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

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