本記事はDockerのコマンドや多少の説明をメモしたものになります。
DockerfileはDockerのイメージを作成するための設計書のようなものになります。
以下はalpineイメージにbashをインストールしたイメージを用意しました。
FROM alpine
RUN apk add --no-cache bash
--no-cache
オプションを付けたのはイメージのサイズを減らすためになります。
以下のdocker buildコマンドでイメージを作成していきます。
$ docker build -t testimage .
書式は以下の通りになります。
docker build -t イメージ名 Dockerfileのパス
作成したイメージのデバッグをしてみます。
# イメージIDを確認
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
testimage latest 5744d7164c5e 3 seconds ago 7.75MB
alpine latest d4ff818577bc 4 days ago 5.6M
# docker runコマンドでコンテナを起動します。
$ docker run -it 5744d7164c5e /bin/bash
bash-5.1# ls
bin dev etc home lib media mnt opt proc root run sbin srv sys tmp usr va
docker runコマンドの詳細は以下になります。
docker run -it イメージID /bin/bash
またdocker runコマンドに似たコマンドとしてdocker execがあります。
こちらコンテナ起動と起動後にコマンドで何か実行したいときに行いますが、先にコンテナが実行されている必要があります。
# コンテナの実行
$ docker container run -itd testimage
# コンテナの確認
$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b7a16232e075 testimage "/bin/sh" 18 seconds ago Up 17 seconds hardcore_khorana
# コンテナ内でlsコマンド
$ docker exec -it b7a16232e075 ls
bin etc lib mnt proc run srv tmp var dev home media opt root sbin sys usr
コンテナ実行時のオプションに-itd
とdを付けることで、バックグラウンドでのコンテナ起動になります。
次にdockerイメージが作成される過程を見て見ます。 コマンドはdocker historyになります。
$ docker history 5744d7164c5e
IMAGE CREATED CREATED BY SIZE COMMENT
5744d7164c5e 23 minutes ago /bin/sh -c apk add --no-cache bash 2.15MB
d4ff818577bc 4 days ago /bin/sh -c #(nop) CMD ["/bin/sh"] 0B
<missing> 4 days ago /bin/sh -c #(nop) ADD file:f278386b0cef68136… 5.6MB
Dockerfileを修正してhistoryを見てみましょう
FROM alpine
RUN apk add --no-cache bash
COPY /work/test.txt /work/
Dockerfileがあるディレクトリにworkディレクトリを作成し、その下に適当にtest.txtを作成します。
COPYコマンドはホストのリソースをコンテナ内にコピーするコマンドになります。
ではイメージをビルドしていきます。
$ docker build -t testimage .
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
testimage latest 12420e87e99b 12 seconds ago 7.75MB
alpine latest d4ff818577bc 4 days ago 5.6MB
$ docker history 12420e87e99b
IMAGE CREATED CREATED BY SIZE COMMENT
12420e87e99b 51 seconds ago /bin/sh -c #(nop) COPY file:a655645a1219423e… 38B
5744d7164c5e 29 minutes ago /bin/sh -c apk add --no-cache bash 2.15MB
d4ff818577bc 4 days ago /bin/sh -c #(nop) CMD ["/bin/sh"] 0B
<missing> 4 days ago /bin/sh -c #(nop) ADD file:f278386b0cef68136… 5.6MB
先ほどのCOPYコマンドを加える前のイメージID(5744d7164c5e)に加わる形でイメージが作成されているのが分かります。
ではコンテナ内を見てみます。
$ docker run -it testimage /bin/bash
bash-5.1# ls work
test.txt
workディレクトリ配下にtest.txtが作成されていることが確認できます。
このようにDockerファイルの1行毎にレイヤーを重ねるようにしてイメージが作成されます。