Docker Composeでローカルコンテナを管理してみました。
はじめに
ハローワールド!マイクです。
Dockerはオープンなプラットフォームです。Dockerオブジェクトと呼ばれるイメージ、コンテナ、ネットワーク、ボリュームなどで構成され、これらを操作する事でアプリケーションを開発、配布、実行することが出来ます。
今回はDocker Composeを使ってローカル環境にあるコンテナの簡単な管理をしてみましょう。
使ったもの
今回の環境を下記に示しておきます。
VirtualBox 7.0
Ubuntu 22.04.4 LTS
docker desktop 4.30.0 (Engine 26.1.1、Compose 2.27.0-desktop.2、Credential Helper 0.8.1、Kubernetes 1.29.2)
(Credential Helperってなんだろう。後で調べますね。)
VirtulaBoxの中でUbuntuを実行して、その上でdocker desktopをインストールしました。docker desktopをインストールすると、必要そうなものは勝手に入れてくれるみたいなので、今回使ってみました。
まず、Docker Composeとはなんでしょう?
複数のコンテナを管理するための仕組みです。YAMLというデータシリアライゼーション言語でファイルにアプリケーションを実行するのに必要コンテナを記述します。YAMLは”YAML Ain't a Markup Language”の略称らしいです。略称にはなってない気がします。w
YAMLファイルにアプリケーションに必要なコンテナを定義することで、複数のコンテナの作成・起動・停止を同時に行えます。また、別のDocker環境にYAMLファイルをコピーしてDocker Composeを使用することで、全く同じアプリケーションを別の環境で簡単に構築・実行することもできます。
Docker Composeはローカル環境・開発環境で使用しましょう!とよく聞きます。調べてみたところ、大規模なシステムには向いてなさそうなこと(1つの大きなファイルをメンテする必要があります。複数のサーバに跨った場合どうするのか分からなかったです。)とKubernetesの方がセキュリティー設定が豊富なので、インターネットにコンテナ環境を構築する場合はKubernetesを使うのが良さそうです。
YAMLファイルの簡単な例を見てみましょう
下記の例はYAMLファイルのサンプルです。NginxとMongoDBをそれぞれの最新版でコンテナを作成して、80番ポートと27017番ポートで待受状態を作ります。Docker環境にイメージが存在していなければ、環境で指定されているコンテナリポジトリ(DockerHubが初期値として設定されているかと思います。)から最新版をダウンロードしてきます。
このファイルの見方は
services:
コンテナ名:
イメージ
ポート番号(ポートマッピング)
です。docker runコマンドで個別にコンテナを実行するときに指定出来ることはすべて(100%は自信がないです。たぶんすべて。)YAMLファイルに書くことが可能です。コンテナの作成、ネットワークの設定、ボリュームの作成、変数を設定などですね。
ファイル名をdocker-compose.ymlとしておくことで下記のコマンドだけでコンテナの操作が可能です。YAMLファイルを別なファイル名にした場合は、docker compose up するときに -f オプションをつけてファイルを指定する必要があります。
-d オプションをつけるとバックグラウンドで実行します。
コンテナを止めるときは、downをしてあげます。ここで -v オプションをつけてあげないとボリューは削除されませんので、コンテナの停止と同時にボリュームの削除をしたい場合は気をつけてください。
実行中のコンテナがみたい場合は psをしてあげます。
topをやってあげると、プロセスの一覧が見ることができます。
最後に
今回はdocker composeの簡単な設定ファイル(YMLファイル)と基本的なコマンドについて書いてみました。docker composeを使い始める手がかりになれば幸いです。最後まで読んで頂きありがとうございます。
追伸
試しに今流行りのAI君にNignx, Nginx Unit, MongoDBを作成・起動するYAMLファイルを依頼してみました。ww
なんかそれっぽいモノが返ってきました。versionは付ける必要がなさそうです。怒られてしまいました。w volumesはこれで合っているのかしら。。。。
そして、何も変更を加えず実行してみました。
おおお、起動できました。
docker desktopから見るとこんな感じで見えます。
最後のボリュームはMongoDBが使うボリュームみたいです。NginxとNginx Unitが作成しようとしてるボリュームはどこへ?私はもっとボリュームの勉強が必要ですね。
参考
履歴
2024年06月05日:投稿
この記事が気に入ったらサポートをしてみませんか?