本文最后编辑于  前,其中的内容可能需要更新。
                
                
                    
                
                
                Earthly工具尝试
最近发现一个比较有意思的镜像构建工具Earthly,文档地址
根据Earthly工具的介绍,它相当于Dockerfile+MAkefile+Bash
简单部署
根据官网文档简单试用一下:
因为各种原因,个人选择在docker:dind的容器环境中尝试使用。
启动docker:dind容器:
1
   | docker run -d --privileged  docker:dind
   | 
 
在容器中:
1 2
   | wget https://github.com/earthly/earthly/releases/download/v0.5.19/earthly-linux-amd64 -O /usr/local/bin/earthly && chmod +x /usr/local/bin/earthly #安装earthly
   | 
 
官网例子
1 2 3 4
   | test/ ├── Earthfile └── src     └── hello.py
   | 
 
Earthfile:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
   | FROM python:3 WORKDIR /test   build:           COPY src src     SAVE ARTIFACT src /src
  docker:     COPY +build/src src     ENTRYPOINT ["python3", "./src/hello.py"]     RUN echo "tag: $TAG"     SAVE IMAGE python-example:latest
 
   | 
 
hello.py:
执行build部分:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
   | earthly  +build            bootstrap | Bootstrapping successful.            buildkitd | Starting buildkit daemon as a docker container (earthly-buildkitd)...       buildkitd-pull | Pulling buildkitd image...       buildkitd-pull | ...Done            buildkitd | ...Done             python:3 | --> Load metadata linux/amd64              context | --> local context .                +base | --> FROM python:3                +base | [          ] resolve docker.io/library/python:3@sha256:8926eeefa354a195ba51309c5df6f381811dacad53da2d6f8242ee075736d1d4 ... 0%              context | [██████████] resolve docker.io/library/python:3@sha256:8926eeefa354a195ba51309c5df6f381811dacad53da2d6f8242ee075736d1d4 ... 100%              ongoing |               ongoing |                 +base | --> WORKDIR /test              ongoing | +base (5 seconds ago)               +build | --> COPY src src               output | --> exporting outputs =================================== SUCCESS ====================================
   | 
 
执行docker部分
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
   | /test # earthly  +docker            buildkitd | Found buildkit daemon as docker container (earthly-buildkitd)             python:3 | --> Load metadata linux/amd64                +base | --> FROM python:3              context | --> local context .                +base | [██████████] resolve docker.io/library/python:3@sha256:8926eeefa354a195ba51309c5df6f381811dacad53da2d6f8242ee075736d1d4 ... 100%              context | transferred 0 file(s) for context . (54 B, 2 file/dir stats)                +base | *cached* --> WORKDIR /test               +build | *cached* --> COPY src src               +build | --> SAVE ARTIFACT src +build/src              +docker | --> COPY +build/src src               output | --> exporting outputs               output | [██████████] exporting layers ... 100%               output | [██████████] exporting manifest sha256:6a1de82c98188800693691d45673e58b56ce7ae5da64a884b7c7f511a6cd2584 ... 100%               output | [██████████] exporting config sha256:aaf41e55619a181ffe17a9925ba449154fbc9fb404640e1d821b285f94b0bd4d ... 100%               output | [██████████] transferring (via tar) docker.io/library/python-example:latest ... 100% ================================ SUCCESS [main] ================================              +docker | Image +docker as python-example:latest
   | 
 
Earthly + Gitlab-CI简单实践
备注:此处仅做演示,故仅采用docker:dind容器来进行CI,仓库仍采用上面的python演示仓库    
1 2 3 4 5
   | ../testproject ├── Earthfile ├── README.md └── src     └── hello.py
   | 
 
Earthfile
1 2 3 4 5 6 7 8 9 10 11 12 13 14
   | FROM python:3 WORKDIR /test ARG TAG ARG IMAGE build:           COPY src src     SAVE ARTIFACT src /src
  docker:     COPY +build/src src     ENTRYPOINT ["python3", "./src/hello.py"]     RUN echo "using tag: $TAG"     SAVE IMAGE --push $IMAGE:$TAG
   | 
 
.gitlab-ci.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
   | stages:   - build
  variables:   DOCKER_HOST: tcp://localhost:2375   DOCKER_TLS_CERTDIR: ""
  build-project:   stage: build   image: docker:19.03.1   services:     - docker:19.03.1-dind   retry: 2   before_script:     - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY          - /bin/sh -c 'wget https://github.com/earthly/earthly/releases/download/v0.5.19/earthly-linux-amd64 -O /usr/local/bin/earthly && chmod +x /usr/local/bin/earthly'        script:     - earthly +build     - earthly --build-arg IMAGE=$CI_REGISTRY_IMAGE  --build-arg TAG=$CI_COMMIT_SHORT_SHA --push +docker
   | 
 
等待执行完毕即可,生产环境清使用专有earthly镜像