このページで解説している内容は、以下の 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
」ファイルは、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>