All checks were successful
Build MkDocs / build-and-deploy (push) Successful in 14s
115 lines
6.0 KiB
Markdown
115 lines
6.0 KiB
Markdown
### Полезные источники
|
||
|
||
- [**Базовые команды Docker**](https://github.com/python-dev-blog/docker-demo)
|
||
- [**Базовые команды docker-compose**](https://github.com/python-dev-blog/docker-compose-demo)
|
||
- [**Линтер для Docker**](https://github.com/hadolint/hadolint)
|
||
|
||
### Разное
|
||
|
||
#### ARG
|
||
|
||
[Статья](https://www.docker.com/blog/docker-best-practices-using-arg-and-env-in-your-dockerfiles/)
|
||
|
||
`Аргументы сборки (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:
|
||
```yaml
|
||
services:
|
||
myapp:
|
||
build:
|
||
context: .
|
||
dockerfile: Dockerfile
|
||
```
|
||
Последовательность
|
||
|
||
1. Ищет локально на хосте.
|
||
2. Ищет на Docker Hub.
|
||
3. Ищет в частных реестрах (если указан).
|
||
4. Сборка из Dockerfile (если указана опция build в docker-compose.yml).
|
||
|
||
#### В чём разница сежду ENTRYPOINT и CMD
|
||
|
||
[Статья](https://www.docker.com/blog/docker-best-practices-choosing-between-run-cmd-and-entrypoint/)
|
||
|
||
ENTRYPOINT и CMD [] (без квадратных скобок оболочка будет использована) не использует оболочку для выполнения команды, команда передаётся напрямую процессу, то есть пайпы и всякие приблуды оболочки не работают
|
||
Docker не запускает оболочку, а передает команду напрямую в процесс.
|
||
|
||
CMD можно переопределить при запуске контейнера
|
||
```bash
|
||
docker run image:tag comand
|
||
```
|
||
ENTRYPOINT задает команду, которая всегда будет выполняться при запуске контейнера. ENTRYPOINT используется для установки основной команды, которая должна быть выполнена, и она не может быть переопределена при запуске контейнера.
|
||
|
||
- `ENTRYPOINT` задаёт команду, которая всегда будет выполняться. Она не должна быть переопределена при запуске контейнера.
|
||
- `CMD` задаёт аргументы по умолчанию для `ENTRYPOINT`. Если `ENTRYPOINT` не указан, используется `CMD`, и `CMD` можно легко переопределить при запуске контейнера
|
||
|
||
```dockerfile
|
||
ENV MY_VAR=Hello
|
||
ENTRYPOINT ["sh", "-c", "echo $MY_VAR"]
|
||
```
|
||
|
||
```dockerfile
|
||
ENTRYPOINT ["nginx", "-g"]
|
||
CMD ["daemon off;"]
|
||
```
|
||
|
||
#### Хэлфчеки
|
||
|
||
Когда мы пишем
|
||
```yaml
|
||
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: |-
|
||
Это первая строка
|
||
Это вторая строка
|
||
### РЕЗУЛЬТАТ
|
||
Это первая строка
|
||
Это вторая строка
|
||
```
|