入門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
# 参考:kuard の README.md
FROM alpine
COPY bin/1/amd64/kuard /kuard
ENTRYPOINT ["/kuard"]
しかし、入門 kubernetes の 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 イメージが作成されたことも確認できました