以下の内容はhttps://doiluxng.hatenablog.com/entry/2018/02/25/204011より取得しました。


【気になったこと】DockerFileにCOPYでワイルドカードを指定しているときにファイル増えたらどうなる?

僕のDockerについてのゆるい知識にによると、内部的にDockerFileに記述されたステップごとにイメージを持っているため、DockerFileに記述を追加したときには差分だけの反映で済むので比較的高速にイメージの再構成ができたと思う(まちがってたらすみません)

つまり、こんなDockerFileでイメージを作っていて

FROM centos/mysql-57-centos7:latest

MAINTAINER doilux

COPY sql/*sh /opt/app-root/src/mysql-init/

CMD ["run-mysqld"]

COPYのあとにRUNを足してイメージを作ると

FROM centos/mysql-57-centos7:latest

MAINTAINER doilux

COPY sql/*sh /opt/app-root/src/mysql-init/

RUN echo "Hello!!"

CMD ["run-mysqld"]

COPYの部分まで反映したイメージを使って、差分を反映してイメージをつくるはず。 実際にイメージを作って見ると、COPYまではcacheを使っているように見える。

$ docker build ./ -t my-image2                                                                                                                                  20:33:46
Sending build context to Docker daemon   5.12kB
Step 1/6 : FROM centos/mysql-57-centos7:latest
 ---> d3bdf6433e42
Step 2/6 : MAINTAINER doilux
 ---> Using cache
 ---> bf75d2490907
Step 3/6 : ENV MYSQL_ROOT_PASSWORD=password         MYSQL_DATABASE=doilux         MYSQL_PASSWORD=doilux         MYSQL_USER=doilux
 ---> Using cache
 ---> 29940e9713f8
Step 4/6 : COPY sql/*sh /opt/app-root/src/mysql-init/
 ---> Using cache
 ---> 03cd23e70c26
Step 5/6 : RUN echo "Hello!!"
 ---> Running in be2bd23b44de
Hello!!
Removing intermediate container be2bd23b44de
 ---> 1ebeb6e00f05
Step 6/6 : CMD ["run-mysqld"]
 ---> Running in 727eb999fc09
Removing intermediate container 727eb999fc09
 ---> e33e4cbd0edb
Successfully built e33e4cbd0edb
Successfully tagged my-image2:latest

ふむ、、、とすると、COPY sql/*sh /opt/app-root/src/mysql-init/としている部分、sqlディレクトリ配下にシェルスクリプトを追加してもDockerFile自体は変わっていないのでイメージに反映されないんじゃないかという気がします。

ということで実験してみます。sql配下にファイルを追加します。

#!/bin/bash

echo "test dayo"

イメージつくる。cacheは使っていないようです。

$ docker build ./ -t my-image3
Sending build context to Docker daemon  6.144kB
Step 1/5 : FROM centos/mysql-57-centos7:latest
 ---> d3bdf6433e42
Step 2/5 : MAINTAINER doilux
 ---> Using cache
 ---> bf75d2490907
Step 3/5 : ENV MYSQL_ROOT_PASSWORD=password         MYSQL_DATABASE=doilux         MYSQL_PASSWORD=doilux         MYSQL_USER=doilux
 ---> Using cache
 ---> 29940e9713f8
Step 4/5 : COPY sql/*sh /opt/app-root/src/mysql-init/
 ---> cadce1fd8d18
Step 5/5 : CMD ["run-mysqld"]
 ---> Running in 713db1fa62c3
Removing intermediate container 713db1fa62c3
 ---> dbe86708aec5
Successfully built dbe86708aec5
Successfully tagged my-image3:latest

コンテナを起動してみる。

$ docker run my-image3
...
=> sourcing 3_test.sh ...
test dayo
...

ちゃんとシェルを実行してくれました。

ということで、DockerFileに変更がなくても、DockerFileが使っている外部リソースに変更があったら、ちゃんとそこからの差分を反映してイメージを作ってくれます。うん、優秀だ。




以上の内容はhttps://doiluxng.hatenablog.com/entry/2018/02/25/204011より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14