docker
kubernetes

入門Kubernetes の 2 章をそのままやったら、docker build で COPY failed が発生した

入門Kubernetes を購入したので、早速手を出してみたら 2 章の途中でこけました。
メモとして残しておきます。

Dockerfile の COPY で指定するディレクトリが違う?

2.2.1 では、 Dockerfile を使い、実際に Docker イメージを作成します。

kuar というサンプルアプリケーションを使うので、

の README を元に、サンプルアプリをビルドし、Dockerfileを作成しました。

$ git clone https://github.com/kubernetes-up-and-running/kuard.git
$ cd kuard
$ make build
Dockerfile
# 参考:kuard の README.md
FROM alpine
COPY bin/1/amd64/kuard /kuard
ENTRYPOINT ["/kuard"]

しかし、入門 kubernetes の Dockerfile は、以下のようになっています。

Dockerfile
# 参考:入門kubernetes 2.2.1
FROM alpine
MAINTAINER kelsey Hightower <kelsey.hightower@kuar.io>
COPY bin/kuard /kuard
ENTRYPOINT ["/kuard"]

あれ? COPY で指定しているディレクトリが違う...

そこで

先ほどの make build によって、kuard 内に作成された、bin ディレクトリの構造を見てみると、

bin
├── 1
│   └── amd64
│       ├── kuard
│       └── linux_amd64
├── 2
│   └── amd64
│       ├── kuard
│       └── linux_amd64
└── 3
    └── amd64
        ├── kuard
        └── linux_amd64

(bin/kuard なんてなかった...)

...

試しに、参考書の Dockerfile (COPY bin/kuard /kuard の方) で、docker build を行うと、

$ docker build -t kuard-amd64:1 .
Sending build context to Docker daemon  64.93MB

...

Step 3/4 : COPY bin/kuard /kuard
COPY failed: stat /var/lib/docker/tmp/docker-builder735597194/bin/kuard: no such file or directory

必要なものが見つからないよと、怒られました。

...

というわけで、Dockerfile を以下のように書き換えました。

FROM alpine
MAINTAINER kelsey Hightower <kelsey.hightower@kuar.io>
COPY bin/1/amd64/kuard /kuard
ENTRYPOINT ["/kuard"]

そして、先ほど同様に docker build -t kuard-amd64:1 を行うと、Successfully built の文字が!
$ docker images で、Docker イメージが作成されたことも確認できました