A7手帳、浅海散子

A7サイズの手帳。何かを書く。

Dockerを完全に理解していく その1

Dockerのことは名前しか知らない(いまここ)

Dockerが何なのかよくわかってなかったので、チュートリアルを進めて理解する過程を書き留めておきます。以下は私がドキュメントを都度解釈した内容ですので、誤りが多々あるかと思います。ご了承ください。

すでにDocker DesktopのインストールとHello World的なコンテナをDocker Hubに公開してみるところまでは進めました。たぶん概要はわかったような気がしていますが、改めて確認していきます。

Dockerって何? 何がしたいの?

参照: Docker overview | Docker Documentation

アプリの開発環境、テスト環境、本番環境などをコンテナという単位で統一して、開発もテストも本番サーバでの運用も全部おなじ要領で済ませよう、というのがDockerのやりたいことです。具体例の一つを挙げます:

  • 複数人開発において、開発環境のコンテナを生成して共有する
  • 開発用コンテナでアプリを作り、テスト用コンテナにさくっとデプロイする
  • うまくいったら同じく本番コンテナにデプロイする
  • 本番コンテナは(Dockerコンテナを実行できるプラットフォーム上であれば)そのまま運用可能で、物理的な環境は自社サーバでもクラウドでもなんでもいい

やってることはほかの仮想環境を作るシステムと似てますが、大手の出してるスタートアップ環境を使ったり、クラウドサービスなどにコンテナごと突っ込んでそのまま動かすことができたりするのが大きな違いでしょうか。

Dockerの仕組み

Docker全体はいわゆるクライアント-サーバ方式をとっています。Docker-client (docker)とDocker-daemon (dockerd)がREST APIに則ってやりとりするのが基本です。

CLIのdockerを使えば、たとえば $ docker run のように、コマンドライン上でdockerdとやりとりできます。またGUIアプリのDocker DesktopをインストールすればGUIで操作することもできます。Docker Desktopにはdockerdをはじめとして Dockerを使うために必要なものが概ね備わっています。

また、GitでいうところのGitHubみたいなサービスがDockerにもあり、(後述する)Docker imageをリポジトリとして管理できます。たとえばDocker Hubから公開されているimageをpullして使うといった場面が想定できます。

とりあえず今日はここまでで……おつかれさまでした。