Как в новом проекте с docker используя уже имющийся образ сделать новый контейнер?
Здравствуйте. Опишу сразу ситуацию, потому что могу немного неправильно употреблять терминологию докера.
Допустим у меня есть проект, использующий определенный стек, описанный в docker-compose.yml. Пусть это будут nginx, php и postgres. В какой то момент времени мне, например, необходимо поднять новый проект, использующий этот же стек ну или часть, пусть это будет postgres. Если просто скопировать docker-compose.yml в папку с новым проектом (ну или взять тот же образ postgres), то после запуска нового проекта командой docker-compose up я получаю базы данных с прошлого проекта.
Да, понимаю, что в каких-то случаях в этом ничего такого нет, что используется один контейнер, но есть случаи, как мой (образ keyckloak) и я хочу используя один образ в разных проектах иметь разные контейнеры. Как этого добиться? Изменить атрибут container_name описания образа? Или как-то по другому?
то после запуска нового проекта командой docker-compose up я получаю базы данных с прошлого проекта.
Тут либо используется image с прошлого проекта, который не просто postgres, а что-то другое.
Либо у тебя есть ещё какой-то скрипт, который эту базу инициализирует.
container_name повлияет только на имя контейнера, с которым он запускается.
Василий Банников, все верно - image именно с прошлого проекта. Но в том то и вся соль, если он полностью меня устраивает, то зачем мне искать новый и как его переиспользовать в новом проекте.
Кстати сейчас попробовал в новом проекте использовать старый образ keycloak - именно он выдал ошибку, якобы уже используетя другим контейнером
Shurik, ну значит не полностью устраивает, раз то, что является частью образа (схема базы) не устраивает.
Попробуйте порефакторить, чтобы был какой-нибудь базовый постгрес с теми настройками, которые вы ходите, и от него пусть будут уже конкретные постгресы со схемой для каждого конкретного проекта.
Ну и приложите сюда код, чтобы было понятно, о чём вы говорите.
А то сейчас реально какой-то глухой телефон, где вы общими словами описываете, что у вас во всех конфигах, а я пытаюсь по этим словам конфиги воссоздать, и понять, какая там ошибка из-за них возникает.
Василий Банников, ну как раз таки с постгресом проблем и нет. В принципе я его для примера использовал. В новом проекте просто создавал новую схему и использовал ее. Соседние схемы мне не мешаются. Но вопрос встал именно с keyckoak. Прикладываю конфиги:
docker-compose.yml
version: '3'
services:
web:
image: nginx
volumes:
- ./.docker/conf/nginx/default.conf:/etc/nginx/conf.d/default.conf
- ./www:/var/www/html
ports:
- 80:80
depends_on:
- php
- db
php:
build: .docker
volumes:
- ./.docker/conf/php/php.ini:/usr/local/etc/php/conf.d/php.ini
- ./.docker/conf/php/xdebug.ini:/usr/local/etc/php/conf.d/xdebug.ini
- ./www:/var/www/html
db:
image: postgres:10.1
restart: on-failure
environment:
- POSTGRES_DB=${DB_NAME}
- POSTGRES_USER=${DB_USER}
- POSTGRES_PASSWORD=${DB_PASSWORD}
ports:
- 5432:5432
volumes:
- ./.docker/conf/postgres/:/docker-entrypoint-initdb.d/
keycloak:
image: quay.io/keycloak/keycloak:legacy
container_name: keycloak_akfk
restart: on-failure
environment:
DB_VENDOR: POSTGRES
DB_ADDR: db
DB_DATABASE: ${DB_NAME}
DB_USER: ${DB_USER}
DB_SCHEMA: public
DB_PASSWORD: ${DB_PASSWORD}
KEYCLOAK_USER: admin
KEYCLOAK_PASSWORD: admin
# Uncomment the line below if you want to specify JDBC parameters. The parameter below is just an example, and it shouldn't be used in production without knowledge. It is highly recommended that you read the PostgreSQL JDBC driver documentation in order to use it.
#JDBC_PARAMS: "ssl=true"
ports:
- 8080:8080
volumes:
- ./.docker/data_keycloak:/data
./.docker/conf/postgres
extension-uuid.sql CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
./.docker/data_keycloak
realm-export.json
{
"enable-cors": true,
}
со вторым не помню точно, но вроде я что-то экспериментировал, не факт, что оно вообще работает. Вроде я еще хотел добиться пробросить папку в контейнер, но если не ошибаюсь, так ничего и не вышло. Но это не точно)
Василий Банников, кстати поменял в описании keycloak атрибут container_name и конфлилт при установке пропал. А постгрес и так установился в новый контейнер, т.е. бд из старого проекта не были доступны в новом. Видимо те проблемы, о которых вы говорили, они были у меня с другими образами.
Но все равно спасибо за объяснения) Если не сложно, объясните пожалуйста в друх словах, что происходит, когда я в новом проекте использую старый образ, на основе которого уже есть контейнер, так как полного понимания пока нету))
Shurik, вообще, ничего страшного не должно происходить - просто должен будет подняться новый контейнер.
Но что в вашей ситуации произошло, почему вообще из разных composer произошёл конфликт имён - для меня загадка