はじめに
今日からアイデミーの初のアドベントカレンダーを投稿していきます!よろしくお願いします!
僕の担当回ではアイデミーのインフラを紹介し、実際に 簡易版のAidemy を5回に分けて作成して行きたいと思います。今回はその1回目にあたります。
できるだけつまずかないように記述するつもりですが、何か不明点があれば教えてください。
今回の目標
今回はアイデミーのインフラ構成と構成に密接に関わるDockerについて紹介し、
Dockerの環境を構築することを目標にします。
インフラ構成
今年(2018年)の5月に弊社のインフラ構成についてのブログを公開しました。
こちらで紹介した インフラ構成図 を以下に掲載します。
2018年5月の執筆当時は、作成予定のインフラ構成図でしたが、6月末頃から実際にほぼこの構成で運用しています。
それぞれのインフラについては、上のブログで紹介していますのでご一読ください。
今回はこのインフラ構成と密接に関わるDockerについて紹介していきます。
Dockerとは
Dockerの日本語版ドキュメントによると、以下のように説明されています。
Docker とは、開発者やシステム管理者が、アプリケーションの開発、移動、実行するためのプラットフォームです。
Docker は部品(コンポーネント)から迅速にアプリケーションを組み立てるため、コードの移動による摩擦を無くします。
Docker はコードのテストやプロダクション(本番環境)に対する迅速な展開をもたらします。
... 説明を読んだだけではよくわかりません。。。
ここでは、Dockerの重要な要素である Docker Container
と Docker Image
について紹介します。
さらに、実行時に用いる Docker Compose
についても紹介します。
Docker Container
以下に、Docker Container
の図を示します。
通常PCなどのホストマシン(デバイス)上で動くアプリケーションは、ホストマシンの環境に依存しています。
例えば、Windows用に作られたアプリケーションは、Windows環境下では動作しますが、MacやLinux環境下だと動かないということが起きてしまいます。
また同じOSなのに、特定のモジュールをインストールしていなかったり、バージョンが揃っていないために動作しない場合もあります。
しかし、Docker Container
はホストマシンのカーネルを共有して、プロセスやユーザから切り離して環境を構築するため、ホストマシンのOSに依存せず同様に動作することができます。
これにより開発者間で環境を揃える必要がなくなり、開発そのものに時間を割くことができます。
Docker Image
Docker Image
は、公式ドキュメントには以下のように書かれています。
Docker Imageは コンテナ の元です。
イメージとはルート・ファイルシステムに対する変更を並べ集めたもので、コンテナを実行する間に使われる実行パラメータに相当します。
典型的なイメージはユニオン・ファイル・システムの層(スタック)がお互いに積み重なっています。イメージは状態を保持せず、変更もできません。
上の説明にあるように、Docker Image
はDocker Container
を作る元になります。
Docker Image
さえ共有できれば、 それを持つ全員が同じDocker Container
を作ることができます。
また、あるDocker Image
を元にDocker Container
の中身に変更を加えて新しいDocker Image
を作ることもできます。
さらに、Dockerfile
というファイルを利用すると、
ある Docker Image を引っ張ってきて特定の変更を加え、新たな Docker Image を作成する
という作業を自動で行うことができます。
Docker Image
を共有するサービスにDocker Hubがあります。
基本的に無料で公開しているので、会員登録さえすれば様々なDocker Image
を利用することができます。
また、チーム内でプライベートにDocker Image
を管理したい場合は、Container Registory
というサービスを利用します。
弊社でもContainer Registory
を利用していて、インフラ構成図の中央下部に記載しています。
インフラ構成図にあるkubernetes
というサービスは、Container Registory
からDocker Image
を引っ張ってきて、Docker Container
を作成して利用しています。
Docker Compose
Docker Compose
は、公式ドキュメントには以下のように書かれています。
Compose とは、複数のコンテナを使う Docker アプリケーションを、定義・実行するツールです。
Compose はアプリケーションのサービスの設定に、Compose ファイルを使います。
そして、コマンドを1つ実行するだけで、設定した全てのサービスを作成・起動します。
上で説明されているように、Docker Compose
とはDockerの定義/実行を行うツールです。
Compose
ファイルにDockerfile
を指定したり、起動するポート番号などを指定すると、コマンド一つでDocker Image
の作成や起動ができます。
Docker の環境構築
今回は、DockerとDocker Composeのインストールを行います。
環境構築については、他の方が丁寧に説明されているのでその記事の紹介をさせていただきます。
Dockerのインストール
-
Macの方
Mac で Dockerを使えるように、 Docker for Mac というものが用意されています。
インストール手順は以下の記事で説明されているので参考にして下さい。
https://qiita.com/kurkuru/items/127fa99ef5b2f0288b81 -
Ubuntuの方
公式のDockerをインストールできます。
インストール手順は以下の記事で説明されているので参考にして下さい。
https://qiita.com/tkyonezu/items/0f6da57eb2d823d2611d -
Windowsの方
Windows で Dockerを使えるように、 Docker for Windows というものが用意されています。
公式ドキュメントをご覧ください。
http://docs.docker.jp/windows/step_one.html
Dockerをインストールできたら、
以下のコマンドで正しくインストールされているか確認して下さい。
僕の場合は以下のような出力になりました。
$ docker version
Client:
Version: 18.06.1-ce
API version: 1.38
Go version: go1.10.3
Git commit: e68fc7a
Built: Tue Aug 21 17:21:31 2018
OS/Arch: darwin/amd64
Experimental: false
Server:
Engine:
Version: 18.06.1-ce
API version: 1.38 (minimum version 1.12)
Go version: go1.10.3
Git commit: e68fc7a
Built: Tue Aug 21 17:29:02 2018
OS/Arch: linux/amd64
Experimental: true
Docker Composeのインストール
Docker Compose
のインストールについては、以下の記事を参考にしてください。
https://qiita.com/zembutsu/items/dd2209a663cae37dfa81
Docker Compose
をインストールできたら、
以下のコマンドで正しくインストールされているか確認して下さい。
僕の場合は以下のような出力になりました。
$ docker-compose --version
docker-compose version 1.22.0, build f46880f
今回は以上になります。
次回以降実際にサービスを作って行きましょう!