技術書庫 101号室

技術知見をまとめます。それ以外のこともたまに書きます。

初心者がまとめる初心者のためのDocker入門

Dockerとは何か

  • データやプログラムを隔離することができる仕組み
    (≒一つの物理サーバーに機能としてのサーバーを複数同居することができる)
  • この隔離する単位のことをコンテナという
  • コンテナを操作する仕組みを Docker Engine という

Dockerのメリット

  • ライブラリやソフトウェアのアップデートによる影響範囲を隔離されたコンテナ内で収めることができる
  • コマンドや設定ファイルのみで簡単に環境作成や削除ができる
  • 軽量である

Dockerが軽量である理由

  • 前提として Docker Engine はlinux環境でのみ動作する(=物理マシン上にlinuxがインストールされている必要があり、そのlinux上で Docker Engine は動作する)
  • 作成したコンテナ内にはlinuxがインストールされているがOSが丸々インストールされているわけではなく、ディストリビューションに当たる機能(IO機能など)のみがインストールされている
  • コンテナ内でプログラムが動作する際、コンテナは物理マシン上のlinuxカーネルを借りている、そのため余分なカーネルをコンテナ内にインストールする必要がないため動作か軽量になる

イメージとコンテナ

イメージとは

  • コンテナのもととなる設計図(ISOファイルのようなアーカイブファイルみたいなもの)
  • コンテナからもイメージファイルを作ることができる

ボリュームとマウント

ボリュームとは

マウントとは

  • ストレージや機器(マウスやキーボードなど)をOSやソフトウェアに認識させること
  • Dockerの文脈では、コンテナにボリュームを認識させて操作できるようにすること

Dockerにおける二つのボリュームのマウント方法

ボリュームマウント

  • Docker Engineが管理する領域内にボリュームを作成して、ディスクとしてコンテナにマウントさせる方法
  • コンテナを介して操作することが主なので、直接操作しづらい、滅多に触らないけど消してはいけないファイルなどに利用する

バインドマウント

  • ホストOSのディレクトリをコンテナにマウントさせる方法
  • ホストOS上にあるディレクトリ内を操作するだけでコンテナにも反映できるため、簡単に操作できる、頻繁に更新が起こるファイルなどに利用する

コンテナをイメージ化する方法

docker commit によるイメージ書き出し

  • コンテナをイメージとして書き出す方法

Dockerfileによるイメージ書き出し

  • Dockerfileに元となるイメージや実行コマンドを書き、それをビルドしてイメージを書き出す方法

コンテナへの操作

  • docker exec コマンドでlinuxコマンドを使用することができる
  • docker run 時にコマンドを付与することもできるがbash等のソフトウェアを動かすよう指定すると、コンテナで元々起動する予定だったソフトウェアが起動しなくなる
  • ただ、起動しているコンテナに対してbash起動しても動く

Docker Compose

Docker Composeとは

  • コンテナ作成やボリュームのマウント、ネットワークの設定を一つのyamlファイルで管理することで一括で複数のコンテナを作成できるソフトウェア

Dockerfile と Docker Compose は何が違うのか

  • Dockerfileは「イメージ」のみを作成することができる、コンテナ自体やネットワーク、ボリュームのマウントなどはできない
  • Docker Composeはコンテナ、ボリュームマウント、ネットワークの設定などを一挙に行うことができる