Рубрики
Uncategorized

Создание изображений, управление и реестр (часть 1)

Работа с изображениями Docker Каждый контейнер Docker основан на изображении. До сих пор у нас есть … Tagged с Docker, Linux, DevOps, Microservices.

Работа с изображениями Docker

Каждый контейнер Docker основан на изображении.

До сих пор мы использовали изображения, которые были созданы другими и доступны в Docker Hub.

Docker может автоматически создавать изображения, прочитав инструкции из Dockerfile

DockerFile — это текстовый документ, который содержит все команды, которые пользователь может вызвать в командной строке, чтобы собрать изображение.

Обзор Dockerfile

Основной формат Dockerfile:

FROM busybox
COPY cat.txt
ADD add.txt
ADD compress.tar.gz /tmp
CMD ["sh"]

Dockerfile должен начать с инструкции. Ользовательская инструкция указывает базовое изображение, с которого вы строите.

Есть несколько инструкций, которые доступны в Dockerfile, некоторые из них включают в себя:

  • ОТ
  • БЕЖАТЬ
  • CMD
  • МЕТКА
  • РАЗОБЛАЧАТЬ
  • Эн
  • ДОБАВЛЯТЬ
  • Копия
  • ТОЧКА ВХОДА
  • ОБЪЕМ
  • ПОЛЬЗОВАТЕЛЬ

Многое другое….

Копия против добавления инструкции

Копия и Добавить оба инструкции DockerFile, которые служат аналогичными целями.

Они позволяют копировать файлы из определенного местоположения в изображение Docker.

Разница между копией и добавлением

Копия берет в SRC и пункт назначения. Это позволяет только копировать в локальном файле или каталоге с вашего хоста

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

Во -первых, вы можете использовать URL вместо локального файла/каталога. Во -вторых, вы можете извлечь файл TAR из источника непосредственно в пункт назначения.

Используйте Wget/Curl, где это возможно

Использование Add to Fetch Packages из удаленных URL -адресов сильно обескуражено; Вместо этого вы должны использовать Curl или Wget.

Это будет выполнять все строки неоднократно, будет выполняться каждый раз, когда один и один и один файл. Так, Это не хорошая практика

ADD http://example.com/big.tar.xz /usr/src/things/
RUN tar -xJf /usr/src/things/big.tar.xz -C /usr/src/things
RUN make -C /usr/src/things all

Это не создаст ненужных файлов и будет создавать последовательность, которая будет иметь дело только с файлом файла, а затем обрабатывается.

RUN mkdir -p /usr/src/things \
    && curl -SL http://example.com/big.tar.xz \
    | tar -xJC /usr/src/things \
    && make -C /usr/src/things all

Давайте будем демо, чтобы показать вам, как Добавить Работа.

  1. Создать сжатый файл
  2. Создайте DockerFile и определите файл для копирования из назначения
  3. Запустите этот Dockerfile
  4. Проверьте вывод в каталоге назначения.
Шаг 1. Создайте сжатый файл
root@dporwal-docker:~# touch compress.txt
root@dporwal-docker:~# tar -czvf compress.tar.gz compress.txt 
root@dporwal-docker:~# docker build -t demobusybox .

Шаг 2. Создайте DockerFile и определите файл для копирования из назначения

vi Dockerfile

Dockerfile1

Шаг 3. Запустите этот Dockerfile

$ docker build .

Шаг 4. Проверьте вывод в каталоге назначения.

Запустите контейнер, который построен Dockerfile

Разоблачить инструкцию

Разоблачить Инструкция сообщает Docker, что контейнер прослушивает указанные сетевые порты во время выполнения, и на самом деле не публикует порт. Он функционирует как тип документации между человеком, который строит изображение, и человеком, который управляет контейнером, о котором порты предназначены для публикации.

В выше Dockerfile1 вы можете увидеть сценарий, в котором человек не сможет получить порт, который он должен намерен опубликовать из -за не использовать Разоблачить командование

Итак, теперь мы будем использовать это Разоблачить Команда Dockerfile.

Здесь я создаю DockerFile, который запустит NGINX Server на порте 9080.

FROM ubuntu:latest
LABEL version="0.0.1"
LABEL maintainer="porwal.deepak2000@gmail.com"

RUN apt-get update && apt-get upgrade -y

RUN apt-get install nginx -y 

EXPOSE 9080

CMD ["nginx", "-g", "daemon off;"]

Это моя первоначальная среда моего сервера Docker.

Теперь мы запустим команды ниже, чтобы создать пользовательское изображение ExposedEmo с меткой 0,0,1

docker image build --tag exposedemo:0.0.1 .

И здесь мы создадим контейнер из ExposedEmo Изображение мы строим.

docker container run -d exposedemo:0.0.1

И на этом изображении вы можете увидеть в желтой коробке, контейнер работает на порту 9080

Чтобы проверить, вы также можете использовать эту команду.

docker inspect exposedemo:0.0.1 

Инструкция HealthCheck

Инструкция HealthCheck Docker позволяет нам рассказать платформе о том, как проверить, что наше приложение здоровое.

Когда Docker запускает контейнер, он отслеживает процесс, который работает контейнер. Если процесс заканчивается, контейнер выходит.

Это просто базовая проверка и не обязательно рассказывает подробности о приложении.

Мы можем указать определенные параметры перед работой CMD, это включает в себя:

HEALTHCHECK --interval=5s CMD ping -c 1 172.17.0.2

--interval=DURATION (default: 30s)
--timeout=DURATION (default: 30s)
--start-period=DURATION (default: 0s)
--retries=N (default: 3)

Давайте создадим контейнер DemohealthCheck который мы будем использовать для проверки соединения, и создадим другой контейнер монитор где мы будем реализовать HealtCheck Команда, проверяя соединение с DemohealthCheck контейнер.

Команды:

docker container run -dt --name demohealthcheck busybox sh

Мы получим IP -адрес этого контейнера для подключения.

docker inspect demohealthcheck 

Теперь давайте создадим Dockerfile и реализуем HealthCheck командование

FROM demohealthcheck
HEALTHCHECK --interval=5s CMD ping -c 1 172.17.0.3

Построение изображения и контейнер из приведенного выше файла Docker и проверьте соединение.

Мы также можем проверить журналы HealthCheck

docker inspect monitor

Если Exitcode: 1 Тогда что -то не так с контейнером.

0: Успех Контейнер полезен и готов к использованию
1: Отказ Контейнер работает неправильно
2: Зарезервированный Не используйте код выхода

Мы также можем использовать команды HealthCheck при создании контейнера. Как ниже, мы используем -Коллегистр-CMD

Команда:

docker run -dt --name tmp --health-cmd "curl -f http://localhost" busybox sh

И мы увидим, что контейнер нездоровый. На выполнении Docker осмотреть TMP Мы обнаружили, что команда Curl не найдена.

Теперь мы удалим этот контейнер и постараемся проверить контейнер через каждые 5 секунд, и он повторно повторно проведет 1 время при сбое.

Вы можете попробовать команду ниже и дайте мне знать в обсуждении, если вам нравится это сделать.

docker run -dt --name tmp --health-cmd "curl -f http://localhost" --health-interval=5s --health-retries=1 busybox sh

Для получения дополнительных команд вы можете проверить: https://docs.docker.com/engine/reference/run/#healthcheck

Dockerfile entrypoint

Лучшее использование для входа — это установить основную точку команды в команде изображения, не позволяет вам переопределить команду. Важно понять различие между CMD и точкой входа.

AS, команда CMD в DockerFile может быть переопределена командой времени выполнения. В то время как команда intrypoint будет добавлена к данной команде, указанной во время выполнения.

Пример фрагмента кода:

FROM ubuntu
ENTRYPOINT ["top", "-b"]
CMD ["-c"]

Workdir Trancing

Workdir Инструкция устанавливает рабочий каталог для любого запуска, CMD, входной точки, копирования и добавления инструкций, которые следуют за ним в Dockerfile

FROM busybox
RUN mkdir /root/demo
WORKDIR /root/demo
RUN touch dporwal.txt
CMD ['/bin/sh']

Инструкция WorkDir может использоваться несколько раз в DockerFile

Пример фрагмента:

WORKDIR /a
WORKDIR b
WORKDIR c
RUN pwd

Output =/a/b/c

Env Инструкция

Проходя в качестве аргумента во время выполнения. Инструкция ENV устанавливает переменную среды на значение.

Вы можете использовать флаги -E, -ENV и -ENV -файла для установки простых переменных среды в контейнере, в котором вы запускаете, или перезаписывают переменные, которые определены в DockerFile с изображением, которое вы запускаете.

Пример фрагмента:

docker run --env VAR1=value1 --env VAR2=value2 ubuntu env | grep VAR

Eg.
docker run -dt --name env01 --env USER=USERADMIN busybox sh

Реализация Env в Dockerfile

Пример фрагмента:

FROM busybox
ENV NGINX 1.2
RUN touch web-$NGINX.txt
CMD ["/bin/sh"]

Ссылки: Официальный докер Курс Udemy

Кредит: Рвение Вора

Предыдущая: Начало работы с Docker

Далее: создание изображений, управление и реестр (часть 2)

Оригинал: «https://dev.to/dporwal/image-creation-management-and-registry-part-1-pk9»