Docker - родительское изображение для изображений на основе Node.js. - PullRequest
0 голосов
/ 10 октября 2019

Я пытаюсь создать образ докера на основе Node.js. Для этого я ищу варианты Родительское изображение . Безопасность - одно из главных соображений в изображении, и мы хотели укрепить изображение, не допуская оболочки или удара в контейнере.

Google Distroless действительно предоставляет эту опцию, но Distroless-NodeJS находится на экспериментальной стадии и не рекомендуется для производства.

Возможные варианты, которые я могу придумать (компрометирующие Distrolessособенность):

  • Официальный образ узла (https://hub.docker.com/_/node/) / изображение на основе Alpine / CentOS (но я думаю, что у всех будет оболочка).

С этимкак говорится,

  • Есть ли какая-либо альтернатива для Distroless?

  • Каковы наилучшие варианты родительского изображения для образа докера на основе Node.js. ?

Любые указатели будут полезны.

Ответы [ 3 ]

0 голосов
/ 10 октября 2019

Я думаю, вы можете создать образ с нуля, который содержит только ваше приложение узла и требуемую зависимость, ничего более, даже не ls or pwd и т. Д.

FROM node as builder

WORKDIR /app

COPY . ./

RUN npm install --prod

FROM astefanutti/scratch-node

COPY --from=builder /app /app
WORKDIR /app
ENTRYPOINT ["node", "bin/www"]

ноль-узел

Поэтому, если кто-то попытается получить оболочку, например,

docker run --entrypoint bash -it my_node_scratch

Получит ошибку

docker: Ответ об ошибке от демона: Ошибка выполнения среды выполнения OCI: container_linux.go: 348: запуск процесса контейнера вызвал "exec: \" bash \ ": исполняемый файл не найден в $ PATH": неизвестно.

0 голосов
/ 10 октября 2019

Я ссылаюсь на это из официального изображения докера Node.js. Создайте файл Docker в вашем проекте. Затем создайте и запустите образ Docker:

docker build - t test-nodejs-app
docker run -it --rm --name running-app test-nodejs-app

Если вы предпочитаете, чтобы docker compose:

Version: "2"

Services:
    node:
       image: "node:8"
       user: "node"
       working_dir: /home/node/app
       environment:
          - NODE_ENV=production
       volumes:
          - ./:/home/node/app
       expose:
          - "8081"
       command: "npm start"

Запустите файл compose:

docker-compose up -d
0 голосов
/ 10 октября 2019

Один из вариантов - начать с изображения узла, соответствующего вашим требованиям, а затем удалить все, что вам не нужно (sh, bash и т. Д.)

В крайнем случае вы можете добавить следующеена ваш Dockerfile:

RUN /bin/rm -R /bin/*

Хотя я не уверен, что это не помешает работе узла.

На официальном образе узла (кроме Apline) у вас есть /bin/bash, /bin/dash и /bin/sh (символическая ссылка на /bin/dash). Достаточно просто удалить эти 3 мухи, чтобы предотвратить доступ оболочки.

В версии Alpine есть символическая ссылка /bin/sh -> /bin/busybox. Вы можете удалить эту символическую ссылку, но она не может работать без busybox.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...