--mount=type=secret
や--mount=type=ssh
が導入されて、build
時にシークレット情報をセキュアに渡すこと可能になった。
(今まではbuild
時にシークレット情報を渡した場合に、image
にシークレット情報が埋め込まれてしまう場合があった)
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"
$ 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デーモンを使用するための認識が違った。 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で実行
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
CircleCIのDocker(quartetcom/ci-docker-packを実行するDocker)との相性?
その場合は setup_remote_docker
を指定することで解消する?