はじめに
初めまして、新卒エンジニアのとりです。
最近ふと思うのは、配属されてから半年以上経って、数ヶ月後には後輩が入ってくるかもしれません。
そんな中いつまでも基礎的な質問をしているわけにもいかないので、改めて自分が普段使っているシステムについての、根本的な理解をする時間を確保しようと思い、ブログを書き始めることにしました。
最初のテーマは、Docker。
正直、未だにDockerって何?って聞かれても答えることができないです。
入社直後は好奇心があったので何回か調べた時期もありましたが、実際明確に理解できなかったです。業務をある程度行った今でも理解できていないです。
AIに質問してみました。
Q. Dockerとは
A. Dockerは、コンテナ型仮想化技術を利用した、アプリケーションの開発、実行、デプロイを可能にするためのオープンソースプラットフォーム
Q. ここでいうプラットフォームとは?
A. Dockerという言葉が指す「プラットフォーム」とは、コンテナ型仮想化技術を基盤とした、アプリケーションの構築・実行・管理・配布を可能にするエコシステム全体を指します。
理解できている人にはわかりやすい表現なのかもしれませんが、正直自分には全然理解できず、、、
無理やり意味で覚えようとするといつまで経っても身につかないので、やり方を変えることにしました。あえてDockerの根本的な理解をしようとはせず、ソースコードみたいに明確なもので、かつ自分が触れている部分の方から学んでいった方が理解が進むと考えました。
ということで、導入が長くなりましたが、今日のテーマは以下3つを理解することに絞りました。
Makefile
docker composeコマンド
docker-compose.yml
Makefile
Makefileは単純で、ユーザーが使うdockerのコマンドを使いやすく再定義するファイル。本当にシンプル。例えば
all:
docker compose up
と定義したら、make allというコマンドで、docker compose upを実行できます。もちろん、再定義しているだけなので、元のコマンド打っても同じ。
docker composeコマンド
では、docker composeのコマンドにはどんなものがあるのか。大きく3つ。
docker compose up <サービス名>:
指定したサービス(コンテナ)を定義に基づいて生成・起動する。すでに起動されたものがあれば、再開する。サービス名の指定がなかったら、全てのサービスを起動する。
docker compose down <サービス名>:
サービスを削除する。
docker compose exec <サービス名> <スクリプト>:
指定したサービスのスクリプトを実行する。
例)データベースのセットアップなど
docker-compose.yml
アプリ全体の「構成」と「連携方法」を定義する設計図。以下のような情報を記載しています。
-
どのサービス(コンテナ)を扱うか
-
各サービスの設定
- 環境変数
- 依存関係
- ポート番号
イメージも設計図という表現がされますが、イメージが一つの部屋(コンテナ)の設計図だとしたら、docker-compose.ymlはマンションの設計図です。
(理解できていないので、あまりイメージ、コンテナという言葉は使いたくなかったですが。)
以上です!次回以降はもっと深掘りしてみて、最終的にDockerを根本的・体系的に理解できたらいいな。