Docker Hardened Image ã䜿çšãã
Docker Hardened ImageïŒDHIïŒã¯ãDocker Hub äžã®ä»ã®ã€ã¡ãŒãžãšåæ§ã«äœ¿çšã§ããŸãã
DHI ãäžè¬çãªäœ¿ãæ¹ã«åŸã£ãŠãããdocker pull
ã§ååŸããDockerfile ã§åç
§ããdocker run
ã§ã³ã³ãããå®è¡ã§ããŸãã
äž»ãªéãã¯ãDHI ãã»ãã¥ãªãã£éèŠãã€æå³çã«ãããã«ã«èšèšãããŠããç¹ã§ãã
ãã®ãããäžéšã®ããªã¢ã³ãã«ã¯ã·ã§ã«ãããã±ãŒãžãããŒãžã£ãå«ãŸããŠããããããã©ã«ãã§é root ãŠãŒã¶ãŒãšããŠå®è¡ãããããšããããŸãã
æ¢åã®ã¯ãŒã¯ãããŒã倿Žããå¿ èŠã¯ãããŸããã ã€ã¡ãŒãžãæåã§ pull ããå Žåã§ããDockerfile ã§åç §ããå Žåã§ããCI ãã€ãã©ã€ã³ã«çµ±åããå Žåã§ããDHI ã¯ãããŸã§äœ¿ã£ãŠããã€ã¡ãŒãžãšåãããã«åäœããŸãã
ãã©ãŒãªã³ã° ãéã㊠DHI ã Organization ã®åå空éã«è¿œå ãããšããã®ã€ã¡ãŒãžã¯äœ¿çšå¯èœã«ãªããŸãã
ãã©ãŒãªã³ã°æžã¿ã®ãªããžããªã確èªããã«ã¯ãHardened Images ã«ã¿ãã°å ã®å ã®ã€ã¡ãŒãžã®ããŒãžã«ç§»åããView in repository ãéžæãããšããã©ãŒãªã³ã°ããããªããžããªã®äžèЧã衚瀺ãããŸãã
DHI å°å ¥æã®æ³šæç¹
Docker Hardened ImagesïŒDHIïŒã¯ãã»ãã¥ãªãã£åŒ·åã®ããã«æå³çã«ãããã«ãªæ§æãšãªã£ãŠããŸãã
æ¢åã® Dockerfile ããã¬ãŒã ã¯ãŒã¯ã DHI ã«çœ®ãæããå Žåã¯ã以äžã®ç¹ã«ã泚æãã ãã:
ç¹æ§ | 説æ |
---|---|
ã·ã§ã«ãããã±ãŒãžãããŒãžã£ãå«ãŸããªã | å®è¡æã€ã¡ãŒãžã«ã¯ã·ã§ã«ãããã±ãŒãžãããŒãžã£ãå«ãŸããŠããŸããããã«ãã¹ããŒãžã§ã¯ -dev ã -sdk ããªã¢ã³ãã䜿çšããŠã³ãã³ãå®è¡ãããã±ãŒãžã®ã€ã³ã¹ããŒã«ãè¡ããçæç©ãæå°æ§æã®å®è¡æã€ã¡ãŒãžã«ã³ããŒããŠãã ããã |
é root å®è¡ | å®è¡æã® DHI ã¯ããã©ã«ãã§é root ãŠãŒã¶ãŒãšããŠåäœããŸããã¢ããªã±ãŒã·ã§ã³ãç¹æš©ã¢ã¯ã»ã¹ãå¿ èŠãšããªãããšãããã³å¿ èŠãªãã¡ã€ã«ã«é root ãŠãŒã¶ãŒãã¢ã¯ã»ã¹å¯èœã§ããããšã確èªããŠãã ããã |
ããŒãå¶é | é root ãŠãŒã¶ãŒã§ã¯ãå€ãããŒãžã§ã³ã® Docker ãäžéšã® Kubernetes ç°å¢ã§ã¯ 1024 çªæªæºã®ããŒãã«ãã€ã³ãã§ããŸãããäºææ§ã®ããã«ã¯ 1025 çªä»¥äžã®ããŒãã䜿çšããŠãã ããã |
ãšã³ããªãŒãã€ã³ã | DHI ã«ã¯ããã©ã«ãã® ENTRYPOINT ãå«ãŸããŠããªãå Žåããæ¢åã®ã€ã¡ãŒãžãšã¯ç°ãªãèšå®ããããŠããå ŽåããããŸããã€ã¡ãŒãžæ§æã確èªããCMD ã ENTRYPOINT ã®æç€ºãå¿ èŠã«å¿ããŠèª¿æŽããŠãã ããã |
ãã«ãã¹ããŒãžãã«ãã®æŽ»çš | ãã¬ãŒã ã¯ãŒã¯ã䜿ãå Žåã¯å¿ ããã«ãã¹ããŒãžãã«ããå©çšããŸãããããã«ããäŸåé¢ä¿ã®ã€ã³ã¹ããŒã«ã«ã¯ -dev ã€ã¡ãŒãžã䜿çšããæçµã¹ããŒãžã§ã¯æå°æ§æã®å®è¡æã€ã¡ãŒãžã䜿ããŸãã |
TLS èšŒææž | DHIs include standard TLS certificates. You do not need to manually install CA certs. |
æ¢åã®ã¢ããªã±ãŒã·ã§ã³ãç§»è¡ããå Žåã¯ãæ¢åã¢ããªã±ãŒã·ã§ã³ã Docker Hardened Images ã«ç§»è¡ãã ãåç §ããŠãã ããã
DHI ã Dockerfile ã§äœ¿ãæ¹æ³
ã³ã³ããã®ããŒã¹ã€ã¡ãŒãžãšã㊠DHIïŒDocker Hardened ImageïŒã䜿çšããã«ã¯ãDockerfile ã® FROM
åœä»€ã§æå®ããŸã:
FROM <your-namespace>/dhi-<image>:<tag>
䜿çšãããããªã¢ã³ãã«å¿ããŠãã€ã¡ãŒãžåãšã¿ã°ã眮ãæããŠãã ããã
ããšãã°ããã«ãã¹ããŒãžã§ã·ã§ã«ãããã±ãŒãžãããŒãžã£ãå¿
èŠãªå Žå㯠-dev
ã¿ã°ã䜿çšããŸã:
FROM <your-namespace>/dhi-python:3.13-dev AS build
å©çšå¯èœãªããªã¢ã³ãã確èªããæ¹æ³ã«ã€ããŠã¯ãã€ã¡ãŒãžãæ¢çŽ¢ãã ãåç §ããŠãã ããã
ãã«ãã¹ããŒãžã® Dockerfile ã䜿ã£ãŠããã«ãã¹ããŒãžãšå®è¡ã¹ããŒãžãåããŸãããã
ãã«ãã¹ããŒãžã§ã¯ -dev
ããªã¢ã³ãã䜿çšããæçµã¹ããŒãžã§ã¯æå°æ§æã®å®è¡æã€ã¡ãŒãžã䜿ãã®ãããããã§ãã
Docker Hub ãã DHI ã pull ãã
Docker Hardened ImagesïŒDHIïŒã¯ãDocker Hub äžã®ä»ã®ã€ã¡ãŒãžãšåæ§ã«ãDocker CLIãDocker Hub Registry APIããŸã㯠CI ãã€ãã©ã€ã³å ãªã©ã®ããŒã«ã䜿ã£ãŠ pull ã§ããŸãã
以äžã¯ CLI ã䜿ã£ãŠ DHI ã pull ããäŸã§ã:
$ docker pull <your-namespace>/dhi-<image>:<tag>
ãã®æäœãè¡ãã«ã¯ãDocker Hub äžã§è©²åœã€ã¡ãŒãžãååšããåå空éãžã®ã¢ã¯ã»ã¹æš©ãå¿ èŠã§ãã
詳ãã㯠Docker Hardened Image ããã©ãŒãªã³ã°ãã ãåç §ããŠãã ããã
DHI ãå®è¡ãã
ã€ã¡ãŒãžã pull ããããdocker run
ã䜿ã£ãŠå®è¡ã§ããŸããããšãã°ãOrganization ã®åå空éã« dhi-python
ãªããžããªããã©ãŒãªã³ã°ãããŠããå Žåã以äžã®ããã«ã³ã³ãããèµ·åã㊠Python ã³ãã³ããå®è¡ã§ããŸã:
$ docker run --rm <your-namespace>/dhi-python:3.13 python -c "print('Hello from DHI')"
CI/CD ãã€ãã©ã€ã³ã§ DHI ã䜿çšãã
Docker Hardened ImagesïŒDHIïŒã¯ãCI/CD ãã€ãã©ã€ã³å ã§ãä»ã®ã€ã¡ãŒãžãšåæ§ã«äœ¿çšã§ããŸãã
Dockerfile å ã§åç §ãããããã€ãã©ã€ã³ã¹ãããã®äžã§ pull ãããããã«ãããã¹ãäžã«ã³ã³ãããšããŠå®è¡ããããšãå¯èœã§ãã
ãã ããäžè¬çãªã³ã³ããã€ã¡ãŒãžãšç°ãªããDHI ã«ã¯çœ²åä»ãã® ã¢ãã¹ããŒã·ã§ã³ïŒSBOM ããã«ãããããã³ã¹ãªã©ã®ã¡ã¿ããŒã¿ïŒãå«ãŸããŠããŸãã
CI/CD ããŒã«ã察å¿ããŠããã°ããããããã€ãã©ã€ã³ã«åã蟌ãããšã§ããœãããŠã§ã¢ãµãã©ã€ãã§ãŒã³ã®ã»ãã¥ãªãã£åŒ·åãããªã·ãŒãã§ãã¯ãç£æ»å¯Ÿå¿ãªã©ãå®çŸã§ããŸãã
DHI ãå ã«ã€ã¡ãŒãžããã«ãããéãèªåèªèº«ã®ã¢ãã¹ããŒã·ã§ã³ã远å ããããšãæ€èšããŠãã ããã
ããã«ãããã€ã¡ãŒãžã®ãã«ãçµç·¯ãææžåãããã®æŽåæ§ãæ€èšŒããäžæµã§ã®æ€èšŒã ããªã·ãŒé©çšïŒDocker Scout ãªã©ã䜿çšïŒã«åœ¹ç«ãŠãããšãã§ããŸãã
ãã«ãæã«ã¢ãã¹ããŒã·ã§ã³ãä»äžããæ¹æ³ã«ã€ããŠã¯ãDocker Build Attestations ãã芧ãã ããã
ã³ã³ãã€ã«æžã¿ãã€ããªåãã®éçã€ã¡ãŒãžã䜿çšãã
Docker Hardened Images ã«ã¯ãã³ã³ãã€ã«æžã¿ãã€ããªã極ããŠãããã«ãã€ã»ãã¥ã¢ãªå®è¡ç°å¢ã§åããããã«èšèšããã static
ã€ã¡ãŒãžãªããžããªãçšæãããŠããŸãã
-dev
ãªã©ã®ãã«ããŒçšã€ã¡ãŒãžããã«ãã¹ããŒãžã§äœ¿çšããããã§çæããããã€ããªã static
ã€ã¡ãŒãžã«ã³ããŒããããšã§ãå®å
šæ§ã®é«ãæå°æ§æã®ã³ã³ãããäœæã§ããŸãã
以äžã¯ãGo ã¢ããªã±ãŒã·ã§ã³ããã«ãããæå°æ§æã® static ã€ã¡ãŒãžã§å®è¡ãããã«ãã¹ããŒãž Dockerfile ã®äŸã§ã:
#syntax=docker/dockerfile:1
FROM <your-namespace>/dhi-golang:1.22-dev AS build
WORKDIR /app
COPY . .
RUN CGO_ENABLED=0 go build -o myapp
FROM <your-namespace>/dhi-static:20230311
COPY --from=build /app/myapp /myapp
ENTRYPOINT ["/myapp"]
ãã®ãã¿ãŒã³ã«ãããäžèŠãªã³ã³ããŒãã³ããäžåå«ãŸãªãããŒããã³ã°æžã¿ã®å®è¡ç°å¢ãå®çŸãããæ»æå¯Ÿè±¡é åãæå°éã«æããããšãã§ããŸãã
ãã¬ãŒã ã¯ãŒã¯ããŒã¹ã®ã¢ããªã±ãŒã·ã§ã³ã«ã¯ -dev ããªã¢ã³ãã䜿çšãã
PythonãNode.jsãGo ãªã©ãããã±ãŒãžãããŒãžã£ããã«ãããŒã«ãå¿
èŠãšãããã¬ãŒã ã¯ãŒã¯ããŒã¹ã®ã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããå Žåã¯ãéçºãŸãã¯ãã«ãã¹ããŒãžã§ -dev
ããªã¢ã³ãã䜿çšããŠãã ããã
ãããã®ããªã¢ã³ãã«ã¯ãããŒã«ã«ã§ã®å埩éçºã CI ã¯ãŒã¯ãããŒãæ¯ããããã®ã·ã§ã«ãã³ã³ãã€ã©ãããã±ãŒãžãããŒãžã£ãªã©ã®åºæ¬çãªããŒã«ãå«ãŸããŠããŸãã
-dev
ã€ã¡ãŒãžã¯ãéçºã«ãŒãã®å
åŽã CI ã®ãã«ãå°çšã¹ããŒãžãªã©ã§æŽ»çšããããšã§ãçç£æ§ãæå€§åã§ããŸãã
æ¬çªçšã®ææç©ãçæããæ®µéã§ã¯ãããå°ããªã©ã³ã¿ã€ã ããªã¢ã³ãã«åãæ¿ããããšã§ãæ»æå¯Ÿè±¡é åã®çž®å°ãšã€ã¡ãŒãžãµã€ãºã®åæžãå®çŸã§ããŸãã
以äžã¯ãPython ã¢ããªã±ãŒã·ã§ã³ã -dev
ããªã¢ã³ãã§ãã«ããã軜éãªã©ã³ã¿ã€ã ã€ã¡ãŒãžã§å®è¡ããäŸã§ãïŒ
#syntax=docker/dockerfile:1
FROM <your-namespace>/dhi-python:3.13-alpine3.21-dev AS builder
ENV LANG=C.UTF-8
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
ENV PATH="/app/venv/bin:$PATH"
WORKDIR /app
RUN python -m venv /app/venv
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
FROM <your-namespace>/dhi-python:3.13-alpine3.21
WORKDIR /app
ENV PYTHONUNBUFFERED=1
ENV PATH="/app/venv/bin:$PATH"
COPY image.py image.png ./
COPY --from=builder /app/venv /app/venv
ENTRYPOINT [ "python", "/app/image.py" ]
ãã®ãã¿ãŒã³ã§ã¯ããã«ãç°å¢ãšå®è¡ç°å¢ãåé¢ããããšã§ãäžèŠãªããŒã«ãæ¬çªã€ã¡ãŒãžããé€å€ããã€ã¡ãŒãžãµã€ãºãšã»ãã¥ãªãã£ãªã¹ã¯ã®åæžãäž¡ç«ããŠããŸãã