Docker 基礎知識


少し前にDockerを勉強したので、復習、あとあと振り返りやすいように投稿。
今回は本当に初歩的な部分且つ、用語の解説的な感じでかなりざっくりとした内容です。

Dockerとは

コンテナ型仮想環境を作成、実行、管理するためのプラットフォーム。
ミドルウェアのインストールや各種環境設定をコード化して管理する。(IaC)
Dockerを使用することで、誰でも同じ環境が作りやすい、環境を共有しやすい等のメリットがある。

よく使う用語

イメージ、コンテナ、デーモン

  • イメージ:雛形、アプリケーションに必要な物をすべてまとめたもの。
  • コンテナ:イメージを元に作成された仮想環境
  • デーモン:イメージ・コンテナの作成などの実際の処理を受け取り、実行する。

OS関係

  • ホストOS:仮想サーバーを起動させる側のOSのこと
  • ゲストOS :仮想化において、ホストOS上に作成された仮想マシン上で動作するOSのこと
  • カーネル:OSの中核

レジストリ・リポジトリ・タグ・ビルド

  • レジストリ:リポジトリを管理する場所
  • リポジトリ:Dockerイメージを保管するための入れ物
  • タグ:イメージに付けることができるラベル名、バージョンを記載することが多い
  • ビルド:DockerfileからDockerイメージを作成すること

ストレージドライバとAUFS

  • ストレージドライバ:ハードディスクなどのストレージにデータを書き込むための機能を持ったソフトウェア
  • AUFS:Dockerで使用できるストレージドライバの一種。(Dockerイメージをどのようにストレージに保持するのかを司るソフトウェアの一つ)

リバースプロキシ

クライアントとサーバの通信の間に入って、サーバの応答を代理(proxy)しつつ通信を中継する機能、あるいはその役割を担うサーバのこと

Docker Machine

Docker Engineを搭載した仮想マシンの作成や起動などがコマンドラインから実行できるツール

ネットワーク

  • ブリッジネットワーク:同一のDockerホスト上でコンテナ間通信するために使用されるネットワーク。同一のブリッジネットワークに属するコンテナ同士は相互に通信することができる。
  • デフォルトゲートウェイ:異なるネットワークに出る場合の出口となるIPアドレスのこと。
  • オーバーレイネットワーク:複数のDockerマシン(Dockerデーモンが動作するホスト)間で相互通信を可能にするためのネットワーク

Swarm

Swarm ModeとはDocker Engineの動作モードのことで、クラスタ管理機能、オーケストレーション機能を利用できる。

スケール

サーバーやコンテナの数を増やすことをスケールと言う。アクセス数が増えた場合にスケールして処理可能な数を増やすことで、処理速度を上げることができる。

Dockerイメージ

コンテナ実行に必要なファイルをまとめたファイルシステム。イメージ上のデータはレイヤーで構成され読み取り専用。コマンドを実行するたびにレイヤーが積み重なる。注意点として過去にインストールしたファイルなどについてはコンテナレイヤー(作業するレイヤー)で削除しても過去のレイヤーには残るためイメージのサイズは変わらない。そのため不用意にインストールするのはよくない。
またDockerイメージには継承がある。例えばイメージをインストールするとして、その中で過去にインストールしたレイヤーがあればその部分についてはインストールすることなく差分のみをインストールするようになっている。

ビルド関係

  • ビルドコンテキスト:Dockerイメージをビルドする際にDockerデーモンに送信するホストOS側のディレクトリのこと。ビルドコンテキスト上のファイルはビルド時に全てDockerデーモンに送信されるため、ビルドに不要なファイルは含めないことが推奨。ビルドコンテキストのファイルが全てイメージに取り込まれる訳ではなく、あくまで一時的にDockerデーモンに送信されるだけで、どのファイルをイメージに含めるかどうかはDockerfileに定義する。

  • Dockerfile:Dockerイメージを作成するための指示書となる設定ファイル

  • ビルドキャッシュ:Dockerイメージをビルドした際に、イメージのレイヤーごとにビルド結果をキャッシュ(一時保存)すること

  • Dockerfile基本的な記述

FROM 元となるイメージ:イメージタグ
RUN 実行したい命令(updateとかinstallなど)
CMD コマンドが作成されたあとで実行する命令

シェル接続

docker attachとdocker exexコマンドがあるが、特別な理由がない限りexecを使用するのが一般的。
違いはattachはコンテナのPID1のプロセスの標準入出力に接続し、exitするとコンテナそのものが停止する。
それに対し、execは新しく/bin/bashプロセスが立ち上げそちらで標準入出力に接続し、exitしてもexecした際に実行された/bin/bashプロセスが終了するだけなので、コンテナは停止しない。

基本的なdocker環境構築フロー

作業ディレクトリ作成
↓
Dockerfileとdocker-compose.yml作成
↓
Dockerイメージビルド
↓
コンテナ内で使用したいものをインストール
↓
コンテナ実行

参考文献

https://docs.docker.jp/
https://knowledge.sakura.ad.jp/13265/
https://cybersecurity-jp.com/column/34930
https://qiita.com/tkparasol/items/8fad83f54db2906dd26f
https://qiita.com/RyoMa_0923/items/9b5d2c4a97205692a560