Как да създавате персонализирани Dockerfile изображения стъпка по стъпка

    ,
  • Dockerfile автоматизира изграждането на персонализирани Docker изображения.
  • Инструкции като FROM, RUN, COPY и CMD ви позволяват да дефинирате всеки слой от изображението.
  • С Docker Compose можете да интегрирате вашите персонализирани изображения в среди с множество контейнери.
  • Публикуването на изображения в Docker Hub улеснява сътрудничеството и внедряването в екипи.

Персонализирано изображение на Dockerfile

При работа с контейнери докер, използването на графични изображения може да бъде добра отправна точка. Въпреки това, идва момент в почти всеки проект, когато имате нужда от повече контрол, специфични настройки или просто да включите своя собствена конфигурация. Това е мястото, където персонализирани изображения на Dockerfile.

В тази статия ви предоставяме a подробно ръководство, ясен и изчерпателен, за да можете да научите как да създавате свои собствени персонализирани Docker изображения. От основни понятия като какво е Dockerfile и как работи до усъвършенствани техники като оптимизиране на Dockerfile, използване на променливи, кеширане и управление на регистрационни файлове.

Какво е Dockerfile и защо ви е необходим?

Dockerfile е просто обикновен текстов файл, съдържащ инструкции така че Docker да знае как да изгради изображение. Всяка инструкция в Dockerfile показва конкретна стъпка и Docker я интерпретира като слой в крайното изображение, което се генерира.

Изображенията в Docker са съставени от неизменни слоеве. Dockerfiles дефинират стъпка по стъпка как тези слоеве трябва да бъдат създадени, от избиране на основно изображение до копиране на файлове, инсталиране на пакети или конфигуриране на услуги. Тъй като са възпроизводими, Dockerfiles позволяват Напълно автоматизирайте генерирането на персонализирани среди по лесен начин.

Този подход има множество предимства: възпроизводимост, лекота на споделяне, по-добра поддръжка и сигурност. Освен това използването на Dockerfile ви позволява да избегнете необходимостта от ръчно конфигуриране на конфигурации всеки път, когато стартирате контейнер. Всичко е автоматизирано и документирано.

докер файл

Как работи Dockerfile: Основите

За да създадете персонализирани Dockerfile изображения, първото нещо е да определите от кое основно изображение ще започнем. Това става с директивата ОТ, Например:

FROM ubuntu:20.04

Оттам са включени допълнителни инструкции, които ви позволяват да изградите и персонализирате изображението:

  • КОПИЕ: копирайте файлове от вашата локална машина във файловата система на контейнера.
  • РАБОТА: изпълнява команди в рамките на изображението за компилация (напр. инсталиране на пакети).
  • CMD: дефинира коя команда ще бъде изпълнена по подразбиране при стартиране на контейнер от това изображение.
  • ВХОДНА ТОЧКА: задава основния процес на контейнера, подобен на CMD, но по-контролиран.
  • ENV: задава променливи на средата в контейнера.
  • ПОТРЕБИТЕЛ и WORKDIR: показва кой потребител ще изпълни командите и каква ще бъде работната директория.

Практически пример за Dockerfile може да бъде следното:

FROM ubuntu:20.04
RUN apt-get update && apt-get install -y sudo nano curl nmap
COPY script.sh /usr/local/bin/script.sh
RUN chmod +x /usr/local/bin/script.sh
ENV direcIP=127.0.0.1
CMD ["/usr/local/bin/script.sh"]

Този пример инсталира необходимите инструменти и конфигурира персонализиран скрипт за анализ с IP като променлива, което позволява лесното му модифициране при стартиране на контейнера.

Организация на строителния контекст

Когато Docker изгражда изображение, той го прави от директория, известна като строителен контекст. Тази директория трябва да съдържа:

  • Файлът Докер файл.
  • Всички файлове, които искате да копирате в контейнера (изходен код, скриптове, конфигурации…).
  • Файл .dockerignore за да избегнете включването на ненужни файлове.

Например, ако създавате изображение с приложение на Python, вашият контекст на изграждане трябва да включва:

  • Докер файл
  • app.py
  • изисквания.txt

Това е жизненоважно, за да може Docker правилно да копира необходимите елементи в контейнера по време на процеса на изграждане.

докер

Компилирайте персонализираното изображение

След като имате готов Dockerfile и контекст, можете да изградите изображението с командата:

docker build -t nombreimagen:versión .

Например:

docker build -t miimagenpython:1.0 .

Завършващата точка («.») показва, че контекстът на компилация е текущата директория. Когато приключите, Docker ще ви покаже ID на изображението и можете да го видите с:

docker images

Тествайте и стартирайте вашето персонализирано изображение

Стартирането на контейнер от вашето ново изображение е толкова просто, колкото:

docker run --name miapp -it miimagenpython:1.0

Ако сте го конфигурирали правилно (например с Flask или nginx), можете да получите достъп до него от браузъра, стига да сте картографирали портовете по подходящ начин:

docker run -p 4000:4000 miimagenpython:1.0

докер

Използване на променливи на средата (ENV)

Директива ENV ви позволява да зададете стойности по подразбиране, но можете също да ги замените по време на изпълнение. Практически пример би бил да зададете IP адрес за сканиране с nmap:

ENV direcIP=127.0.0.1

И след това стартирайте контейнера по следния начин:

docker run -e direcIP=192.168.1.1 miimagen

Това позволява по-гъвкави и многократно използвани изображения, без да се налага постоянно да ги променяте.

Изпълними файлове по подразбиране: CMD и ENTRYPOINT

Има два начина да укажете какво ще се изпълнява по подразбиране при стартиране на контейнера: CMD y ВХОДНА ТОЧКА. Разликата между двете е, че CMD може да бъде презаписан лесно от терминала, докато ENTRYPOINT превръща контейнера в един вид „затворен“ изпълним файл.

Добра практика е да използвате ENTRYPOINT за стартиране на скриптове за стартиране и CMD по подразбиране. Например:

ENTRYPOINT ["/start.sh"]
CMD ["defaultvalue"]

По този начин можете да предавате конкретни аргументи, без да променяте логиката на включения скрипт.

Най-добри практики и оптимизация на Dockerfile

Ето някои основни препоръки при създаване на персонализирани Dockerfile изображения:

  • Използвайте светли основни изображения като Alpine, когато е възможно (те заемат по-малко място и са по-бързи).
  • Групи RUN инструкции в един блок, за да минимизирате броя на слоевете.
  • Избягвайте интерактивни инструкции (като подкани за потвърждение). Винаги използвайте -y o --no-prompt в съоръжения.
  • Изтриване на временни файлове след употреба.
  • Използвайте .dockerignore както бихте направили с .gitignore, за да не включвате ненужни файлове.

Прилагането на тези указания подобрява производителността на изображението и намалява рисковете за сигурността.

Контрол на кеша по време на строителството

Docker използва интелигентна система за кеширане, за да избегне повторно изпълнение на стъпки, които не са променени. Това ускорява реконструкциите. Ако редактирате вашите персонализирани Dockerfile изображения, те ще се изградят отново само от реда, който е променен.

Ако искате да принудите пълно възстановяване, можете да използвате:

docker build --no-cache -t nombreimagen .

Това гарантира, че всичко ще бъде направено от нулата, полезно при промяна на външни файлове, които не са открити от кеширащата машина.

докер хъб

Споделяне на изображения: Docker Hub и регистри

След като сте проверили вашето персонализирано изображение, можете да го качите в хранилище (като напр Докер център), за да го споделите. Потокът ще бъде:

  1. Регистрирайте се за Docker Hub и създайте хранилище.
  2. Свържете вашия клиент към Docker Hub с docker login.
  3. Маркирайте изображението с вашето потребителско име:
docker tag miimagen username/miimagen:1.0
  1. Качете изображението с:
docker push username/miimagen:1.0

След като това е направено, Всеки ще може да изтегли и използва вашето персонализирано изображение използвайки:

docker pull username/miimagen:1.0

Интеграция с Docker Compose

При по-сложни проекти е обичайно да са необходими няколко контейнера (уеб, база данни, балансиращо натоварване и т.н.). За тази цел се използва докер-compose.yml, където можете да дефинирате услугите, които да се изпълняват.

Пример за използване с вашето собствено изображение би бил:

version: '3'
services:
  web:
    image: username/miimagen:1.0
    ports:
      - "4000:4000"
  redis:
    image: redis

Така, Docker-compose може да разгръща услуги от персонализирани изображения и да ги комбинира. с други стандарти по последователен начин.

При стартиране docker-compose up, стартират се всички дефинирани услуги, което е идеално за цялостни среди за разработка.

С всички тези инструменти и техники можете да създадете стабилни, персонализирани и ефективни среди за всички ваши проекти. Вече няма да сте ограничени до общи изображения и можете да приспособите всичко точно към вашите нужди.