こんにちは、かびらです。
今回はDockerについて解説します。
Dockerとは?

Dockerは、アプリをコンテナという単位で動かすための仕組みです。
コンテナの中には、アプリに必要なライブラリや設定がまとめて入っています。
この仕組みによって、どこで動かしても、同じ環境を再現できるようになり、開発環境と本番環境のズレが起きにくくなります。

ここでは、Dockerコンテナのイメージについて共有します。
アプリを動かすときの、従来のマシンと Docker コンテナの違いを比べたものが、こちらの図です。
従来のマシンでは、「OS」「アプリ」「設定ファイル」がすべて揃った、フルスペックの構成になっています。
一方で、Dockerコンテナは「アプリ」と「必要な設定ファイル」だけをまとめた、必要最小限の構成です。
従来のマシンは、OS を含めた一式をまとめて動かすため、どうしても重くなりがちでした。
一方で、Docker コンテナは必要なものだけで動くため、そのぶん軽く、扱いやすいという特徴があります。
Dockerを採用した理由

次に、LuxucomでDockerを採用した理由についてです。
まず、ECSを使ってアプリを動かすために必要な技術だったこと。
ECSはコンテナを前提としているため、Dockerが必要になります。
そして、CI/CDからも扱いやすかったことです。
ビルドやイメージ管理が自動化しやすく、リリース作業をシンプルにできた、という点も大きな理由でした。
Dockerと関連するアーキテクチャ

次に、LuxucomでDockerと関連するアーキテクチャを見ていきましょう。
アプリのコードは、まずリポジトリに保存されます。
変更がプッシュされると、GitHub Actions が動き、CI/CD の中で Docker のコンテナイメージをビルドします。
ビルドしたイメージは、AWS の ECR にプッシュされます。
そして、本番環境で動いている ECS が、そのイメージを ECR からプルして実行します。
このような流れでDockerコンテナイメージが本番へと適用されていきます。
Dockerを使って良かった点

次に、Luxucomで、Dockerを使って良かった点です。
まず、CI/CDに自然に組み込めたことで、リリース作業が速くなりました。
Dockerのイメージをそのままパイプラインで扱えるので、手作業が減った部分が大きかったです。
また、どの環境でも同じ動作をしてくれるので、余計なことを考えずに済むようになりました。
開発と本番のズレを気にしなくていい、という安心感がありました。
Dockerを使って難しかった点

最後に、Dockerを使って難しかった点です。
Dockerを使って難しかった点は、Dockerfileの書き方でした。
最初は、どの命令をどう書けば良いのか戸惑うこともありましたが、調べたり試したりするうちに理解が進んでいきました。
さいごに
今回は、Luxucomのインフラを支える仕組みの中から、Dockerについて解説しました。
Dockerのコンテナの仕組みを利用することで、リリースの流れをシンプルにできることが分かったと思います。
次回は、世界中のユーザーからのアクセスを最適化する「Global Accelerator」について解説していきます。

