🤔そもそもDockerとは
サーバ仮想化技術の一つ。
仮想化技術については、以前まとめたので、以下を参照。
https://qiita.com/tanakanata7190/items/325dddaed29e38b59988
サーバ仮想化技術は、大きく以下3つに分類されるが、このうち「コンテナ型」に相当する。
- ホスト型
- ハイパーバイザ型
- コンテナ型
😶Dockerの何がいいのか
環境構築が容易
- スクラップ&ビルドが簡単
- Dockerイメージの共有が楽
- OSのバージョン差異を吸収してくれる
軽量
- Ubuntu16.04の場合、普通は約1.6GB消費するが、Dockerなら119MB
👪Docker関連の登場人物
登場人物 | 説明 |
---|---|
Docker Engine | 全ての根幹であり、以下の作成・起動・停止・配布などを管理する |
Dockerfile | 設計書(ただの紙ぺら)。RUNとかEXPOSEとかでサーバ構成が明記されている。 |
Docker Image | 成果物(電源入ってない状態)。docker build でDockerfileから生成される。 |
Docker Container | 納品物(電源入ってる状態)。docker run でDockerImageから生成される。 |
💭Docker関連の用語集
用語 | 説明 |
---|---|
Docker Hub | アプリケーション群を共有・管理するSaaS |
Docker Registry | Repositoryを預かるホスティングサービス |
Docker Repository | Docker Imageの集まり。Registoryに送信する事で共有可能に。 |
Tag | Docker Imageのバージョン情報 |
Volume | データを永続化できる場所。 ホストOS、docker volume createで作成した箇所、NFS指定など |
オーケストレーション | 複雑なコンピュータシステム/ミドルウェア/サービスの配備/設定/管理の自動化を指す用語 |
Docker Comporse | 複数のコンテナで構成されるアプリケーションについて、Dockerイメージのビルドや各コンテナの起動・停止などをより簡単に行えるようにするツール |
🖥Dockerの構築手順
Step1. Docker Engineのインストール
インストール方法はOSによって異なる。
Linuxの場合
- ディストリビューションによる
- DebianやUbuntuだと、
apt-get install docker-engine
だったり、 - CentOSだと、
yum install docker-ce
だったり、
- DebianやUbuntuだと、
WindowsないしmacOSの場合
- Toolboxを利用するのがよさそう。
- 公式からダウンロードし、インストールすればよい。
何にせよ
- LinuxであれWindowsであれmacOSであれ、公式サイトにインストール手順が記載されているので、こちらを参照。
Step2. Docker Imageを作成
作成方法は3つある。
作成方法1:自分で作成
- Dockerfileを書いて、コマンド実行(
docker build
)するだけ - Dockerfileの書き方については、以下を参照
- Dockerfileを書く際には、レイヤーを意識する
- ×:CentOS → Rails → Ruby(Railsの上にRubyが乗るのはおかしい)
- ○:CentOS → Ruby → Rails
-
docker build
については、以下を参照
作成方法2:Docker Hubから取得
- この世の中は便利なので、必要であろうDocker Imageは誰かが作って公開しれくれている
- なので、便利な世の中にあやかるstyle
- Docker Hubから取得するコマンドは
docker pull
であり、使用方法については以下を参照
作成方法3:Docker Repositoryから取得
- この世の中は便利なので、必要であろうDocker Imageは誰かが作って公開しれくれている
- なので、便利な世の中にあやかるstyle
- Docker Hubから取得するコマンドは
docker pull
であり、使用方法については以下を参照
Step3. Docker Containerを起動
『Docker関連の登場人物』にも記載した通り、
「Docker Image」は電源の入っていないような状態であるため、電源を入れてあげる必要がある。
「Docker Image」を基に「Docker Container」を起動するには、docker run
を使用する。使用方法については以下を参照。
https://docs.docker.jp/engine/reference/run.html
これでホスト上でプロセスが動き始める。ウィーンガシャン
💻実務的な開発・運用イメージ
(実際のところDockerを業務で使った事がないので、これで合っているという確証は全くない...)
Step0. 事前準備
- GitHubにPrivateリポジトリを作成しておく
- DockerRepositoryをオンプレ構築しておく
- 本番VMにDockerEngineをインストールしておく
Step1. Aさんによる初期開発
1-1. Webアプリを作成(何でもいい)
1-2. Dockerfileを作成(1-1をcloneするコマンドも記載)
1-3. 1-1&1-2をGithubにpush
1-4. 1-2からDocker Imageを作成
1-5. 1-4をDocker Registoryにpush
Step2. Bさんによる追加開発
2-1. Docker RepositoryからDocker Imageをpull
2-2. docker run
でコンテナ起動(この時点でgit cloneされてるのでローカルで開発&必要に応じてpush)
Step3. Cさんによる本番適用
3-1. 本番VMにログイン
3-2. Docker Repositoryからpull
3-3. docker run
でコンテナ作成&起動
全体概要図
こんな感じかな・・・?
(補足)VMwareとの違い
インストールについて
- VMwareの場合
- 「VMware ESXi」をインストール
- (WindowsPCの場合は「VMware Workstation Player」
- Dockerの場合
- 「Docker Engine」をインストール
- (WindowsPCの場合は「Docker for Windows(Toolbox)」
仮想マシンの立ち方について
- VMwareの場合
- 「VMware ESXi」の上に「仮想マシン」が立つ
- Dockerの場合
- 「Docker Engine」の上に「Docker Container」が立つ
統合管理について
- VMwareの場合
- 「vCenter Server」で管理
- Dockerの場合
- 「オーケストレーションツール」で管理
- Docker Comporse
- Kubernetes
- Amazon ECS など
- 「オーケストレーションツール」で管理
(参考文献)
- 公式サイト
- 【図解】Dockerの全体像を理解する(全3編)
- Docker入門
- 【連載】世界一わかりみが深いコンテナ & Docker入門
- Docker ライフサイクル 概要図 & 環境複製手順
- コンテナ技術の基礎知識
- Dockerのイメージとコンテナの違い
- Docker、ボリューム(Volume)について真面目に調べた