Docker編 2/3:docker composeを理解する ~HelmやEKSへの道~
社内でAWS EKS(Kubernetesをいい感じに動かせるAWSマネージドサービス)を使用するプロジェクトに参画したので、EKSに必須のDocker, Kubernetes, Helmについて学習したことをまとめていきます。
今回はDocker Composeについてです。
はじめに
Dockerとはなんぞやというとこからキャッチアップし、Kubernetes -> Helm -> EKSと段階を踏んでようやくEKSのすごさが理解ができるようになってきました。
いきなりEKSを触らなければならなくなった人(ほぼいないと思うが)のために
Docker -> Kubernetes -> Helm -> EKS
と順を追ってキャッチアップできるように記事を書いてみます。概念は他の記事に任せるとして実際に手を動かしたり、設定ファイルの見方などを中心にお伝えしていきます。また詳しい用語解説はしないので都度気になれば調べて、私にも教えてください(笑)
ゴール
Docker Composeを理解して設定ファイルの作成ができる。
- 参考教材
https://www.youtube.com/watch?v=3c-iBn73dDE&t=9082s
英語で3時間ですがおすすめです!
やること
前回の記事でMongoDBのDockerコンテナを起動しアプリケーションと連携しました。dockerコマンドでDockerネットワーク作成してDockerコンテナを立ち上げるということをしてきました。なんかいろいろ設定してコマンド打って... って少し大変だったと思います。
なんとそれをDocker Composeで簡単にできてしまうということなんです!実際に手を動かしながら理解していきましょう!
JSとNodejsのアプリをMongoDBのDocker Containerに接続する。
- フロント(html, css, js)
- バックエンド(nodejs, express)
- DB(mongodb) -> Dockerイメージ使用
- Mongo ExpressはMongo DBをUIでいじれる便利なもの
イメージは下記の図の通り。詳細は動かしながら説明します。
事前準備
- Docker Desktopというものを使用してローカルで
docker
コマンドを使用するのでインストールしてください。
Docker Composeとは?
前回の記事では下記の手順でコンテナを立ち上げました。
- Docker ネットワーク作成
- MongoDB dockerコンテナ起動
docker run -d \
-p 27017:27017 \
-e MONGO_INITDB_ROOT_USERNAME=admin \
-e MONGO_INITDB_ROOT_PASSWORD=password \
--name mongodb \
--network mongo-network \
mongo
- MongoDB Expressコンテナ起動
docker run -d \
-p 8081:8081 \
-e ME_CONFIG_MONGODB_ADMINUSERNAME=admin \
-e ME_CONFIG_MONGODB_ADMINPASSWORD=password \
--name mongo-express \
--network mongo-network \
-e ME_CONFIG_MONGODB_SERVER=mongodb \
mongo-express
小規模アプリなのでまだこの程度で済んでいますが、もっと多くのDockerを管理していこうとすると大変なのは想像に難くないですよね。これをyamlファイル作ってコマンド一つで立ち上げてしまえるというのがDocker composeです!
次から実際に触っていきましょう!
Docker Composeファイルの構成の理解
設定ファイルをコマンドと比較しながら見ていきましょう!
-
コマンド(左)ではそれぞれのコンテナごとに実行しましたが、docker-composeファイル(右)ではservice配下に複数書くことができます。
-
service配下に来るのがコンテナ名になります。コマンドでは
--name
オプションで設定した部分ですね。さらにその配下にDocker hubなどから取得してくるDocker imageimage
。コマンドでは最後に書いていた部分ですね。続けて-p
オプションで設定したports
,-e
で設定したenvironment
を書いていきます。
docker networkはdocker composeの方でいい感じにまとめてくれるので特に記載する必要はありません!
-
コンテナ名
-
起動するdocker image
-
ポート
-
変数
実際にdocker composeでコンテナを起動する
上記の設定で docker-compose.yml
ファイルを作成したら実際に起動してみます。
起動コマンドは docker-compose -f docker-compose.yaml up
です。dockerをインストールした時点でdocker-composeコマンドも使用できるようになっています。
version: '3'
services:
mongodb:
image: mongo
ports:
- 27017:27017
environment:
- MONGO_INITDB_ROOT_USERNAME=admin
- MONGO_INITDB_ROOT_PASSWORD=password
volumes:
- mongo-data:/data/db
mongo-express:
image: mongo-express
restart: always
ports:
- 8080:8081
environment:
- ME_CONFIG_MONGODB_ADMINUSERNAME=admin
- ME_CONFIG_MONGODB_ADMINPASSWORD=password
- ME_CONFIG_MONGODB_SERVER=mongodb
volumes:
mongo-data:
driver: local
実行するとまずnetworkが docker-demo-app_default
として立ち上がってるのがわかります。
あとは docker network ls
で実際に docker-demo-app_default
があるのを確認したり、mongo express UI をいじったり、アプリケーションを立ち上げてアプリとDBの接続を確認してみたりしてください。
コンテナを終了する
それでは立ち上げたコンテナを終了しましょう。
これもいたって簡単で docker-compose -f docker-compose.yaml down
でコンテナを落とすことができます。先ほど up
だったところをdown
に書き直しただけですね。
このコマンドを実行することでmondgodb
とmongo-express
だけでなくDocker networkもremoveされていることがわかりますね。
以上です!
次回は実際にdocker imageをつくっていくためにDockerfileを理解してきます。
採用強化中
Onplanetz株式会社では「物を作れる人」が中心の会社を目指しています。
AI(機械学習)技術、Blockchain技術をコア事業として、テクノロジーを用いた課題解決、社会実装に日々取り組んでいます。
新しい技術に触れることができるので難しい分やりがいもあります!少しでも興味を持っている方はまずはお話ししましょう!
Discussion