LoginSignup
3
2

More than 5 years have passed since last update.

dockerについて理解した事をまとめた

Last updated at Posted at 2018-05-31

dockerを触った経緯

---------- iOSのアプリ開発中----------
ぼく「このAPI毎回違う値返して来てテスト書けねぇからswaggerでスタブ作ってみるか」

----------swagger学習中----------
ぼく「ちょっと動かせるぐらいになった!社内の凄腕エンジニアにMRお願いしよう。」

凄腕エンジニア「ローカル環境によって実行できたりできなかったりするので、docker化しました。MR出しました!」

ぼく「docker触った事ないけど、これを機に使い始めるか!」

dockerの理解を阻んでいた唯一の原因

Macで動くdockerって何?Linuxで動いてるんじゃないの?
Docker for Macがあるが、これはハイパーバイザでMacOS上にLinuxを立てて、その上でDocker Engineを動かしている。

この疑問がにわか知識では混乱の元になっていた。

DockerはLinux上でしか動かないよ!!!

今の所感じる便利なところ

ローカルの依存環境に左右されない。

複数の開発者間での共有が楽。ぶっちゃけ個人で使う場合には、ローカルで環境構築しても全く困らないが、1年後の自分とか別の人が使う時に手間が生まれる。それをdockerは楽にできる。

コンテナを作ったり壊したりできる。

ローカルへの影響を考えなくて良い。

Dockerについての理解まとめ

コンテナ

コンテナとは、ホストOSのkernelを使い複数のルート/ファイルシステムを実行する。各々のリソースを持つ独立した環境で、基本的にコンテナ外のリソースは参照できない。(volumeをマウントするなどの方法もある)

これらはLinuxカーネルの技術によって実現される。
Namespaces(名前空間によるプロセスの間の隔離、分離: isolation)
Cgroups( CPU・メモリ・Disk I/Oのリソース制限)

Docker Engine

CLIからの操作を受け取ってコンテナを操作するのは、このDocker Engine。デーモンとして動いている。

Docker Image

  • コンテナを実行する時に必要なファイルシステム
  • イメージ・レイヤの集合体
  • レイヤーには親子関係ある
  • 差分情報のみを記録する
  • レイヤーはRead Onlyで書き込みできない

DockerfileにRUN npm install とか書いておくと、新規レイヤーにnpm installして変更内容をコミットして、イメージをビルドしてくれる。

Docker imageを起動する時には、書き込み可能な新しいイメージレイヤが自動的に割り当てられる。

イメージの作成方法

  1. docker hubから取得
  2. コンテナの内容を手動コミットし、新しいイメージを取得する
  3. Dockerfileを使ってイメージを自動構築する。(docker build)
3
2
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
3
2