Docker-dagi foydalanuvchi

Andrey Kopilov, bizning texnik direktorimiz Dockerni yaxshi ko'radi, faol foydalanadi va targ'ib qiladi. Yangi maqolada u Docker-da foydalanuvchilarni qanday yaratishni tushuntiradi. Ular bilan to'g'ri ishlash, nima uchun foydalanuvchilar ildiz huquqlariga ega bo'lmasliklari kerak va Dockerfile-da mos kelmaydigan ko'rsatkichlar muammosini qanday hal qilish kerak.

Konteynerdagi barcha jarayonlar, agar siz uni maxsus tarzda ko'rsatmasangiz, ildiz foydalanuvchisi sifatida ishlaydi. Bu juda qulay ko'rinadi, chunki bu foydalanuvchi hech qanday cheklovlarga ega emas. Shuning uchun ildiz sifatida ishlash xavfsizlik nuqtai nazaridan noto'g'ri. Agar aqli raso hech kim mahalliy kompyuterda ildiz huquqlari bilan ishlamasa, ko'pchilik konteynerlarda ildiz ostidagi jarayonlarni boshqaradi.

Zararli dasturlarning konteynerdan qochib, asosiy kompyuterga kirishiga imkon beradigan xatolar har doim mavjud. Eng yomoni deb hisoblasak, konteyner ichidagi jarayonlar xost mashinasida hech qanday huquqqa ega bo'lmagan foydalanuvchi tomonidan boshqarilishini ta'minlashimiz kerak.

Foydalanuvchi yaratish

Konteynerda foydalanuvchi yaratish uni Linux distributivlarida yaratishdan farq qilmaydi. Biroq, buyruqlar turli xil asosiy tasvirlar uchun farq qilishi mumkin.

Debian-ga asoslangan tarqatish uchun siz Dockerfile-ga quyidagilarni qo'shishingiz kerak:

RUN groupadd --gid 2000 node 
  && useradd --uid 2000 --gid node --shell /bin/bash --create-home node

Alp tog'lari uchun:

RUN addgroup -g 2000 node 
    && adduser -u 2000 -G node -s /bin/sh -D node

Foydalanuvchi tomonidan bajariladigan jarayonlar

UID 2000 foydalanuvchi sifatida keyingi barcha jarayonlarni ishga tushirish uchun quyidagilarni bajaring:

USER 2000

Barcha keyingi jarayonlarni tugun foydalanuvchisi sifatida ishga tushirish uchun quyidagilarni bajaring:

USER node

Batafsil hujjatlar.

O'rnatish hajmlari

Jildlarni konteyner ichiga o'rnatayotganda foydalanuvchiga fayllarni o'qish va/yoki yozish imkoniyatini taqdim eting. Buning uchun konteynerdagi foydalanuvchi va konteynerdan tashqari faylga kirish uchun tegishli ruxsatlarga ega foydalanuvchining UID (GID) mos kelishi kerak. Bunday holda, foydalanuvchi nomlari muhim emas.

Ko'pincha Linux kompyuterida foydalanuvchining UID va GID 1000 ga teng. Bu identifikatorlar kompyuterning birinchi foydalanuvchisiga tayinlanadi.

Identifikatorlaringizni topish oson:

id

Siz foydalanuvchi haqida to'liq ma'lumot olasiz.
Misollardagi 2000 raqamini identifikatoringiz bilan almashtiring va hammasi yaxshi bo'ladi.

Foydalanuvchiga UID va GID belgilash

Agar foydalanuvchi avval yaratilgan bo'lsa, lekin siz identifikatorlarni o'zgartirishingiz kerak bo'lsa, buni shunday qilishingiz mumkin:

RUN usermod -u 1000 node 
  && groupmod -g 1000 node

Agar siz alp tog'larining asosiy tasviridan foydalansangiz, soya paketini o'rnatishingiz kerak:

RUN apk add —no-cache shadow

Tasvirni yaratishda foydalanuvchi identifikatorini konteyner ichida o'tkazish

Agar sizning identifikatoringiz va loyihada ishlaydigan barcha odamlarning identifikatorlari mos kelsa, Dockerfile-da ushbu identifikatorni ko'rsating. Biroq, ko'pincha foydalanuvchi identifikatorlari mos kelmaydi.

O'zingiz xohlagan narsaga qanday erishish mumkinligi darhol aniq emas. Men uchun bu Dockerni o'zlashtirish jarayonida eng qiyin narsa edi. Ko'pgina docker foydalanuvchilari tasvir hayotida turli bosqichlar borligini tushunishmaydi. Birinchidan, rasm Dockerfile yordamida yig'iladi. Tasvirdan konteyner ishga tushirilganda, Dockerfile endi ishlatilmaydi.

Tasvir yaratilganda foydalanuvchi yaratilishi kerak. Xuddi shu narsa jarayonlar ishga tushiriladigan foydalanuvchini aniqlash uchun ham amal qiladi. Bu shuni anglatadiki, biz qandaydir tarzda konteyner ichida UID (GID) ni o'tkazishimiz kerak.

Direktivlar Dockerfile faylida tashqi o'zgaruvchilardan foydalanish uchun ishlatiladi ENV и ARG. Direktivlarni batafsil taqqoslash shu yerda.

Docker fayli

ARG UID=1000
ARG GID=1000
ENV UID=${UID}
ENV GID=${GID}
RUN usermod -u $UID node 
  && groupmod -g $GID node

Argumentlarni docker-compose orqali quyidagicha yuborishingiz mumkin:

docker-compose

build:
  context: ./src/backend
  args:
    UID: 1000
    GID: 1000

PS Docker-ning barcha nozik tomonlarini o'zlashtirish uchun hujjatlar yoki maqolalarni o'qish etarli emas. Siz ko'p mashq qilishingiz kerak, Dockerni his qilishingiz kerak.

Manba: www.habr.com

a Izoh qo'shish