Базові питання з Docker на співбесіді

💡 Усі статті, обговорення, новини про DevOps — в одному місці. Приєднуйтесь до DevOps спільноти!

Цей матеріал — переклад англомовного тексту з Medium. Додавайте свої запитання та відповіді в коментарях.

1. Яка різниця між Image, Container and Engine?

Image — це попередньо зібраний і налаштований програмний пакет, який містить усі необхідні залежності та інструкції для запуску певної програми чи сервісу. Container — це екземпляр Image, створений під час виконання, з власним унікальним набором ресурсів і файловою системою. Engine — це програмне забезпечення, яке забезпечує створення Image і Container і керування ними, таке як Docker.

2. Яка різниця між командою Docker COPY та ADD?

Команда COPY використовується для копіювання файлів із хост-системи в контейнер, тоді як команда ADD може робити те саме, але також підтримує стиснення файлів і джерела URL-адрес.

3. Яка різниця між командою Docker CMD і RUN?

Команда CMD використовується для вказівки команди, яку слід запускати, коли контейнер запускається з образу, а команда RUN використовується для виконання команд під час процесу створення (збирання) образу (image).

4. Як зменшити розмір Docker Image?

Щоб зменшити розмір образу Docker, ви можете використовувати багатоетапні збірки, видаляти непотрібні файли та залежності та використовувати менші базові images.

5. Навіщо і коли використовувати Docker?

Docker — це платформа контейнеризації, яка дозволяє розробникам пакувати, розгортати та запускати програми в узгодженому та ізольованому середовищі, забезпечуючи послідовність і відтворюваність, ізоляцію, переносимість, масштабованість, економічну ефективність, архітектуру мікросервісів і віртуалізацію застарілих програм. Вона широко використовується в розробці, тестуванні, продакшені та CI/CD.

6. Поясніть компоненти Docker і те, як вони взаємодіють один з одним.

Docker має кілька компонентів, у тому числі daemon Docker, який керує створенням контейнерів і керування ними, клієнт Docker, який спілкується з daemon для видачі команд, і реєстр Docker, який зберігає та розповсюджує образи.

7. Поясніть термінологію: Docker Compose, Docker File, Docker Image, Docker Container.

Docker Compose — це інструмент для визначення та запуску багатоконтейнерних програм. Dockerfile — це сценарій, який містить інструкції зі створення образу. Образ Docker — це попередньо зібраний і налаштований програмний пакет, який можна використовувати для створення контейнера. Контейнер Docker — це екземпляр образу, створеного під час виконання.

8. У яких реальних сценаріях ви використовували Docker?

Я використовував Docker у різних сценаріях, включаючи розробку, CI/CD, архітектуру мікросервісів, тестування,для стейджингу, продакшена, віртуалізації легасі-програм, середовища Data Science та Big Data. Docker забезпечує послідовність і відтворюваність збірок, просте масштабування та керування програмами, а також ефективне використання системних ресурсів.

9. Docker проти Hypervisor.

І Docker, і Hypervisor дозволяють запускати кілька ізольованих середовищ на одному хості, але вони відрізняються тим, як досягають цієї ізоляції. Hypervisor створює віртуальні машини, кожна зі своєю операційною системою, а Docker запускає кілька контейнерів в одній операційній системі.

10. Які переваги та недоліки використання Docker?

Переваги використання Docker включають послідовність і відтворюваність збірок, просте масштабування та керування програмами, а також ефективне використання системних ресурсів. Недоліки включають відносно високий вхідний поріг для вивчення та підвищену складність у певних ситуаціях.

11. Що таке Docker namespace?

Docker namespace — це віртуалізоване середовище для певних системних ресурсів, наприклад мережевих інтерфейсів, яке використовується для ізоляції контейнерів один від одного.

12. Що таке реєстр Docker?

Реєстр Docker — це служба, яка зберігає та розповсюджує образи Docker.

13. Що таке entry point?

Entry point — це команда, яка виконується під час запуску контейнера з образу.

14. Як реалізувати CI/CD у Docker?

Щоб реалізувати CI/CD у Docker, ви можете використовувати інструмент безперервної інтеграції для створення та автоматичного тестування образів, а потім використовувати інструмент оркестрації контейнерів для розгортання та керування контейнерами у робочому середовищі.

15. Чи будуть дані в контейнері втрачені після того як він (контейнер) завершив роботу?

Дані в контейнері буде втрачено, коли контейнер завершить роботу. Для того щоб зберігати дані між запусками контейнера можна використати volume або bind mount.

16. Що таке Docker swarm?

Docker Swarm — це власна функція оркестрації Docker, яка дозволяє створювати та керувати кластером Docker engines, який називається swarm. Цей кластер дає змогу планувати та керувати розміщенням контейнерів у swarm, дозволяючи легко масштабувати програму та керувати нею. За допомогою swarm ви також можете виконувати оновлення своєї програми, забезпечуючи високу доступність і мінімізуючи час простою. Крім того, swarm дозволяє збалансувати навантаження трафіку до вашої програми, автоматично розподіляючи його між доступними вузлами в swarm.

17. Які команди Docker для:

Переглянути запущені контейнери
docker ps

Команда для запуску контейнера під певним іменем
docker run --name <name> <image>

Команда для експорту докера
docker export <container> > <filename>

Команда для імпорту вже існуючого образу докера
docker import <filename> <repository:tag>

Команда для видалення контейнера
docker rm <container>

Команда для видалення всіх зупинених контейнерів, невикористаних мереж, очищення кешу і «висячих» образів
docker system prune

18. Які загальні практики зменшують розмір images Docker?

Загальні методи зменшення розміру образів Docker включають: використання багатоетапних збірок, видалення непотрібних файлів і залежностей, використання менших базових зображень, використання файлу .dockerignore, стиснення кількох шарів, використання механізму кешування, закріплення версії та використання сканування образів та інструменти аналізу вразливостей. Хоча ці методи можуть допомогти зменшити розмір images, важливо враховувати їх вплив на функціональність програми.

👍ПодобаєтьсяСподобалось23
До обраногоВ обраному25
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Доречі, прикольно ... 5хв погратись з chat gpt і можна отримати щось дуже схоже.

Запит: Write 10 in-depth questions about docker for job interview.

Відповідь (після декількох експериментів з запитами):

1. Can you discuss the security concerns associated with running applications in Docker containers and how they can be mitigated?

2. How does Docker handle container resource allocation, such as CPU and memory, and what mechanisms are available to limit resource usage?

3. Can you explain the process of building a Docker image from a Dockerfile, including the use of multi-stage builds?

4. How does Docker handle networking in a multi-container environment, including load balancing and service discovery?

5. Can you describe the security measures in place within Docker, such as image signing and user namespace mapping?

6. Can you discuss the use of Docker Compose for defining and managing multi-container applications?

7. Can you discuss the use of third-party tools and services, such as Docker Trusted Registry and Docker Cloud, in a Docker deployment?

8. How does Docker support the deployment and management of applications in cloud environments, such as AWS and Azure?

9. Can you explain the process of rolling out updates to containers in a production environment, including zero-downtime deployments and blue-green deployment strategies?

10. Can you discuss the use of Docker volumes and bind mounts for persistent storage, and the trade-offs between the two options?

Якщо чат попросити на них відповісти, він теж впорається ... при чому правити після нього там треба було б і не так і багато.

Хоч і надіятись на те, що chat gpt володіє необхідним фактажем в цьому випадку було досить сміливо, але як на мене, вийшло не погано.

18. Які загальні практики зменшують розмір images Docker?

Загальні методи зменшення розміру образів Docker включають: використання багатоетапних збірок, видалення непотрібних файлів і залежностей, використання менших базових зображень, використання файлу .dockerignore, стиснення кількох шарів, використання механізму кешування, закріплення версії та використання сканування образів та інструменти аналізу вразливостей. Хоча ці методи можуть допомогти зменшити розмір images, важливо враховувати їх вплив на функціональність програми.

.dockerignore НЕ зменшує розмір image, лише прискорює його збірку.
«використання механізму кешування» — кешування і так використовується за умовчанням.
«закріплення версії та використання сканування образів та інструменти аналізу вразливостей» — як це зменшує розмір image?

16. Що таке Docker swarm?

Docker Swarm — це власна функція оркестрації Docker, яка дозволяє створювати та керувати кластером Docker engines, який називається swarm. Цей кластер дає змогу планувати та керувати розміщенням контейнерів у swarm, дозволяючи легко масштабувати програму та керувати нею. За допомогою swarm ви також можете виконувати оновлення своєї програми, забезпечуючи високу доступність і мінімізуючи час простою. Крім того, swarm дозволяє збалансувати навантаження трафіку до вашої програми, автоматично розподіляючи його між доступними вузлами в swarm.

Цей проект deprecated і перестав підтримуватися з 2020 року, про що варто було б згадати.

15. Чи будуть дані в контейнері втрачені після того як він (контейнер) завершив роботу?

Дані в контейнері буде втрачено, коли контейнер завершить роботу. Для того щоб зберігати дані між запусками контейнера можна використати volume або bind mount.

Точно ні.
У цьому й різниця між image і контейнером, що останній — write-only об’єкт, який зберігає всі зміни після зупинки.
А volume використовуються для зберігання критичних даних (наприклад, файли СУБД), щоб вони не зникли, якщо ми видалимо випадково контейнер.

Реєстр Docker — це служба, яка зберігає та розповсюджує образи Docker.

Просто набір слів

Переваги використання Docker включають послідовність і відтворюваність збірок, просте масштабування та керування програмами, а також ефективне використання системних ресурсів. Недоліки включають відносно високий вхідний поріг для вивчення та підвищену складність у певних ситуаціях.

Чесно кажучи, Docker це досить проста технологія, яку можна вивчити за один день.
А з недоліків я б назвав необхідність у демоні (до речі, є конкуренти, які його не використовують), та наявність глюків, які іноді вирішуються тільки його переустановкою.

Docker має кілька компонентів, у тому числі daemon Docker, який керує створенням контейнерів і керування ними, клієнт Docker, який спілкується з daemon для видачі команд, і реєстр Docker, який зберігає та розповсюджує образи.

Насправді не зовсім так, там складніший набір компонентів.
Ну і локальне сховище images (і контейнерів) не є частиною Docker, просто там Docker демон зберігає всі дані, але зберігає (не поширює)

Яка різниця між командою Docker CMD і RUN?

Тут слід обов’язково додати, що інструкцій RUN можна скільки завгодно в Dockerfile, а CMD — тільки одна (якщо їх багато, то використовується тільки остання).

Команда COPY використовується для копіювання файлів із хост-системи в контейнер, тоді як команда ADD може робити те саме, але також підтримує стиснення файлів і джерела URL-адрес.

Перше твердження не зовсім вірно, файли (і папки теж) копіюються в image, а не контейнер. Контейнера ще немає на стадії збирання image.
Інструкція ADD (це все-таки інструкція, а не команда) підтримує не стиснення, а навпаки, розпакування архівів, у тому числі доступних по HTTP.

Контейнера ще немає на стадії збирання image.

Как раз таки есть. На этапе сборки поднимаются временные контейнеры.

Що таке тимчасові контейнери? Чи можете дати посилання на документацію?

Я просив вас дати посилання на офіційну документацію.
Якщо для вас пояснення на stackoverflow це офіційна документація, то мені шкода людей, які користуються вашими послугами.

Обязательно, а можешь дать ссылку на документацию что такие контейнеры не поднимаются? Это очень легко сделать показав процесс сборки имейджа под капотом. Потому как если Java evangelist не знает как работать с документацией и пишет информацию от фонаря, то это вызывае куда большие вопросы в компетенции.

Engine — це програмне забезпечення, яке забезпечує створення Image і Container і керування ними, таке як Docker.

Правильніше буде сказати, що це сервіс (або демон), який взаємодіє з docker-утилітою для тих завдань, які ви описали.

cringe. Краще такі топіки не робити. Медіум пост з двома апвоутами, без коментарів, лол

Блін, я і не звернув увагу, що це переклад. Думав, що це творчість когось з редакції, бо написано якось «поверхнево».

Невже адміністрація доу не може знайти серед користувачів доу людину, яка напише норм статтю? Ну заплатіть вже гроші, тим паче що ходить чутки, що вже платять гроші, при тому за дуже трешовий контент.

Ще можна добавити:
— multi-stage.
— яка інструкція крім FROM може бути першою в Dockerfile
— cgroup, namespaces, seccomp

Докер вже майже все, його розробник сам це визнав...https://twitter.com/solomonstre/status/1111004913222324225

Отже, ті хто досі не вивчили докер, можуть зітхнути з полегшенням і вже не вчити )

Можете його юзати ще років 100 я не проти.У нас нажаль на 122 це гівно ще теж присутнє.Його ми вимушені вчити, як і інші засторілі технології віртуалізації та контейнерізації..

Уже четыре года прошло с момента этого признания, а Докер все никак не все. Помню, как после анонса WebAssembly все рассказывали, что JavaScript скоро все. Мол, все будут писать фронт на С++ и горя не знать.

Насправді, якою б мовою не використовувалася в бекенді, фронтенд все одно представлятиме собою ті ж HTML, CSS і JavaScript. Як не крути, треба писати шаблони сторінок, створювати стилі, програмувати складнішу поведінку на JS. І все це взагалі ніяк не пов’язане з бекендом.
Wasm як компілятор для JavaScript може покращити безпеку програми, зменшивши поверхню атаки на вразливість, забезпечивши кращу безпеку пам’яті, приховуючи код, створюючи ізольоване середовище виконання та використовуючи існуючу екосистему безпеки. Wasm має обмежений набір інструкцій і краще керування пам’яттю, що допомагає зменшити поверхню атаки для вразливостей і запобігає деяким типовим типам уразливостей, таким як переповнення буфера(Error:stack Overflow).
_______________WASM____________________________________ЦЕ__ОЧЕВИДНО!!!!!
Код Wasm забезпечує певну безпеку через невідомість, оскільки його не читає людина, що ускладнює для зловмисників зворотне проектування коду, а отже, важче виявити та використати вразливості.
Wasm також можна запускати в ізольованому середовищі, що може допомогти ізолювати код від решти системи, щоб запобігти його доступу до конфіденційної інформації або виконанню незаконних операцій.
Wasm Frameworks, як і wasmCloud від CNCF, ще більше розширюють коло безпеки Wasm, надаючи абстракції вищого рівня, зменшуючи кількість коду, який розробники вбудовують у кожну програму. wasmCloud також полегшує навантаження на безпеку для розробників, спрощуючи підпис артефактів, увімкнувши вбудований моніторинг і автоматизувавши виправлення програм.
Крім того, ви можете використовувати майбутню модель компонентів, щоб обмежити поверхню атаки — хост може, наприклад, навіть не запропонувати API файлової системи — і в майбутньому світі такі обмеження стануть критичними!!!

«А хлопці-то не знають...»

Дуже часто питають про cgroup, який лежить в основі docker на рівні ОС.

3. Яка різниця між командою Docker CMD і RUN?

Це не покаже розуміння. Краще запитати різницю CMD та ENTRYPOINT.

Краще запитати різницю CMD та ENTRYPOINT.

И вдогонку спросить как они работают вместе)

И вдогонку спросить как они работают вместе)

Так.
А потім ще можна запитати «як переписати ентріпоінт?», «а чи треба так робити?» і про як воно працює в кубі.
Важливо підбирати питання, які можна далі розвивати.

Ніколи такого не було, і знову ДОУ перетворюється на Хабр, з перекладами технічних статей?

Найкраща стаття в цьому році

Ліл. Якийсь незрозумілий сарказм.
Чи вас насправді б задовольнили такі відповіді на питання 8, 9 та 14?

Підписатись на коментарі