Adrian Mouat : Docker

作成日 : 2001-05-31
最終更新日 :

要旨

目次などの情報は下記にある。

https://www.oreilly.co.jp/books/9784873117768/

コンテナ

コンテナとは、本書にある通り、〈アプリケーションを依存対象とともにカプセル化したもの〉である。 では、仮想マシン(Virtual Machine, VM)と何が違うのか。どちらも、 〈隔離された OS の環境を持ち、その中でアプリケーションを起動させることができる。〉しかし、 コンテナは、ホスト OS と資源を共有するので VM より効率的だ。ただコンテナは VM より隔離の度合いが弱く、 コンテナの分離機能がどの程度か見極めないといけない、というのがこの本の最初に書かれている。

面白いのは、pp.7-8 にある「運送への比喩」というコラムである。 コンピュータコンテナ技術を運送コンテナにたとえるのは、非常にわかりやすい。 そして、図 1-3 に掲載されているのは、1940 年、イングランドのブリストルで働く港湾労働者、 というキャプションがつけられた写真だ。この写真で見える荷物は、コンテナではなく、 吊り上げられたパレットに何十個もの木箱が載せられた積み荷だ。 今、大きな港でこんな光景は見慣れないだろう。それほどまでに、運送のコンテナ技術は画期的だったと思う。

インストール

Docker というコンテナ管理ソフトウェアがあることは聞いていたが、 私が使っているコンピュータは Windows 10 の Home Edition だ。おまけに機種も古い。 Widnwos 7 から使っているほどだ。 OS が Windows 8, Windows 8.1, Windows 10 とバージョンアップしていくのにつれて、 かろうじて対応できたマシンだから、非力だ。だから Docker など動くことはあるまい、 と思っていた。ところが、私のコンピュータでも Docker が動いた。下記の通り実行しただけだ。
https://qiita.com/zaki-lknr/items/db99909ba1eb27803456
なお、私の環境では既に WSL2 をインストールしていて稼働している環境だったが、特に問題はなかった。 環境は下記のとおりである。

PS C:> docker version
Client:
 Cloud integration: 1.0.14
 Version:           20.10.6
 API version:       1.41
 Go version:        go1.16.3
 Git commit:        370c289
 Built:             Fri Apr  9 22:49:36 2021
 OS/Arch:           windows/amd64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          20.10.6
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.13.15
  Git commit:       8728dd2
  Built:            Fri Apr  9 22:44:56 2021
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.4.4
  GitCommit:        05f951a3781f4f2c1911b05e61c160e9c30eaa8e
 runc:
  Version:          1.0.0-rc93
  GitCommit:        12644e614e25b05da6fd08a38ffa0cfe1903fdec
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0
PS C:> docker-compose version
docker-compose version 1.29.1, build c34c88b2
docker-py version: 5.0.0
CPython version: 3.9.0
OpenSSL version: OpenSSL 1.1.1g  21 Apr 2020

はじめの一歩

3章は「はじめの一歩」である。ここで紹介されていたコマンドを実行し、下記の結果を得た。

PS C:> docker run debian echo "Saluton, Mondo"
Unable to find image 'debian:latest' locally
latest: Pulling from library/debian
d960726af2be: Pull complete
Digest: sha256:acf7795dc91df17e10effee064bd229580a9c34213b4dba578d64768af5d8c51
Status: Downloaded newer image for debian:latest
Saluton, Mondo

あいさつ文を除き、p.19 の通りである

p.21 では、<Docker がコンテナをホストから指定するときの名前は、ランダムな形容詞に有名な (科学者|エンジニア|ハッカー)の名前をつなげたものになる>と解説されている。 私が見てみたら、affectionate_faraday だった。Faraday はわかる。 他にも過去に作られたコンテナの名前を調べると、nostalgic_noether や、 crazy_khayyam があった。 noether は誰だろう。数学者のエミー・ネーターのことだろうか。 khayyam もわからなかった。ウマル・ハイヤームのことらしい。

さて、p.25 の Dockerfile を書き込んで docker build コマンドを実行するが、うまくいかない。

PS C:> docker build -t test/cowsay-dockerfile .
[+] Building 0.7s (5/5) FINISHED
 => [internal] load build definition from Dockerfile                                                               0.1s
 => => transferring dockerfile: 116B                                                                               0.0s
 => [internal] load .dockerignore                                                                                  0.0s
 => => transferring context: 2B                                                                                    0.0s
 => [internal] load metadata for docker.io/library/debian:wheezy                                                   0.0s
 => CACHED [1/2] FROM docker.io/library/debian:wheezy                                                              0.0s
 => ERROR [2/2] RUN apt-get update && apt-get install -y cowsay fortune                                            0.4s
------
 > [2/2] RUN apt-get update && apt-get install -y cowsay fortune:
#5 0.409 E: Method http has died unexpectedly!
#5 0.409 E: Sub-process http received a segmentation fault.
#5 0.409 E: Method http has died unexpectedly!
#5 0.409 E: Sub-process http received a segmentation fault.
------
executor failed running [/bin/sh -c apt-get update && apt-get install -y cowsay fortune]: exit code: 100

Dockerfile の FROM debian:wheezy という行を FROM debian に書き直したら、 正常に終了した。調べてみたら、wheezy は長期サポート (Long Term Support、LTS) を受けられるが、それでもサポートは 2018 年 5 月末までだったのだ。

それはともかく、cowsay はすばらしい冗談コマンドだ。

Docker の基礎

4章はDockerの基礎である。しかし、私はこの章は飛ばした。Docker のドキュメントは下記の Web サイト
https://docs.docker.com/engine/reference/builder/
にあるということを確認しただけである。

開発での Docker の利用

5章では、Python での Flask の利用を例に、開発で Docker を利用する方法を解説している。 私も同じようにやってみようと思ったのだが、うまくいかない。

PS C:> docker run -d -p 5000:5000 identidock
6cd4d0736669e4c736e73da4e9e8374e00a944461e14a1c86561a1a228cea781
PC C:> curl localhost:5000
curl: (7) Failed to connect to localhost port 5000: Connection refused

ここであきらめた。

書誌情報

書 名 Docker
著 者 Adrian Mouat
発行日 2016 年 8 月 12 日(初版第1刷)
発行元 オライリー・ジャパン
定 価 3,600円(本体)
サイズ
ISBN 978-4-87311-776-8
その他 越谷市立図書館で借りて読む

まりんきょ学問所コンピュータの部屋コンピュータの本開発環境 > Docker


MARUYAMA Satosi