Docker入門(メモ)

本記事はDockerのコマンドや多少の説明をメモしたものになります。

Dockerfile

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行毎にレイヤーを重ねるようにしてイメージが作成されます。