出典:魁!!男塾
こんにちは、Nanayakuです。
今回は、Dockerについて解説していきます。
目次
Dockerとは
Dockerとは、各プロセスが独立している仮想環境(プラットフォーム)のとこです。
これをコンテナと言います。
VM(バーチャルモデル)型は仮想マシンと言われます。
船(ホストOS)の上にいくつものコンテナ(仮想環境)が乗っているイメージです。
引用:入門 Docker
Vagrantなど従来のVM型は、コンピュータ自体を仮想化するため、OSの設定をやらなければなりません。
そのため、仮想化する領域が広くなり、作成した環境を配布しても正常に作動しない場合が出てしまいます。
それに対してDockerなどのコンテナ型は、プロセスの仮想化を行なっています。
この利点は、仮想化する領域が狭く、誰でも同じ環境を構築し、作成した環境の配布が容易なことです。
用語の確認
dockerfile
dockerfileは、コンテナを作成するためのレシピのようなものです。
このファイルには、RubyやPHPと言った「どのプログラミング言語を使うのか」「起動した時どのような処理を行うのか」など記載します。
- 「どのプログラミング言語を使うのか」・・・DockerHubと言うimage(下で解説)のテンプレート一覧みたいなものがあるため、どのテンプレートを使うか指定するのに使います。
- 「起動した時どのような処理を行うのか」・・・必要なgemのインストールなど、最初に行う初期設定のようなものです。
image
imageとは、コンテナを起動する前の箱の状態のものです。
簡単に言うと、3分クッキングのスタジオのようなものです。
「docker pull 〇〇」このコマンドで、DockerHubからローカル環境に取得することが出来ます。
container
containerとは、プロセスが起動した(させた)状態のことです。
つまり、料理を始めた3分クッキングのスタジオのようなものです。
「docker run image名」で上記のdocker pullのimage作成から起動まで一気に処理することが可能です。
ただし、この作成・起動したコンテナ(仮想環境)は完全に隔離(独立)した状態であることを覚えておく必要があります。
network
Dockerは、1コンテナに対して1プロセスを動かす設計になっています。(設計思想)
そのため、RubyのコンテナとSQLのコンテナは別々です。
それらを繋げて連携するためにnetworkが重要にります。
Dockerでは、基本的に「bridge」と言うNetwork Driverが使用されます。
Volume
Dockerは、起動中にコンテナで作成されたファイルは停止されると消えてしまします。
そのため、Volumeはデータの保持や永続化のために設計され、コンテナから独立しファイル管理を行なっています。
logなどを記録しています。
Compose
composeとは、Docker で複雑なアプリケーションの実行と定義をするツールのことです。
1つのファイル(compose)に複数のコンテナ・アプリケーションを定義することで、1つのコマンドを実行するだけでアプリケーションに必要な処理を全て行います。
参考資料
最後に
備忘録がわりに作ったので、間違っている所とかあったら、コメントくれると嬉しいです。