LoginSignup
6
4

More than 3 years have passed since last update.

Dockerについて色々調べた結果をまとめてみた

Posted at

自分用にまとめてた記事(ほぼコピペ)を共有する
ちなみに中途半端な文章多いと思う(順次直す気力があれば

Docker

Dockerとは

Dockerは、インフラ関係やDevOps界隈で注目されている技術の一つで、Docker社が開発している、コンテナ型の仮想環境を作成、配布、実行するためのプラットフォームのこと。

DockerとVagrantの違い

Vagrant + VirtualBox

仮想マシンを動かす仮想化ソフトのラッパーツール

VirtualBoxの構成をVagrantfileというテキストに記述してVagrantに任せることで、ネットワークドライバの設定などを意識すること無く、ホスト環境に依存しない形で整備される

Vagrantの特徴

  • Linux以外のOSの環境が構築できるため、コンテナ型と比べて自由度が高い
  • OSのバージョンの違い、仮想環境ツールの違い、仮想環境ツールの設定の違いなどで構築に手間がかかる
  • VagrantとVirtualBoxのバージョンの相性によってバグがある
  • 仮想環境はホストOS型と呼ばれ、ゲストOSがハードウェアにアクセスするにはホストOSを経由しなければならないため、オーバーヘッドが大きい

Docker

OS・ミドルウェア・ファイルシステム全体をイメージという単位で取り扱い、まるごとやりとり出来るツールのこと。

VirtualBoxなどの仮想マシンでは、ホストマシン上でハイパーバイザを利用しゲストOSを動かし、その上でミドルウェアなどを動かすのに対し、コンテナはホストマシンのカーネルを利用し、プロセスやユーザなどを隔離することで、あたかも別のマシンが動いているかのように動かすことができます。そのため軽量で高速に起動、停止などが可能。

Dockerの特徴

  • 仮想環境はコンテナ型と呼ばれるもので、ホストOSを直接アクセスするためオーバーヘッドが少ない
  • 環境構築が容易でVirtual Boxも不要
  • コンテナは移植性(ポータビリティ)が高く、Dockerさえインストールされていれば、全く同じ環境でアプリを動かせる
  • ホストOSからはコンテナは1プロセスとして認識される

参考

dockerとvagrantの違い言える?新人エンジニアでも分かった気になれる俺流まとめ


仮想化技術

前提として

仮想化の種類には大きくホストOS型とハイパーバイザ型とコンテナ型の3つある

ホスト型

  • ホストOS上に仮想化ソフトを動かす
  • 仮想化環境上でOSを動かす
  • 仮想OS上でアプリケーションを動かす

ハイパーバイザ型

  • マシン全体を仮想環境とする
  • 仮想環境上でOSを動かす
  • 仮想OS上でアプリケーションを動かす

コンテナ型

  • ホストOS上でコンテナを動かす
  • ホストOSと仮想OSでカーネルを共有している
  • 基本的にLinuxでのサポート
  • 他のOSでも要件次第で利用可能

用語

PC/端末/ホストマシン

CPU,メモリ、ストレージといった様に限られているリソースがある。
仮想化を実現してるサーバー等が過剰にスペックが高かいのはリソース供給量を上げるためという理由がある。

VirtualBox,VMWare

仮想化を実現するにはまず骨組みや土台が必要。
windowsユーザーであればtask-managerのCPUタブから「仮想化:有効/無効」(Hyper-V)があり、LinuxだとKVMがそれにあたります。

Karnel

カーネルとはOSの基本機能の役割を担うソフトウエア
カーネルだけではOSを利用するのが困難なため別途ソフトウェアと組み合わせて利用するのが一般的
カーネルとソフトウェアを組み合わせたものをディストリビューションという
一般的に言われているCentOSやUbuntuは、Linuxカーネル+ソフトウェアのディストリビューションのことを指す


DockerHub

DockerHubとは

コンテンナを共有するためのサービス。
ユーザが作成したコンテナをアップロードして公開・共有ができるサービスのこと。
ここでアップロードされたコンテナは自由にダウンロードして自分のサーバーに簡単にデプロイできる。

参考
Docker Hubの使い方とGitHubからのDockerイメージ自動ビルド (1/2)


参考

dockerとvagrantの違い言える?新人エンジニアでも分かった気になれる俺流まとめ

Dockerfile

Dockerfileとは

Docker上で動作させるコンテナの構成情報を記述するためのファイルでのこと。
Dockerfileに記述された情報をもとにして、docker buildコマンドにてDockerイメージを作成する事が出来る。

記述方法

1行につき1つの操作を{命令}と{引数}でスペース区切りで記述する。
「docker build」コマンドで「Dockerfile」ファイルの上から順番に処理が実行される

# コメント
FROM iphp:7.1-fpm

命令と用途

命令 用途
FROM 元となるDockerイメージの指定
MAINTAINER 作成者の情報
RUN コマンドの実行
ADD ファイル/ディレクトリの追加
CMD コンテナーの実行コマンド 1
ENTRYPOINT コンテナーの実行コマンド 2
WORKDIR 作業ディレクトリの指定
ENV 環境変数の指定
USER 実行ユーザーの指定
EXPOSE ポートのエクスポート
VOLUME ボリュームのマウント

参考

Dockerfileとdocker buildコマンドでDockerイメージの作成 (1/2)
Dockerfileを極めて、Dockerマスターになろう!


Docker Compose

Docker Composeとは

Dockerは、1コンテナ1プロセスという思想が基本。1つのコンテナにすべての機能を詰め込まず、複数のコンテナを起動して、協調してシステムを構成しようという概念。

例えば、リバースプロキシのnginx、バックエンドのアプリケーション、データベースをそれぞれ別のコンテナで起動して、システムを構築する。それをYAMLの設定ファイルひとつで簡単に実現するのがDocker Compose。

docker-compose.ymlという設定ファイルに、どのコンテナを立ち上げるかを記述し、docker-compose upというコマンド1つ実行するだけで、必要なサービスがすべて立ち上がる。

これを活用することで、ミドルウェアの構成まで含めた開発環境の統一が可能になる。
(つまりコードベースで必要なアプリケーションやDBのコンテナ設定が出来る)

使い方

Docker Composeで構築したアプリケーションは、docker-compose buildコマンドでイメージを作成する。

build

自作のDockerfileを元にコンテナを起動する場合は、buildディレクティブを使用し、相対パスでDockerfileの位置を指定する。

image

配布されているイメージを元にコンテナを起動する場合は、imageディレクティブでイメージ名を指定する。

volumes

コンテナにマウントするボリューム(≒ ディレクトリ)を指定する。主な用途として以下が上げられる

  1. コンテナを停止してもデータを永続化したい
  2. ホスト上にあるファイルをコンテナ内で使用したい
  3. あるコンテナから出力されるファイルを他のコンテナから使用したい

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4