LoginSignup
2
2

More than 3 years have passed since last update.

Docker仕組みを大雑把に説明する

Last updated at Posted at 2019-10-15
1 / 10

Linuxチョットワカル人向けのDocker入門です。
Dockerの基盤部分には大きく分けて次の3つの機能があります:

  • コンテナの起動
  • コンテナの構築
  • コンテナの配布

コンテナの起動(リソースの管理)

  • chrootとよく似ている
    • ルートが変更されるのでそれより外のファイルシステムにはアクセスできない
    • OSの管理している他のリソース(CPU、メモリ、ブロックI/O、ネットワークなど)の制御はできない
  • これらを管理する機構を提供してくれるLinuxカーネルの機能がcgroup
    • dockerはこれらLinuxの仮想化機能を簡単に使えるようにするためのラッパー
  • ルートを変更するディレクトリはdockerがファイルシステムをまとめてダウンロードする
    • /var/lib/docker 以下のどこかに用意してくれる
    • aufs/overlayfs/btrfsでそれぞれ微妙に異なる

コンテナの起動(起動オプション)

docker run --interactive --tty ubuntu /bin/bash

として起動すると

  • ubuntuイメージを取得し(どうやって取得するかは次の節で説明します)
  • TTYを割り付け
  • 対話的にイメージ内の/bin/bashを起動します。

コンテナの起動(権限)

  • コンテナプロセスはコンテナデーモンの権限(通常Root)で実行される
    • ファイルシステムに書き込むと当然Rootとして書き込む
    • セキュリティ的に危険が危ない
  • 起動時にプロセスのUID/GIDが指定できる
docker run -it --user $(id -u):$(id -g) ubuntu /bin/bash
  • UID=1000とかでコンテナ内で/usr/binにインストールしようとして権限が無くて死ぬ
  • ホスト側のUID=1000とコンテナ内のUID=0を対応させたい = subuid/subgid

コンテナの配布(レジストリ)

  • Dockerにはコンテナのファイルシステムをまとめて配布する機能がある
  • コンテナを配布するサーバーの事をコンテナレジストリと呼ぶ
    • docker本家 docker.io の他に quay.io も有名
    • GitLabにも付属してるし、AzureやGCPはアカウント毎に作れる
    • dockerで簡単に構築できる
  • 個々のコンテナは[registry name]:[port]/[container name]:[tag]の形式で一意に指定される
docker pull myregistrydomain:port/foo/bar:latest

コンテナの配布(命名規則)

  • 慣習としてuser_name/container_nameのようにアカウント名・グループ名と個別のコンテナ名でつける
    • あるいはもっと深く group_name/team_name/task1 のようにつける
  • 省略することも出来て以下のデフォルト値になる

    • レジストリ: docker.io
    • ポート: HTTPSで通信するので443
    • タグ: latest
  • 主要なOSや各言語のイメージは特別にlibraryという名前空間がある

docker pull ubuntu
docker pull docker.io/library/ubuntu:latest

コンテナの配布(認証)

  • ダウンロードは主にHTTPSで行われ、認証は docker login で行う(これも省略するとdocker.ioになる)
    • HTTPはデフォルトで許可されていないので、どうしても必要な場合はSSLを無効化する設定をする
docker login myregistry

コンテナの構築

  • Dockerfileという独自の形式にコンテナ構築のためのレシピをシェルスクリプトで記述する
  • 典型的には各ディストリビューションや各言語のコンテナの上に必要なライブラリや実行ファイルを追加していく

今回扱わなかった内容

  • ネットワーク構成周り
    • 私があまり詳しくないので省きました(勉強したら追記します)
  • docker-machine
    • Dockerの環境自体を構築するためのツールです。HyperVとかKVM上に仮想マシン作ってDocker環境を用意するとかの機能があります
  • コンテナオーケストレーション、Kubernetes
    • コンテナをたくさん使てもっと複雑な事を行うためのレイヤーです
  • podman/buildah/skopeo
    • RedHat Enterprise Linuxにも標準搭載されてるコンテナ環境です
    • 上で説明した3つの機能、コンテナ実行・コンテナ構築・コンテナ配布がそれぞれ別プログラムとして提供されています
2
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
2
2