チャームは、最新のインフラストラクチャすべてにKubernetesで実行されているDockerコンテナを使用しています。
Dockerを使用すると、さまざまな環境でビルドするときに一貫性を維持できるだけでなく、十分にテストされたプラットフォームを迅速に展開できるため、社内の他のビジネスユニットのニーズに対応できます。
スタッフの概要
メンバーA
Dockerとは
プロセスを簡単にコンテナ化し、簡単かつ素早く開発、移動、実行できるプラットフォームがDockerです。
実行環境とアプリケーションが一体化したことで、ポータビリティ性が向上しました。
Dockerイメージとは
Dockerfileによって作成される特定の環境のスナップショットです。
Dockerイメージを実行することでDockerコンテナを起動することができることができます。
Dockerfile
Dockerfileは独自のDSLで記述します。FROM, COPY, CMDなど
Dockerコマンド
イメージの作成、コンテナの開始や終了などは、Dockerコマンドを使用して行います。docker build, docker runなど
Dockerレジストリとは
Dockerレジストリは、Dockerイメージのストアです。
Dockerイメージは読み取り専用テンプレートで、Dockerコンテナを作成するために使用されます。
Dockerレジストリは、必要に応じてコンテナをデプロイするために使用されるDockerイメージを格納するために使用されます。Dockerが公式として提供しているDockerHub
Amazon AWSで提供しているECR(Amazon Elastic Container Registry)などがあります。
コンテナオーケストレーションツールとは
コンテナは手軽に開発・実行環境を構築できる半面、管理対象のコンテナの数が増えると、その運用・管理が複雑で手間がかかるという課題がある。
この問題を解決するのが、Kubenetesに代表されるコンテナオーケストレーションで、コンテナ化されたアプリケーションのデプロイやスケーリング、管理などが自動的にできる。
参考リンク
メンバーB
Dockerとは
ホストマシンに「コンテナ」型の仮想環境を作成、実行、配布する技術。
ホスト名をはじめIPなどのネットワーク設定、やDBやWebサーバなどのミドルウェア設定は、「コード化(Infrastracture as Code)」されている。
コード化自体は、クラウドサービス(AWSやAzure)でも仮想マシン実装時などでも利用されており、現在では広く普及している。
Docker(コンテナ)のメリットとしては、開発環境を本番へ転用することや、開発環境を移す際に一から構築することなく、環境作成が容易。
仮想マシンとの違い
仮想マシン → ホストマシン上にハイパーバイザーを利用し「ゲストOS」を動かして、オンプレのサーバと同じように機能実装していく
Docker(コンテナ) → ホストマシンのカーネルを利用し、プロセスや機能を個別にコンテナとして実装する「ゲストOS」は必要ない
〇仮想マシンよりコンテナがすぐれている点
- 機能追加修正を行う場合、全体に影響が及ばないようにコンテナ単位での修正を行いテストし展開が行える部分。
- マイグレーションする際に、ゲストOS単位ではなく、必要な機能単位で行うことができる
Docker環境での通信
コンテナ間で通信を行ったりする際には、Docker Networksを利用する。
Docker Networksの種類としては、
- none:コンテナ自体が外部ネットワークとの通信を一切できない。
- bridge:ホストマシンとは違うネットワーク環境を仮想ブリッジを作って構築して、仮想インターフェース経由でホストマシンのインターフェースを接続する。
- host:仮想マシン
の3種類ある。
コンテナ作成時に3種類のタイプから1つ選んだり、Networksを自分で作成したり、セグメント情報などIaCで変更したりする。
また、他のホストOS(異なるセグメント)上の同セグメントコンテナに対して、「Docker overlay network」を使うことで、あたかも同セグメントであるかのように通信することが可能。
「Docker overlay network」はVXLANの技術を利用しているとのことなので、納得。
コンテナがどのネットワークを利用するのかは、コンテナ起動時にオプションで選択する。
メンバーC
Dockerは、インフラ関係やDevOps界隈で注目されている技術の一つで、Docker社が開発している、コンテナ型の仮想環境を作成、配布、実行するためのプラットフォームであり、プロセスの実行空間を隔離するための技術である。
Dockerは、Linuxのコンテナ技術を使ったもので、よく仮想マシンと比較される。VirtualBoxなどの仮想マシンでは、ホストマシン上でハイパーバイザを利用しゲストOSを動かし、その上でミドルウェアなどを動かす。それに対し、コンテナはホストマシンのカーネルを利用し、プロセスやユーザなどを隔離することで、あたかも別のマシンが動いているかのように動かすことができる。そのため、軽量で高速に起動、停止などが可能。
なぜ仮想マシンではなくコンテナを使うのか。それは仮想マシンに比べコンテナはカーネルを含まず軽量なのでダウンロードが速い。つまり可搬性がよいためである。

メンバーD
Docker は複数のライブラリや依存関係をコンテナ化して、アプリケーションの立ち上げ・再構築を容易に行うためのツールです。
コンテナ化により、インフラをコードで管理でき、より早く安全なデプロイが可能になります。また仮想化において、従来の主要技術であったVMと比べると、必要なソフトウェアだけを起動できるので、PCのリソースを効率的に使用することができます。
メンバーE
コンテナ仮想化技術を簡単に使えるようにしたもの。
PCに入ってるOSを隔離された複数の空間で(コンテナ)でアプリを実行することでお互いに隔離された環境で安全に動作することが出来る。
新たにOSが立ち上がらないのでアプリケーションの立ち上げが早く、コンテの再作成、持ち運びなども簡単。
仮想マシン
OS→プログラムOS→プログラム
Docker
OS→Docker→プログラム(コンテナA)
┗プログラム(コンテナB)
┗+・・・