#
ドキュメント

Document

自分のための備忘録です。

Docker BuildKit

build時の命令実行形式の変更

  • BuildKitを無効:Dockerfileの命令を上から逐次的に実行
  • BuildKitを有効:Dockerfileの命令を並列で実行可能

build時のセキュアな秘密情報の受け渡し

--mount=type=secret--mount=type=sshが導入されて、build時にシークレット情報をセキュアに渡すこと可能になった。
(今まではbuild時にシークレット情報を渡した場合に、imageにシークレット情報が埋め込まれてしまう場合があった)

build時にGitHubからCloneするために秘密鍵を渡す例

FROM alpine

RUN apk update && \
    apk add git && \
    apk add --no-cache openssh-client

# /rootを~に変えるとエラーが発生(GIT_SSH_COMMAND='ssh -i /root/.ssh/id_ed25519'が原因かもしれない)
RUN mkdir -p -m 0700 /root/.ssh && ssh-keyscan github.com >> /root/.ssh/known_hosts
RUN echo -e "Host github.com\n\tStrictHostKeyChecking no\n" > /root/.ssh/config
RUN --mount=type=secret,id=ssh,dst=/root/.ssh/id_ed25519 GIT_SSH_COMMAND='ssh -i /root/.ssh/id_ed25519' git clone {{github repository}}

秘密鍵は以下の方法で作成した。
**パスフレーズを設定すると--mount=type=secretではエラーになるので、パスフレーズなしで作成。 **

ssh-keygen -t ed25519 -C "your_email@example.com"

ref. https://docs.github.com/en/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent

$ docker build -t github:latest --secret id=ssh,src=$HOME/.ssh/id_ed25519 .

秘密鍵は、imageに残らない。

--progressオプションを指定すれば詳細を表示しながらbuildされる。

$ docker build  --no-cache --progress=plain -t github:latest --secret id=ssh,src=$HOME/.ssh/id_ed25519 .

Docker内でDockerを動かす(DooD)

Dockerコンテナ内でDockerデーモンを使用するための認識が違った。 Dockerコンテナ内でDockerデーモンを使用するには、ホストのDockerデーモンを使用する必要があった。 ホストのDockerデーモンをコンテナ内から使用するためにdockerソケットをマウントしてコンテナを起動する。

$ docker run --privileged -itd -v /var/run/docker.sock:/var/run/docker.sock -v $(pwd):/var --name skynet quartetcom/ci-docker-pack

※ ローカルのdockerソケット

$ ll /var/run/docker.sock
lrwxr-xr-x  1 root  daemon    38B  4 11 08:55 /var/run/docker.sock -> /Users/h-sawai/.docker/run/docker.sock

サンプルのdocker-compose.ymlで実行

docker-compose.yml
version: '3'
services:
  nginx:
    image: nginx:latest
    ports:
      - 8080:80
    volumes:
      - ./src:/usr/share/nginx/html
      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - php-fpm
  php-fpm:
    image: my-php-fpm
    build:
      context: .
      dockerfile: ./php-fpm/Dockerfile
    volumes:
      - ./src:/var/www/html
$ docker exec -it skynet /bin/bash
bash-5.1# cd /var
bash-5.1# docker-compose build
[+] Building 10.7s (5/5) FINISHED
 => [internal] load build definition from Dockerfile                                                                                  0.0s
 => => transferring dockerfile: 53B                                                                                                   0.0s
 => [internal] load .dockerignore                                                                                                     0.0s
 => => transferring context: 2B                                                                                                       0.0s
 => [internal] load metadata for docker.io/library/php:7.4-fpm                                                                        2.5s
 => [1/1] FROM docker.io/library/php:7.4-fpm@sha256:45700c288e4fa243c3ba06ff45779c73e1801f2d7b60d24a81afccc802851ee6                  8.1s
 => => resolve docker.io/library/php:7.4-fpm@sha256:45700c288e4fa243c3ba06ff45779c73e1801f2d7b60d24a81afccc802851ee6                  0.0s
 => => sha256:63cf7574573d0f63818130302247fc08e99f40a8c2b9b7be197cef5fe5006264 91.60MB / 91.60MB                                      3.1s
 => => sha256:45700c288e4fa243c3ba06ff45779c73e1801f2d7b60d24a81afccc802851ee6 1.86kB / 1.86kB                                        0.0s
 => => sha256:6e47401ba6138ab9b71e3612e1ac6855dcbe471f61981c841d601420cf941601 2.41kB / 2.41kB                                        0.0s
 => => sha256:f0d29848639a81e68d21e33fc6d5bb5a67a3a6cdd8cc84d6762d42f6f0a45189 11.38kB / 11.38kB                                      0.0s
 => => sha256:214ca5fb90323fe769c63a12af092f2572bf1c6b300263e09883909fc865d260 31.38MB / 31.38MB                                      1.0s
 => => sha256:cd813a1b2cb8a76f5b4f268f422edd8f2cdea4c0354dd4762ea7b1d1e1c766de 224B / 224B                                            0.2s
 => => sha256:54c27146d16e29ce547bb7328aca3930153a051520bbeb17e85b2548c164d71b 269B / 269B                                            0.9s
 => => sha256:aebd32bf315c4cbe94b61e8d209b4ee8e30bc3bf7ad155cf0eb3acceab0517df 491B / 491B                                            1.2s
 => => sha256:7104e4c793bbb652a434bd92932945083baa6f8d7a796dfe2f31115f5a510d4e 10.74MB / 10.74MB                                      1.5s
 => => extracting sha256:214ca5fb90323fe769c63a12af092f2572bf1c6b300263e09883909fc865d260                                             2.3s
 => => sha256:3f4d777e668ad2a3410fa59bc81e5472c49bec040259fd6d596506afa5bafc93 25.40MB / 25.40MB                                      2.9s
 => => sha256:9a5e2cb70c3491838b48a3d530bcf27f773a5c75ff5c1ae047dadc911c769640 2.45kB / 2.45kB                                        1.7s
 => => sha256:40aa7c55c06e83690a871d5db4acc8d6c8fa3ddf14141d9f96699886ea25b343 245B / 245B                                            2.0s
 => => sha256:910529b6e6f39885105bf96887abfe08dd85c2b9313ba95149f3bc86e62262bb 8.45kB / 8.45kB                                        2.2s
 => => extracting sha256:cd813a1b2cb8a76f5b4f268f422edd8f2cdea4c0354dd4762ea7b1d1e1c766de                                             0.0s
 => => extracting sha256:63cf7574573d0f63818130302247fc08e99f40a8c2b9b7be197cef5fe5006264                                             3.2s
 => => extracting sha256:54c27146d16e29ce547bb7328aca3930153a051520bbeb17e85b2548c164d71b                                             0.0s
 => => extracting sha256:7104e4c793bbb652a434bd92932945083baa6f8d7a796dfe2f31115f5a510d4e                                             0.1s
 => => extracting sha256:aebd32bf315c4cbe94b61e8d209b4ee8e30bc3bf7ad155cf0eb3acceab0517df                                             0.0s
 => => extracting sha256:3f4d777e668ad2a3410fa59bc81e5472c49bec040259fd6d596506afa5bafc93                                             0.9s
 => => extracting sha256:9a5e2cb70c3491838b48a3d530bcf27f773a5c75ff5c1ae047dadc911c769640                                             0.0s
 => => extracting sha256:40aa7c55c06e83690a871d5db4acc8d6c8fa3ddf14141d9f96699886ea25b343                                             0.0s
 => => extracting sha256:910529b6e6f39885105bf96887abfe08dd85c2b9313ba95149f3bc86e62262bb                                             0.0s
 => exporting to image                                                                                                                0.0s
 => => exporting layers                                                                                                               0.0s
 => => writing image sha256:1abae8fca4c6c2b92bb93e213cfd398cc653a1aee31952c7f2e8f0c185a162bf                                          0.0s
 => => naming to docker.io/library/my-php-fpm

DOCKER_BUILDKIT=1を明示的に有効化してもエラーは発生しない。

env DOCKER_BUILDKIT=1 docker-compose build
[+] Building 1.8s (5/5) FINISHED
 => [internal] load build definition from Dockerfile                                                                                  0.0s
 => => transferring dockerfile: 53B                                                                                                   0.0s
 => [internal] load .dockerignore                                                                                                     0.0s
 => => transferring context: 2B                                                                                                       0.0s
 => [internal] load metadata for docker.io/library/php:7.4-fpm                                                                        1.7s
 => CACHED [1/1] FROM docker.io/library/php:7.4-fpm@sha256:45700c288e4fa243c3ba06ff45779c73e1801f2d7b60d24a81afccc802851ee6           0.0s
 => exporting to image                                                                                                                0.0s
 => => exporting layers                                                                                                               0.0s
 => => writing image sha256:1abae8fca4c6c2b92bb93e213cfd398cc653a1aee31952c7f2e8f0c185a162bf                                          0.0s
 => => naming to docker.io/library/my-php-fpm

(wip)対応策

CircleCIのDocker(quartetcom/ci-docker-packを実行するDocker)との相性?
その場合は setup_remote_dockerを指定することで解消する?