Эй Ҳабр!
Дар воқеияти муосир, бинобар афзоиши нақши контейнеризатсия дар равандҳои рушд, масъалаи таъмини амнияти марҳилаҳо ва объектҳои мухталифи марбут ба контейнерҳо муҳимтарин масъала нест. Гузаронидани санҷишҳои дастӣ вақти зиёдро талаб мекунад, аз ин рӯ фикри хуб мебуд, ки ҳадди аққал қадамҳои аввалро барои автоматикунонии ин раванд андешед.
Дар ин мақола, ман скриптҳои тайёрро барои татбиқи якчанд утилитаҳои амниятии Docker мубодила хоҳам кард ва дастурҳо оид ба ҷойгиркунии стенди намоишии хурд барои санҷиши ин раванд. Шумо метавонед маводҳоро барои таҷриба дар ташкили раванди санҷиши амнияти тасвирҳо ва дастурҳои Dockerfile истифода баред. Равшан аст, ки инфрасохтори рушд ва татбиқи ҳар як шахс гуногун аст, бинобар ин дар зер ман якчанд вариантҳои имконпазирро пешниҳод мекунам.
Утилитаҳои санҷиши амният
Шумораи зиёди барномаҳои ёрирасон ва скриптҳои гуногун мавҷуданд, ки ҷанбаҳои гуногуни инфрасохтори Docker-ро тафтиш мекунанд. Баъзе аз онҳо аллакай дар мақолаи қаблӣ тавсиф карда шудаанд (
Хадолинт
Утилитаи хеле соддаи консол, ки ҳамчун тахмини аввал барои арзёбии дурустӣ ва бехатарии дастурҳои Dockerfile кӯмак мекунад (масалан, танҳо бо истифода аз феҳристи тасвирҳои ваколатдор ё истифодаи sudo).
Докл
Барномаи консоле, ки бо тасвир (ё бо архиви захирашудаи tar) кор мекунад, ки дурустӣ ва амнияти тасвири мушаххасро месанҷад, қабатҳо ва конфигуратсияи онро таҳлил мекунад - кадом корбарон сохта шудаанд, кадом дастурҳо истифода мешаванд, ки ҳаҷмҳо насб карда шудаанд, мавҷудияти пароли холӣ ва ғайра. г. То ҳол шумораи чекҳо чандон зиёд нест ва ба якчанд санҷишҳо ва тавсияҳои худи мо асос ёфтааст.
Trivy
Ин утилита барои дарёфти ду намуди осебпазирӣ нигаронида шудааст - мушкилот бо сохтани ОС (аз ҷониби Alpine, RedHat (EL), CentOS, Debian GNU, Ubuntu дастгирӣ карда мешавад) ва мушкилот бо вобастагӣ (Gemfile.lock, Pipfile.lock, composer.lock, package). -lock.json, ip.lock, cargo.lock). Trivy метавонад ҳам тасвирро дар анбор ва ҳам тасвири маҳаллиро скан кунад ва инчунин метавонад дар асоси файли интиқолшудаи .tar бо тасвири Docker скан кунад.
Имкониятҳои татбиқи коммуналӣ
Барои санҷидани барномаҳои тавсифшуда дар муҳити ҷудошуда, ман дастурҳоро оид ба насб кардани ҳамаи утилитҳо дар раванди то андозае соддашуда пешниҳод мекунам.
Идеяи асосӣ ин нишон додани он аст, ки чӣ гуна шумо метавонед тафтиши худкори мундариҷаи Dockerfiles ва тасвирҳои Docker, ки ҳангоми таҳия сохта шудаанд, амалӣ кунед.
Худи санҷиш аз марҳилаҳои зерин иборат аст:
- Санҷиши дурустӣ ва бехатарии дастурҳои Dockerfile бо истифода аз утилитаи linter Хадолинт
- Санҷиши дурустӣ ва бехатарии тасвирҳои ниҳоӣ ва мобайнӣ бо истифода аз утилита Докл
- Санҷиши мавҷудияти осебпазириҳои оммавӣ (CVE) дар тасвири асосӣ ва як қатор вобастагӣ - бо истифода аз утилита Trivy
Баъдтар дар мақола ман се вариантро барои татбиқи ин қадамҳо медиҳам:
Якум ин тавассути конфигуратсияи лӯлаи CI/CD бо истифода аз GitLab ҳамчун намуна (бо тавсифи раванди баланд бардоштани намунаи санҷишӣ).
Дуюм ин истифодаи скрипти shell мебошад.
Сеюм сохтани тасвири Docker-ро барои скан кардани тасвирҳои Docker дар бар мегирад.
Шумо метавонед вариантеро, ки ба шумо мувофиқ аст, интихоб кунед, онро ба инфрасохтори худ интиқол диҳед ва ба ниёзҳои худ мутобиқ кунед.
Ҳама файлҳои зарурӣ ва дастурҳои иловагӣ инчунин дар анбор ҷойгиранд:
Интегратсия ба GitLab CI/CD
Дар варианти аввал, мо дида мебароем, ки чӣ тавр шумо метавонед санҷишҳои бехатариро бо истифода аз системаи анбори GitLab ҳамчун намуна амалӣ кунед. Дар ин ҷо мо қадамҳоро мегузарем ва мефаҳмем, ки чӣ гуна муҳити санҷиширо бо GitLab аз сифр насб кунем, раванди сканкунӣ эҷод кунем ва утилитҳоро барои санҷиши санҷиши Dockerfile ва тасвири тасодуфӣ - барномаи JuiceShop оғоз кунем.
Насб кардани GitLab
1. Docker насб кунед:
sudo apt-get update && sudo apt-get install docker.io
2. Корбари кунуниро ба гурӯҳи докер илова кунед, то шумо метавонед бо docker бидуни истифодаи sudo кор кунед:
sudo addgroup <username> docker
3. IP-и худро пайдо кунед:
ip addr
4. GitLab-ро дар контейнер насб ва оғоз кунед, суроғаи IP-ро дар номи мизбон бо суроғаи худ иваз кунед:
docker run --detach
--hostname 192.168.1.112
--publish 443:443 --publish 80:80
--name gitlab
--restart always
--volume /srv/gitlab/config:/etc/gitlab
--volume /srv/gitlab/logs:/var/log/gitlab
--volume /srv/gitlab/data:/var/opt/gitlab
gitlab/gitlab-ce:latest
Мо интизор мешавем, ки GitLab тамоми расмиёти зарурии насбкуниро ба анҷом расонад (шумо метавонед ин равандро тавассути баромади файли журнал назорат кунед: docker logs -f gitlab).
5. IP-и маҳаллии худро дар браузер кушоед ва саҳифаеро бубинед, ки аз шумо хоҳиш мекунад, ки паролро барои корбари реша иваз кунед:
Пароли нав таъин кунед ва ба GitLab гузаред.
6. Лоиҳаи нав созед, масалан cicd-test ва онро бо файли оғозёбӣ оғоз кунед README.md:
7. Ҳоло ба мо лозим аст, ки GitLab Runner -ро насб кунем: агенте, ки тибқи дархост тамоми амалиёти заруриро иҷро мекунад.
Версияи охиринро зеркашӣ кунед (дар ин ҳолат, барои Linux 64-бит):
sudo curl -L --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64
8. Онро иҷрошаванда созед:
sudo chmod +x /usr/local/bin/gitlab-runner
9. Корбари OS барои Runner илова кунед ва хидматро оғоз кунед:
sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash
sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
sudo gitlab-runner start
Он бояд чунин бошад:
local@osboxes:~$ sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
Runtime platform arch=amd64 os=linux pid=8438 revision=0e5417a3 version=12.0.1
local@osboxes:~$ sudo gitlab-runner start
Runtime platform arch=amd64 os=linux pid=8518 revision=0e5417a3 version=12.0.1
10. Ҳоло мо Давандаро ба қайд мегирем, то он метавонад бо мисоли GitLab мо ҳамкорӣ кунад.
Барои ин кор, саҳифаи Settings-CI/CD-ро кушоед (http://OUR_IP_ADDRESS/root/cicd-test/-/settings/ci_cd) ва дар ҷадвали Давандагон URL ва аломати бақайдгириро пайдо кунед:
11. Давандаро бо иваз кардани URL ва аломати бақайдгирӣ ба қайд гиред:
sudo gitlab-runner register
--non-interactive
--url "http://<URL>/"
--registration-token "<Registration Token>"
--executor "docker"
--docker-privileged
--docker-image alpine:latest
--description "docker-runner"
--tag-list "docker,privileged"
--run-untagged="true"
--locked="false"
--access-level="not_protected"
Дар натиҷа, мо як GitLab-и кории омода ба даст меорем, ки ба он мо бояд дастурҳоро барои оғоз кардани хидматҳои худ илова кунем. Дар ин намоишӣ мо барои сохтани барнома ва контейнер кардани он қадамҳо надорем, аммо дар муҳити воқеӣ онҳо пеш аз қадамҳои сканкунӣ сурат мегиранд ва тасвирҳо ва файли Dockerfile барои таҳлил тавлид мешаванд.
конфигуратсияи қубур
1. Файлҳоро ба анбор илова кунед mydockerfile.df (ин як файли санҷишии Dockerfile аст, ки мо онро тафтиш хоҳем кард) ва файли конфигуратсияи раванди GitLab CI/CD .gitlab-cicd.yml, ки дастурҳоро барои сканерҳо номбар мекунад (нуқтаро дар номи файл қайд кунед).
Файли конфигуратсияи YAML дорои дастурҳо оид ба иҷро кардани се утилита (Hadolint, Dockle ва Trivy), ки файли интихобшудаи Dockerfile ва тасвири дар тағирёбандаи DOCKERFILE муайяншударо таҳлил мекунанд. Ҳама файлҳои заруриро аз анбор гирифтан мумкин аст:
Иқтибос аз mydockerfile.df (ин файли абстрактӣ бо маҷмӯи дастурҳои худсарона танҳо барои намоиш додани кори утилита аст). Истиноди мустақим ба файл:
Мундариҷаи mydockerfile.df
FROM amd64/node:10.16.0-alpine@sha256:f59303fb3248e5d992586c76cc83e1d3700f641cbcd7c0067bc7ad5bb2e5b489 AS tsbuild
COPY package.json .
COPY yarn.lock .
RUN yarn install
COPY lib lib
COPY tsconfig.json tsconfig.json
COPY tsconfig.app.json tsconfig.app.json
RUN yarn build
FROM amd64/ubuntu:18.04@sha256:eb70667a801686f914408558660da753cde27192cd036148e58258819b927395
LABEL maintainer="Rhys Arkins <[email protected]>"
LABEL name="renovate"
...
COPY php.ini /usr/local/etc/php/php.ini
RUN cp -a /tmp/piik/* /var/www/html/
RUN rm -rf /tmp/piwik
RUN chown -R www-data /var/www/html
ADD piwik-cli-setup /piwik-cli-setup
ADD reset.php /var/www/html/
## ENTRYPOINT ##
ADD entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
USER root
Конфигуратсияи YAML чунин менамояд (худи файлро тавассути истиноди мустақим дар ин ҷо пайдо кардан мумкин аст:
Мундариҷаи .gitlab-ci.yml
variables:
DOCKER_HOST: "tcp://docker:2375/"
DOCKERFILE: "mydockerfile.df" # name of the Dockerfile to analyse
DOCKERIMAGE: "bkimminich/juice-shop" # name of the Docker image to analyse
# DOCKERIMAGE: "knqyf263/cve-2018-11235" # test Docker image with several CRITICAL CVE
SHOWSTOPPER_PRIORITY: "CRITICAL" # what level of criticality will fail Trivy job
TRIVYCACHE: "$CI_PROJECT_DIR/.cache" # where to cache Trivy database of vulnerabilities for faster reuse
ARTIFACT_FOLDER: "$CI_PROJECT_DIR"
services:
- docker:dind # to be able to build docker images inside the Runner
stages:
- scan
- report
- publish
HadoLint:
# Basic lint analysis of Dockerfile instructions
stage: scan
image: docker:git
after_script:
- cat $ARTIFACT_FOLDER/hadolint_results.json
script:
- export VERSION=$(wget -q -O - https://api.github.com/repos/hadolint/hadolint/releases/latest | grep '"tag_name":' | sed -E 's/.*"v([^"]+)".*/1/')
- wget https://github.com/hadolint/hadolint/releases/download/v${VERSION}/hadolint-Linux-x86_64 && chmod +x hadolint-Linux-x86_64
# NB: hadolint will always exit with 0 exit code
- ./hadolint-Linux-x86_64 -f json $DOCKERFILE > $ARTIFACT_FOLDER/hadolint_results.json || exit 0
artifacts:
when: always # return artifacts even after job failure
paths:
- $ARTIFACT_FOLDER/hadolint_results.json
Dockle:
# Analysing best practices about docker image (users permissions, instructions followed when image was built, etc.)
stage: scan
image: docker:git
after_script:
- cat $ARTIFACT_FOLDER/dockle_results.json
script:
- export VERSION=$(wget -q -O - https://api.github.com/repos/goodwithtech/dockle/releases/latest | grep '"tag_name":' | sed -E 's/.*"v([^"]+)".*/1/')
- wget https://github.com/goodwithtech/dockle/releases/download/v${VERSION}/dockle_${VERSION}_Linux-64bit.tar.gz && tar zxf dockle_${VERSION}_Linux-64bit.tar.gz
- ./dockle --exit-code 1 -f json --output $ARTIFACT_FOLDER/dockle_results.json $DOCKERIMAGE
artifacts:
when: always # return artifacts even after job failure
paths:
- $ARTIFACT_FOLDER/dockle_results.json
Trivy:
# Analysing docker image and package dependencies against several CVE bases
stage: scan
image: docker:git
script:
# getting the latest Trivy
- apk add rpm
- export VERSION=$(wget -q -O - https://api.github.com/repos/knqyf263/trivy/releases/latest | grep '"tag_name":' | sed -E 's/.*"v([^"]+)".*/1/')
- wget https://github.com/knqyf263/trivy/releases/download/v${VERSION}/trivy_${VERSION}_Linux-64bit.tar.gz && tar zxf trivy_${VERSION}_Linux-64bit.tar.gz
# displaying all vulnerabilities w/o failing the build
- ./trivy -d --cache-dir $TRIVYCACHE -f json -o $ARTIFACT_FOLDER/trivy_results.json --exit-code 0 $DOCKERIMAGE
# write vulnerabilities info to stdout in human readable format (reading pure json is not fun, eh?). You can remove this if you don't need this.
- ./trivy -d --cache-dir $TRIVYCACHE --exit-code 0 $DOCKERIMAGE
# failing the build if the SHOWSTOPPER priority is found
- ./trivy -d --cache-dir $TRIVYCACHE --exit-code 1 --severity $SHOWSTOPPER_PRIORITY --quiet $DOCKERIMAGE
artifacts:
when: always # return artifacts even after job failure
paths:
- $ARTIFACT_FOLDER/trivy_results.json
cache:
paths:
- .cache
Report:
# combining tools outputs into one HTML
stage: report
when: always
image: python:3.5
script:
- mkdir json
- cp $ARTIFACT_FOLDER/*.json ./json/
- pip install json2html
- wget https://raw.githubusercontent.com/shad0wrunner/docker_cicd/master/convert_json_results.py
- python ./convert_json_results.py
artifacts:
paths:
- results.html
Агар лозим бошад, шумо инчунин метавонед тасвирҳои захирашударо дар шакли бойгонии .tar скан кунед (аммо ба шумо лозим меояд, ки параметрҳои вуруди утилитаҳоро дар файли YAML тағир диҳед)
Эзоҳ: Trivy насбшударо талаб мекунад rpm и рафтан. Дар акси ҳол, он ҳангоми скан кардани тасвирҳои ба RedHat асосёфта ва гирифтани навсозиҳо ба махзани осебпазирӣ хатогиҳо эҷод мекунад.
2. Пас аз илова кардани файлҳо ба анбор, мувофиқи дастурҳои файли конфигуратсияи мо, GitLab ба таври худкор раванди сохтан ва сканро оғоз мекунад. Дар ҷадвали CI/CD → Қубурҳо шумо метавонед пешрафти дастурҳоро бубинед.
Дар натича дар назди мо чор вазифа истодааст. Сетои онҳо мустақиман бо сканкунӣ сарукор доранд ва охирин (Ҳисобот) гузориши оддиро аз файлҳои пароканда бо натиҷаҳои сканер ҷамъоварӣ мекунад.
Бо нобаёнӣ, Trivy кор карданро қатъ мекунад, агар осебпазирии CRITICAL дар тасвир ё вобастагӣ ошкор карда шавад. Ҳамзамон, Hadolint ҳамеша рамзи Муваффақиятро бармегардонад, зеро он ҳамеша ба шарҳҳо оварда мерасонад, ки боиси қатъ шудани сохтмон мегардад.
Вобаста ба талаботи мушаххаси худ, шумо метавонед рамзи баромадро танзим кунед, то вақте ки ин утилитҳо мушкилоти дорои аҳамияти муайянро ошкор мекунанд, онҳо инчунин раванди сохтани онро қатъ мекунанд. Дар ҳолати мо, сохтмон танҳо дар сурате қатъ мешавад, ки Trivy осебпазириро бо интиқодӣ, ки мо дар тағирёбандаи SHOWSTOPPER дар .gitlab-ci.yml.
Натиҷаи ҳар як утилитаро дар сабти ҳар як вазифаи сканкунӣ, бевосита дар файлҳои json дар бахши артефактҳо ё дар гузориши оддии HTML дидан мумкин аст (бештар дар бораи он дар зер):
3. Барои пешниҳоди ҳисоботҳои коммуналӣ дар шакли каме бештар барои одамон хондан, скрипти хурди Python барои табдил додани се файли JSON ба як файли HTML бо ҷадвали камбудиҳо истифода мешавад.
Ин скрипт аз ҷониби вазифаи алоҳидаи Ҳисобот оғоз мешавад ва артефакти ниҳоии он файли HTML бо гузориш мебошад. Сарчашмаи скрипт инчунин дар анбор ҷойгир аст ва метавонад ба ниёзҳо, рангҳо ва ғайра мутобиқ карда шавад.
Скрипти Shell
Варианти дуюм барои ҳолатҳое мувофиқ аст, ки ба шумо лозим аст, ки тасвирҳои Docker-ро берун аз системаи CI/CD тафтиш кунед ё шумо бояд ҳама дастурҳоро дар шакле дошта бошед, ки мустақиман дар ҳост иҷро карда шаванд. Ин хосият бо скрипти тайёри ниҳонӣ фаро гирифта шудааст, ки мумкин аст дар мошини поки виртуалӣ (ё ҳатто воқеӣ) иҷро карда шавад. Скрипт ҳамон дастурҳоеро иҷро мекунад, ки gitlab-runner дар боло тавсиф шудааст.
Барои бомуваффақият кор кардани скрипт, Docker бояд дар система насб карда шавад ва корбари ҷорӣ бояд дар гурӯҳи докер бошад.
Худи скриптро дар ин ҷо пайдо кардан мумкин аст:
Дар ибтидои файл, тағирёбандаҳо муайян мекунанд, ки кадом тасвир бояд скан карда шавад ва кадом камбудиҳои интиқодӣ боиси хориҷ шудани утилитаи Trivy бо рамзи хатогии муайяншуда мешаванд.
Ҳангоми иҷрои скрипт, ҳама утилитаҳо ба директория бор карда мешаванд docker_tools, натичаи кори онхо дар маълумотнома docker_tools/json, ва HTML бо гузориш дар файл хоҳад буд натиҷаҳо.html.
Намунаи баромади скрипт
~/docker_cicd$ ./docker_sec_check.sh
[+] Setting environment variables
[+] Installing required packages
[+] Preparing necessary directories
[+] Fetching sample Dockerfile
2020-10-20 10:40:00 (45.3 MB/s) - ‘Dockerfile’ saved [8071/8071]
[+] Pulling image to scan
latest: Pulling from bkimminich/juice-shop
[+] Running Hadolint
...
Dockerfile:205 DL3015 Avoid additional packages by specifying `--no-install-recommends`
Dockerfile:248 DL3002 Last USER should not be root
...
[+] Running Dockle
...
WARN - DKL-DI-0006: Avoid latest tag
* Avoid 'latest' tag
INFO - CIS-DI-0005: Enable Content trust for Docker
* export DOCKER_CONTENT_TRUST=1 before docker pull/build
...
[+] Running Trivy
juice-shop/frontend/package-lock.json
=====================================
Total: 3 (UNKNOWN: 0, LOW: 1, MEDIUM: 0, HIGH: 2, CRITICAL: 0)
+---------------------+------------------+----------+---------+-------------------------+
| LIBRARY | VULNERABILITY ID | SEVERITY | VERSION | TITLE |
+---------------------+------------------+----------+---------+-------------------------+
| object-path | CVE-2020-15256 | HIGH | 0.11.4 | Prototype pollution in |
| | | | | object-path |
+---------------------+------------------+ +---------+-------------------------+
| tree-kill | CVE-2019-15599 | | 1.2.2 | Code Injection |
+---------------------+------------------+----------+---------+-------------------------+
| webpack-subresource | CVE-2020-15262 | LOW | 1.4.1 | Unprotected dynamically |
| | | | | loaded chunks |
+---------------------+------------------+----------+---------+-------------------------+
juice-shop/package-lock.json
============================
Total: 20 (UNKNOWN: 0, LOW: 1, MEDIUM: 6, HIGH: 8, CRITICAL: 5)
...
juice-shop/package-lock.json
============================
Total: 5 (CRITICAL: 5)
...
[+] Removing left-overs
[+] Making the output look pretty
[+] Converting JSON results
[+] Writing results HTML
[+] Clean exit ============================================================
[+] Everything is done. Find the resulting HTML report in results.html
Тасвири Docker бо ҳама хидматҳо
Ҳамчун алтернативаи сеюм, ман ду Dockerfile оддиро тартиб додам, то тасвир бо утилитаҳои амниятӣ эҷод кунам. Як Dockerfile барои сохтани маҷмӯа барои сканкунии тасвир аз анбор кӯмак мекунад, дуюм (Dockerfile_tar) барои сохтани маҷмӯа барои скан кардани файли tar бо тасвир кӯмак мекунад.
1. Аз анбор файл ва скриптҳои мувофиқи Docker-ро гиред
2. Мо онро барои васлкунӣ оғоз мекунем:
docker build -t dscan:image -f docker_security.df .
3. Пас аз анҷоми васлкунӣ, мо аз тасвир контейнер эҷод мекунем. Ҳамзамон, мо тағирёбандаи муҳити DOCKERIMAGE-ро бо номи тасвире, ки ба мо таваҷҷӯҳ дорем, мегузорем ва Dockerfile-ро, ки мо мехоҳем аз мошини худ таҳлил кунем, ба файл насб мекунем. /Dockerfile (дар хотир доред, ки роҳи мутлақ ба ин файл лозим аст):
docker run --rm -v $(pwd)/results:/results -v $(pwd)/docker_security.df:/Dockerfile -e DOCKERIMAGE="bkimminich/juice-shop" dscan:image
[+] Setting environment variables
[+] Running Hadolint
/Dockerfile:3 DL3006 Always tag the version of an image explicitly
[+] Running Dockle
WARN - DKL-DI-0006: Avoid latest tag
* Avoid 'latest' tag
INFO - CIS-DI-0005: Enable Content trust for Docker
* export DOCKER_CONTENT_TRUST=1 before docker pull/build
INFO - CIS-DI-0006: Add HEALTHCHECK instruction to the container image
* not found HEALTHCHECK statement
INFO - DKL-LI-0003: Only put necessary files
* unnecessary file : juice-shop/node_modules/sqlite3/Dockerfile
* unnecessary file : juice-shop/node_modules/sqlite3/tools/docker/architecture/linux-arm64/Dockerfile
* unnecessary file : juice-shop/node_modules/sqlite3/tools/docker/architecture/linux-arm/Dockerfile
[+] Running Trivy
...
juice-shop/package-lock.json
============================
Total: 20 (UNKNOWN: 0, LOW: 1, MEDIUM: 6, HIGH: 8, CRITICAL: 5)
...
[+] Making the output look pretty
[+] Starting the main module ============================================================
[+] Converting JSON results
[+] Writing results HTML
[+] Clean exit ============================================================
[+] Everything is done. Find the resulting HTML report in results.html
натиҷаҳои
Мо танҳо як маҷмӯи асосии утилитҳоро барои скан кардани артефактҳои Docker дида баромадем, ки ба андешаи ман, як қисми муносиби талаботи амнияти тасвирро хеле самаранок фаро мегирад. Инчунин шумораи зиёди абзорҳои пулакӣ ва ройгон мавҷуданд, ки метавонанд ҳамон санҷишҳоро анҷом диҳанд, ҳисоботи зебо кашанд ё танҳо дар реҷаи консолӣ кор кунанд, системаҳои идоракунии контейнерҳоро фаро гиранд ва ғайра. Шарҳи ин асбобҳо ва тарзи ҳамгироии онҳо метавонад каме дертар пайдо шавад. .
Чизи хуби маҷмӯи абзорҳои дар ин мақола тавсифшуда дар он аст, ки онҳо ҳама манбаи кушода мебошанд ва шумо метавонед бо онҳо ва дигар абзорҳои шабеҳ озмоиш кунед, то он чизеро, ки ба ниёзҳо ва инфрасохтори шумо мувофиқ аст, пайдо кунед. Албатта, ҳама осебпазириҳои пайдошуда бояд барои татбиқшаванда дар шароити мушаххас омӯхта шаванд, аммо ин мавзӯъ барои мақолаи калон дар оянда аст.
Умедворам, ки ин дастур, скриптҳо ва утилитаҳо ба шумо кӯмак мекунанд ва нуқтаи ибтидоӣ барои эҷоди инфрасохтори бехатартар дар соҳаи контейнеризатсия мешаванд.
Манбаъ: will.com