Инструменты пользователя

Инструменты сайта


linux:containers

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
linux:containers [2025/01/25 07:03]
admin
linux:containers [2025/04/16 06:53] (текущий)
admin [Volumes]
Строка 433: Строка 433:
  
 При повторном создании образа (через Dockerfile), образ пересоздается, типа следующая версия (latest), старый остается.\\ При повторном создании образа (через Dockerfile), образ пересоздается, типа следующая версия (latest), старый остается.\\
 +
 +
 +==== Volumes ====
 +Инструкция "VOLUME" в Dockerfile при сборке, похоже просто создает новый волюм во время сборки, плюс обязывает созданный контейнер постоянно монтировать его при запуске\\
 +
 +<code bash>
 +podman volume create <vol_name>
 +podman volume ls / inspect <vol_name> / rm <vol_name>
 +
 +# Создание контейнера с примонтированным волюмом (можно не запускать)
 +podman container create --name <container_name> -v <vol_name>:/inside_folder <image_name>
 +
 +# Копируем из хоста файлы в волюм, через контейнер
 +podman cp <host_dir>/ <container_name>:/<inside_folder>
 +
 +# Теперь в волюме есть нужные данные, персистентно и им можно пользоваться в других контейнерах
 +podman run -it -v <vol_name>:/inside_folder <image_name>
 +</code>
 +
 +
 +Монтирование папки с хоста в контейнер\\
 +Только права на нее назначаются рутовые\\
 +<code bash>
 +podman run -d -v /path/host_dir:/container_dir <image_name>
 +podman run -d --mount src=/path/host_dir,target=/container_dir,type=bind <image_name>
 +
 +# В Compose
 +services:
 +  my_app:
 +    image: my_app
 +    container_name: my_app
 +    volumes:
 +      - type: bind
 +        source: /path/host_dir
 +        target: /container_dir
 +
 +</code>
 +
 +
  
  
Строка 438: Строка 477:
  
 ===== Docker-compose ===== ===== Docker-compose =====
 +Указание версии в файле либо впринципе устарело либо приобрело новый формат - [[https://docs.docker.com/reference/compose-file/]]\\
 +[[https://docs.docker.com/reference/compose-file|Docs]]\\
 +
 Оркестрация несколькими контейнерами\\ Оркестрация несколькими контейнерами\\
 <code bash> <code bash>
Строка 459: Строка 501:
 <details> <details>
 <summary> :!: Пример приложения и БД postgres</summary> <summary> :!: Пример приложения и БД postgres</summary>
- 
 Приложение загружается с собственного registry, перед этим нужно выполнить "docker login"\\ Приложение загружается с собственного registry, перед этим нужно выполнить "docker login"\\
 Контейнеры объединяются в общую сеть\\ Контейнеры объединяются в общую сеть\\
Строка 560: Строка 601:
   * KAFKA_ADVERTISED_LISTENERS - адреса для клиентов, в т.ч. для межброкерного взаимодействия   * KAFKA_ADVERTISED_LISTENERS - адреса для клиентов, в т.ч. для межброкерного взаимодействия
   * режим для межброкерного взаимодействия задается в "KAFKA_INTER_BROKER_LISTENER_NAME", но для этого в вышестоящем пар-ре должен быть прописан этот режим (internal/external)   * режим для межброкерного взаимодействия задается в "KAFKA_INTER_BROKER_LISTENER_NAME", но для этого в вышестоящем пар-ре должен быть прописан этот режим (internal/external)
- 
 </details> </details>
  
Строка 658: Строка 698:
  
 ==== Порядок запуска ==== ==== Порядок запуска ====
 +В итоге хз, порядок запуска есть, но только запуск контейнера, сделать ожидание инициализации так и не удалось\\
  
 <details> <details>
 <summary>:!: depends_on</summary> <summary>:!: depends_on</summary>
- 
 **condition: service_started**\\ **condition: service_started**\\
 Такой порядок запуска работает но учитывается только старт контейнера а не сервиса внутри него\\ Такой порядок запуска работает но учитывается только старт контейнера а не сервиса внутри него\\
Строка 732: Строка 771:
 Но первый сервис все равно стартанул, не взирая на правило, правда стартанул последним\\ Но первый сервис все равно стартанул, не взирая на правило, правда стартанул последним\\
 Да, на порядок влияет и влияет хелс-чек, ну и с-но параметр **service_healthy**, хотя и та и та сработали по отдельности\\ Да, на порядок влияет и влияет хелс-чек, ну и с-но параметр **service_healthy**, хотя и та и та сработали по отдельности\\
-Да, если зависимость убрать то в обычном порядке стартует, тобишь флаги работают но работают они что то одинаково\\+Да, если зависимость убрать то в обычном порядке стартует, тобишь флаги работают но работают они что то одинаково, просто порядок запуска, без ожидания\\
  
 <code yaml> <code yaml>
Строка 775: Строка 814:
       - "./script/:/deployments/"       - "./script/:/deployments/"
 </code> </code>
 +</details>
  
  
-<code yaml>+ 
 +==== PostgreSQL ==== 
 +:!: Примонтировав папку со скриптами в **"/docker-entrypoint-initdb.d"** внутри контейнера, можно выполнять любой функционал с БД внутри контейнера, после инициализации сервера\\ 
 + 
 + 
 +<details> 
 +<summary>:!: Общий пример</summary> 
 +Капец, каждую версию управляющие переменные окружения меняются\\ 
 +В 15ой обязательная переменная **POSTGRES_PASSWORD**, для создания БД - **POSTGRES_DB**\\ 
 +В 17ой все другое\\ 
 +<code bash> 
 +services: 
 +  post-db: 
 +    image: "postgres:15-alpine3.20" 
 +#    env_file: .env 
 +    environment: 
 +      POSTGRES_DB: 'my_db' 
 +      POSTGRES_PASSWORD: 'postgres1' 
 +    ports: 
 +      - "5432:5432"
 </code> </code>
 </details> </details>
  
  
 +
 +<details>
 +<summary>:!: МультиБД</summary>
 +[[https://github.com/mrts/docker-postgresql-multiple-databases|Src]]\\
 +Монтируем скрипт в директорию **/docker-entrypoint-initdb.d** внутри контейнера, он создает несколько БД\\
 +
 +<code bash>
 +services:
 +  sarm-db:
 +    image: "postgres:15-alpine3.20"
 +#    env_file: .env
 +    environment:
 +#      POSTGRES_DB: "my_db"
 +      POSTGRES_PASSWORD: "ppp"
 +      POSTGRES_MULTIPLE_DATABASES: my_db1,my_db2
 +    volumes:
 + - ./extended_scripts:/docker-entrypoint-initdb.d
 +    ports:
 +      - "5432:5432"
 +</code>
 +</details>
 +
 +
 +
 +<details>
 +<summary>:!:  </summary>
 +
 +<code bash>
 +</code>
 +</details>
 +
 +
 +
 +
 +
 +==== Разное ====
 +
 +<details>
 +<summary>:!: Command</summary>
 +Похоже не переопределяет команду запуска контейнера или какие то нюансы есть\\
 +Команду нужно писать либо одну либо **bash -c 'first && second'**
 +
 +<code bash>
 +</code>
 +</details>
  
  
linux/containers.1737788588.txt.gz · Последнее изменение: 2025/01/25 07:03 — admin