FROM ubuntu
RUN mkdir /app
RUN groupadd -r lirantal && useradd -r -s /bin/false -g lirantal lirantal
WORKDIR /app
COPY . /app
RUN chown -R lirantal:lirantal /app
USER lirantal
CMD node index.js
-
建立一個系統使用者( -r 選項),沒有密碼、沒有主目錄且沒有 shell;
-
將該使用者新增到前面(使用 groupadd )建立的使用者組;
-
最後一段引數設定了使用者名稱以及所屬的使用者組。
FROM node:10-alpine
RUN mkdir /app
COPY . /app
RUN chown -R node:node /app
USER node
CMD [“node”, “index.js”]
export DOCKER_CONTENT_TRUST=1
# fetch the image to be tested so it exists locally
$ docker pull node:10
# scan the image with snyk
$ snyk test --docker node:10 --file=path/to/Dockerfile
$ snyk monitor --docker node:10
FROM: ubuntu as intermediate
WORKDIR /app
COPY secret/key /tmp/
RUN scp -i /tmp/key build@acme/files .
FROM ubuntu
WORKDIR /app
COPY --from intermediate /app .
# syntax = docker/dockerfile:1.0-experimental
FROM alpine
# shows secret from default secret location
RUN --mount=type=secret,id=mysecret cat /run/secrets/mysecre
# shows secret from custom secret location
RUN --mount=type=secret,id=mysecret,dst=/foobar cat /foobar
COPY . .
private.key
appsettings.json
-
優先選用最詳細的映象標簽。例如,映象有 :8、:8.0.1 和 :8.0.1-alpine 等標簽,選擇最後這個,因為它提供了最詳細的資訊。不要使用像 latest 這樣過於泛泛的標簽。
-
記住,映象的釋出者有可能刪除映象的某個標簽。如果設定了所用映象的標簽,一旦這個標簽被刪除,映象構建會因為找不到基礎映象而失敗。為了避免這個問題,可以提前把該映象複製到私有映象中心或者公有映象中心的私人賬戶下麵。這麼做,保證了映象的不可更改性,同時也帶來了維護私有映象中心的負擔。
-
使用比簽名更具體的 SHA256 取用指明要使用的映象,這能保證每次拉取都是相同內容的映象。這麼做也有風險,如果映象改變了,以前的 SHA256 取用(雜湊值)也不存在了。
-
COPY – 將本地檔案或者目錄(遞迴)複製到容器映象中的標的目錄,複製來源和標的都必須明確指定。
-
ADD – 與 COPY 類似的功能,有兩個不同:(1)如果複製來源是本地壓縮檔案,ADD 將把該檔案解壓縮到標的目錄;(2)ADD 也可以將遠端 URL 指定的檔案下載到標的目錄。
-
使用 ADD 從遠端 URL 下載檔案,存在中間人攻擊的風險,檔案內容有可能因此被篡改。必須確保遠端 URL 必須是安全的 TLS 連結,校驗遠端 URL 的來源和身份。譯者註:實際上,官方檔案並不鼓勵使用 ADD 新增遠端檔案。
-
如果複製的是本地壓縮檔案, ADD 自動將它解壓縮到標的目錄,這有可能觸發 zip 炸彈或者 zip 任意檔案改寫漏洞。
-
相比較而言,使用 COPY 複製檔案或目錄,會建立一個快取的中間映象層,最佳化映象構建的速度。
LABEL maintainer="me@acme.com"
LABEL securitytxt="https://www.example.com/.well-known/security.txt"
-
第一個映象——非常大的映象,包含了構建應用和執行測試所需的所有依賴;
-
第二個映象——非常小的映象,只包含執行應用所需的極少數依賴。
-
https://res.cloudinary.com/snyk/image/upload/v1551798390/Docker_Image_Security_Best_Practices_.pdf
-
https://snyk.io/blog/shifting-docker-security-left/
-
https://snyk.io/blog/top-ten-most-popular-docker-images-each-contain-at-least-30-vulnerabilities/
-
https://snyk.io/container-vulnerability-management/
-
https://github.com/nodejs/docker-node/blob/master/docs/BestPractices.md
-
https://docs.docker.com/engine/security/trust/content_trust/
-
https://snyk.io/blog/10-docker-image-security-best-practices/
-
https://securitytxt.org/
-
https://github.com/opencontainers/image-spec
-
https://snyk.io/container-vulnerability-management/
朋友會在“發現-看一看”看到你“在看”的內容