Перейти к содержанию

Заметки

Полезные источники#

Разное#

ARG#

Статья

Аргументы сборки (ARG) не сохраняются в конечном образе. ARG используется для передачи значений на этапе сборки. Эти значения доступны только во время сборки образа и не сохраняются в конечном образе. Также ARG не сохраняется в слоях образа, т.е. с помощью docker history <image_name>:<tag> значение переменной не посмотреть. Нельзя получить доступ к значению ARG из финального образа.

Как докер ищет образы?#

  • Докер сначала проверяет есть ли образ с указанным именем и тегом локально на хосте (в кэше Docker)
  • Если образ не найден локально, докер ищет его в registry по умолчанию, то есть в Dockerhub, Docker пытается спуллить образ с докер хаб, если тэг не указан, Docker использует тег latest по умолчанию
  • Дальше Docker идет в настроенный Docker registry и ищет образ там, например, image: registry.example.com/myimage:tag
  • Если образ не найден и в docker-compose.yml указана секция build, Docker создаст образ локально из Dockerfile, который находится в указанной директории. Пример в docker-compose.yml:

    services:
      myapp:
        build:
          context: .
          dockerfile: Dockerfile
    
    Последовательность

  • Ищет локально на хосте.

  • Ищет на Docker Hub.
  • Ищет в частных реестрах (если указан).
  • Сборка из Dockerfile (если указана опция build в docker-compose.yml).

В чём разница сежду ENTRYPOINT и CMD#

Статья

ENTRYPOINT и CMD [] (без квадратных скобок оболочка будет использована) не использует оболочку для выполнения команды, команда передаётся напрямую процессу, то есть пайпы и всякие приблуды оболочки не работают Docker не запускает оболочку, а передает команду напрямую в процесс.

CMD можно переопределить при запуске контейнера

docker run image:tag comand
ENTRYPOINT задает команду, которая всегда будет выполняться при запуске контейнера. ENTRYPOINT используется для установки основной команды, которая должна быть выполнена, и она не может быть переопределена при запуске контейнера.

  • ENTRYPOINT задаёт команду, которая всегда будет выполняться. Она не должна быть переопределена при запуске контейнера.
  • CMD задаёт аргументы по умолчанию для ENTRYPOINT. Если ENTRYPOINT не указан, используется CMD, и CMD можно легко переопределить при запуске контейнера
ENV MY_VAR=Hello
ENTRYPOINT ["sh", "-c", "echo $MY_VAR"]
ENTRYPOINT ["nginx", "-g"]
CMD ["daemon off;"]

Хэлфчеки#

Когда мы пишем

depends_on:
  postgresql-db:
    condition: service_healthy

Это значит что все хелфчеки к сервису (контейнеру) postgresql-db должны выполниться успешно, только после этого контейнер начнёт подниматься

&&#

Оператор && в командах оболочки используется для цепочки команд, где следующая команда выполняется только если предыдущая выполнилась успешно (с кодом возврата 0).

>- и |-#

Когда нужно указать много переменных окружения в compose можно использовать >-

text: >-
  Это первая строка
  Это вторая строка
# РЕЗУЛЬТАТ
Это первая строка Это вторая строка
# Ещё пример
environment:   
  CATALINA_OPTS: >-
    -XX:+UseContainerSupport
    -XX:MaxRAMPercentage=80.0
    -server
    -XX:+UseParallelGC
    -Dfile.encoding=UTF-8
    -Djava.security.egd=file:/dev/./urandom
    -Dcom.sun.management.jmxremote
    -Dcom.sun.management.jmxremote.port=9000
    -Dcom.sun.management.jmxremote.rmi.port=9000
    -Dcom.sun.management.jmxremote.local.only=false
    -Dcom.sun.management.jmxremote.authenticate=false
    -Dcom.sun.management.jmxremote.ssl=false
    -Djava.rmi.server.hostname=

При использовании |- переносы строк сохраняются как есть

text: |-
  Это первая строка
  Это вторая строка
### РЕЗУЛЬТАТ
Это первая строка
Это вторая строка