$ sudo -i
# groupadd -r slapd-dcm4chee --gid=1021 && useradd -r -g slapd-dcm4chee --uid=1021 slapd-dcm4chee
# groupadd -r postgres-dcm4chee --gid=999 && useradd -r -g postgres-dcm4chee --uid=999 postgres-dcm4chee
# groupadd -r dcm4chee-arc --gid=1023 && useradd -r -g dcm4chee-arc --uid=1023 dcm4chee-arc
# groupadd -r keycloak-dcm4chee --gid=1029 && useradd -r -g keycloak-dcm4chee --uid=1029 keycloak-dcm4chee
# exit
Продолжите, используя Docker Command Line или Docker Compose:
$ docker network create dcm4chee_network
Запустите контейнер с MariaDB Server в созданной сети, напр.:
$ docker run --network=dcm4chee_network --name mariadb \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=secret \
-e MYSQL_DATABASE=keycloak \
-e MYSQL_USER=keycloak \
-e MYSQL_PASSWORD=keycloak \
-v /etc/localtime:/etc/localtime:ro \
-v /etc/timezone:/etc/timezone:ro \
-v /var/local/dcm4chee-arc/mysql:/var/lib/mysql \
-d mariadb:10.11.4
Публикация порта 3306 MariaDB Server с контейнера на хост через -p 3306:3306 позволяет получать доступ к
MariaDB Server также внешним клиентам MariaDB/MySQL. Это не требуется для работы Keycloak, поскольку
контейнер Keycloak подключается к порту Server контейнера MariaDB Server через созданную bridge-сеть.
```
-e MYSQL_ROOT_PASSWORD=secret
-e MYSQL_DATABASE=keycloak \
-e MYSQL_USER=keycloak \
-e MYSQL_PASSWORD=keycloak \
```
задают пароль супер-пользователя root MariaDB, имя базы данных, имя пользователя и его пароль.
См. доступные переменные окружения контейнера MariaDB.
Bind-mount -v /etc/localtime:/etc/localtime:ro и -v /etc/timezone:/etc/timezone:ro дублирует
ваш часовой пояс хоста внутри контейнера. Иначе часовой пояс контейнера — UTC. Внимание: если на
вашем хосте нет /etc/timezone, необходимо создать его (напр.: $ echo "Europe/Vienna" > /etc/timezone) перед
запуском контейнера, иначе контейнер не запустится.
Bind-mount -v /var/local/dcm4chee-arc/mysql:/var/lib/mysql обеспечивает хранение базы данных в
указанном каталоге хоста. Она инициализируется при первом запуске контейнера, если ещё не присутствует в
указанном каталоге хоста. Это гарантирует, что данные не будут потеряны при удалении и повторном создании
контейнера MariaDB Server.
Запустите контейнер с предварительно настроенным сервером аутентификации Keycloak в созданной сети, напр.:
$ docker run --network=dcm4chee_network --name keycloak \
-p 8843:8843 \
-e KC_HTTPS_PORT=8843 \
-e KC_HOSTNAME=https://<docker-host>:8843 \
-e KC_HOSTNAME_BACKCHANNEL_DYNAMIC=true \
-e KC_BOOTSTRAP_ADMIN_USERNAME=admin \
-e KC_BOOTSTRAP_ADMIN_PASSWORD=changeit \
-e KC_DB=mariadb \
-e KC_DB_URL_DATABASE=keycloak \
-e KC_DB_URL_HOST=mariadb \
-e KC_DB_USERNAME=keycloak \
-e KC_DB_PASSWORD=keycloak \
-e KC_LOG=file \
-e ARCHIVE_HOST=<docker-host> \
-e KEYCLOAK_WAIT_FOR="ldap:389 mariadb:3306" \
-v /etc/localtime:/etc/localtime:ro \
-v /etc/timezone:/etc/timezone:ro \
-v /var/local/dcm4chee-arc/keycloak:/opt/keycloak/data \
-d dcm4che/keycloak:26.0.6
-p 8843:8843 \
публикует https-порт (8843) Keycloak с контейнера на хост, чтобы разрешить подключения от
внешних https-клиентов к Keycloak.
Номер порта задаётся через:
-e KC_HTTPS_PORT=8843 \
чтобы избежать конфликтов с https-портом, по умолчанию используемым Wildfly с развёрнутым приложением dcm4che Archive 5.
-e KC_HOSTNAME=https://<docker-host>:8843 \
указывает полный URL, по которому сервер Keycloak будет доступен внешним клиентам — в частности, веб-браузерам.
-e KC_HOSTNAME_BACKCHANNEL_DYNAMIC=true \
позволяет обращаться к backend-эндпоинтам сервера Keycloak по другому URL, отличному от frontchannel,
заданного через KC_HOSTNAME, что обеспечивает коммуникацию через docker overlay/bridge-сети из других docker-контейнеров —
в частности, из контейнера архива.
-e KC_BOOTSTRAP_ADMIN_USERNAME=admin \
-e KC_BOOTSTRAP_ADMIN_PASSWORD=changeit \
требуется для создания admin-аккаунта, чтобы иметь возможность войти в админ-консоль master-realm
Keycloak по адресу https://${KC_HOSTNAME}:${KC_HTTPS_PORT}[/${KC_HTTP_RELATIVE_PATH}]. После создания первого пользователя с
административными правами вы можете использовать UI для смены пароля или создания дополнительных admin-пользователей
и/или удаления этого исходного admin-пользователя.
-e KC_DB: mariadb
-e KC_DB_URL_DATABASE: keycloak
-e KC_DB_URL_HOST: mariadb
-e KC_DB_USERNAME: keycloak
-e KC_DB_PASSWORD: keycloak
задают поставщика базы данных, имя, хост, имя пользователя и пароль базы данных, используемой Keycloak.
KC_DB_URL_DATABASE, KC_DB_USERNAME и KC_DB_PASSWORD должны совпадать со значениями, заданными для
MYSQL_DATABASE, MYSQL_USER и MYSQL_PASSWORD при запуске контейнера MariaDB Server, а
KC_DB_URL_HOST должен совпадать с именем этого контейнера.
KC_LOG=file
включает логирование в файл /opt/keycloak/data/keycloak.log вместо вывода в стандартный поток вывода.
Если вы задали переменные окружения LDAP_BASE_DN, LDAP_ROOTPASS для контейнера LDAP-сервера, необходимо задать
эти переменные окружения и для контейнера Keycloak. Иначе Keycloak не сможет подключиться к LDAP-серверу.
-e ARCHIVE_HOST=<docker-host> \
задаёт публичное имя хоста устройства архива, на которое ссылаются OIDC-клиенты Keycloak для защиты UI
и Wildfly Administration Console архива, инициализируемых при первом запуске. Необходимо заменить
\
-e KEYCLOAK_WAIT_FOR=ldap:389 mariadb:3306 задерживает запуск Keycloak до тех пор, пока OpenLDAP slapd и MariaDB server
не начнут прослушивать указанные порты, что предотвращает ошибки при перезапуске всех контейнеров, вызванные ошибками
подключения Keycloak к LDAP до того, как OpenLDAP slapd и MariaDB server готовы принимать соединения.
Дополнительные доступные переменные окружения контейнера Keycloak см. на https://github.com/dcm4che-dockerfiles/keycloak-quarkus#environment-variables.
Bind-mount -v /etc/localtime:/etc/localtime:ro и -v /etc/timezone:/etc/timezone:ro дублирует
ваш часовой пояс хоста внутри контейнера. Иначе часовой пояс контейнера — UTC. Внимание: если на
вашем хосте нет /etc/timezone, необходимо создать его (напр.: $ echo "Europe/Vienna" > /etc/timezone) перед
запуском контейнера, иначе контейнер не запустится.
Bind-mount -v /var/local/dcm4chee-arc/keycloak:/opt/keycloak/data отображает лог- и временные файлы Keycloak в
указанный каталог хоста.
По умолчанию https-сервис использует сертификат
для обработки TLS-соединений. Чтобы избежать предупреждений безопасности веб-браузеров при доступе к UI Keycloak или
WildFly Administration Console, необходимо предоставить сертификат, Common Name и/или Subject Alt Name которого
совпадает с именем хоста и который подписан доверенным издателем, в файле keystore в формате
PKCS #12 или
Java KeyStore (JKS),
примонтировать этот файл или содержащий его каталог в контейнер и сослаться на него через переменную окружения
KC_HTTPS_KEY_STORE_FILE.
Проверьте лог сервера Keycloak на предмет успешного запуска:
console
$ tail -f /var/local/dcm4chee-arc/keycloak/log/keycloak.log
2022-06-09 16:06:19,360 INFO [org.jgroups.protocols.pbcast.GMS] (keycloak-cache-init) 875d7be6d885-1337: no members discovered after 2002 ms: creating cluster as coordinator
2022-06-09 16:06:19,369 INFO [org.infinispan.CLUSTER] (keycloak-cache-init) ISPN000094: Received new cluster view for channel ISPN: [875d7be6d885-1337|0] (1) [875d7be6d885-1337]
2022-06-09 16:06:19,373 INFO [org.infinispan.CLUSTER] (keycloak-cache-init) ISPN000079: Channel `ISPN` local address is `875d7be6d885-1337`, physical addresses are `[172.21.0.3:44392]`
2022-06-09 16:06:19,873 INFO [org.keycloak.connections.infinispan.DefaultInfinispanConnectionProviderFactory] (main) Node name: 875d7be6d885-1337, Site name: null
2022-06-09 16:06:19,935 INFO [org.keycloak.services] (main) KC-SERVICES0050: Initializing master realm
2022-06-09 16:06:22,169 INFO [org.keycloak.services] (main) KC-SERVICES0004: Imported realm dcm4che from file /opt/keycloak/bin/../data/import/dcm4che-realm.json.
2022-06-09 16:06:22,405 INFO [org.keycloak.services] (main) KC-SERVICES0009: Added user 'admin' to realm 'master'
2022-06-09 16:06:22,719 INFO [io.quarkus] (main) Keycloak 19.0.1 on JVM (powered by Quarkus 2.7.5.Final) started in 8.238s. Listening on: https://0.0.0.0:8843
2022-06-09 16:06:22,719 INFO [io.quarkus] (main) Profile prod activated.
2022-06-09 16:06:22,719 INFO [io.quarkus] (main) Installed features: [agroal, cdi, hibernate-orm, jdbc-h2, jdbc-mariadb, jdbc-mssql, jdbc-mysql, jdbc-oracle, jdbc-postgresql, keycloak, logging-gelf, narayana-jta, reactive-routes, resteasy, resteasy-jackson, smallrye-context-propagation, smallrye-health, smallrye-metrics, vault, vertx]
Дополнительно см. переменные окружения Keycloak
Запустите контейнер с Wildfly и развёрнутым приложением dcm4che Archive 5 в созданной сети, напр.:
$ docker run --network=dcm4chee_network --name arc \
-p 8080:8080 \
-p 8443:8443 \
-p 9990:9990 \
-p 9993:9993 \
-p 11112:11112 \
-p 2762:2762 \
-p 2575:2575 \
-p 12575:12575 \
-e POSTGRES_DB=pacsdb \
-e POSTGRES_USER=pacs \
-e POSTGRES_PASSWORD=pacs \
-e AUTH_SERVER_URL=https://keycloak:8843 \
-e UI_AUTH_SERVER_URL=https://<docker-host>:8843 \
-e WILDFLY_WAIT_FOR="ldap:389 db:5432 keycloak:8843" \
-v /etc/localtime:/etc/localtime:ro \
-v /etc/timezone:/etc/timezone:ro \
-v /var/local/dcm4chee-arc/wildfly:/opt/wildfly/standalone \
-d dcm4che/dcm4chee-arc-psql:5.34.3-secure
который отличается от Run minimum set of archive services on a single host
только
- -e AUTH_SERVER_URL=https://keycloak:8843 — гарантирует, что архив подключается к контейнеру keycloak через
bridge-сеть, используя корректный порт, заданный переменной -e KC_HTTPS_PORT=8843 контейнера keycloak,
- -e UI_AUTH_SERVER_URL=https://<docker-host>:8843 — необходимо заменить \-d dcm4che/dcm4chee-arc-psql:5.34.3-secure — чтобы выбрать Docker-образ Архива с защищённым UI и
защищёнными RESTful-сервисами. Если вы хотите защитить UI Архива без защиты RESTful-сервисов, используйте
-d dcm4che/dcm4chee-arc-psql:5.34.3-secure-ui.
Если вы задали переменные окружения REALM_NAME или SSL_REQUIRED для контейнера сервера Keycloak, необходимо
задать эти переменные окружения и для контейнера Архива. Иначе фоновый внеполосный REST-вызов
к Keycloak для авторизации пользователя завершится с ошибкой.
Если вы хотите запустить более одного контейнера Архива, необходимо указать различные значения переменной окружения
UI_CLIENT_ID (по умолчанию: dcm4chee-arc-ui) и зарегистрировать каждый из UI Архива в Keycloak.
Дополнительно см. переменные окружения Архива
Войдите с пользователем/паролем root/changeit в Realm Admin Console Keycloak по адресу
https://<docker-host>:8843/admin/dcm4che/console
Примечание:
- Замените <docker-host> на имя хоста docker-хоста.
- Если вы изменили имя realm по умолчанию dcm4che через переменную окружения REALM_NAME
для контейнеров Keycloak и Архива, замените dcm4che в URL на это значение.
Docker-образ Keycloak dcm4che/keycloak:26.0.6 и новее создаёт OIDC-клиент для UI Архива при первом
запуске, настраиваемый через переменные окружения :
- UI_CLIENT_ID
- ARCHIVE_HOST
- ARCHIVE_HTTP_PORT
- ARCHIVE_HTTPS_PORT

Только пользователи с ролью user имеют право доступа к UI Архива и RESTful-сервисам. В зависимости от
Конфигурация прав UI
конкретные функции UI ограничены дополнительными ролями пользователей. Пользователи с ролью root — или значением,
заданным переменной окружения SUPER_USER_ROLE
для контейнера Архива — имеют доступ ко всем функциям UI независимо от их других ролей и настроенных прав UI.
Выйдите из системы, прежде чем проверять, что доступ к UI Архива по адресу http://<docker-host>:8080/dcm4chee-arc/ui2 или
https://<docker-host>:8443/dcm4chee-arc/ui2 перенаправит вас на страницу входа Keycloak. Вы можете
войти с пользователем/паролем root/changeit, admin/changeit или user/changeit.
Каждый пользователь может изменить свой пароль и другие настройки аккаунта через Edit Account в Sign-in Tools в
правом верхнем углу UI Архива. Пользователи, которым назначена роль realm-management -> view-realm, также имеют
ссылку Admin Realm для просмотра Keycloak Realm Admin Console.
Только пользователи со всеми ролями, заданными клиентом realm-management, имеют право доступа к Keycloak Administration
Console и выполнения административных изменений.
Доступ к Wildfly Administration Console также защищён с помощью Keycloak.
Docker-образ Keycloak dcm4che/keycloak:26.0.6 и новее также создаёт ещё один OIDC-клиент для Wildfly Administration
Console при первом запуске, настраиваемый через переменные окружения
WILDFLY_CONSOLE,
ARCHIVE_HOST и
ARCHIVE_MANAGEMENT_HTTPS_PORT:

Только пользователи с ролью ADMINISTRATOR имеют право доступа к WildFly Administration Console.
Выйдите из системы, прежде чем проверять, что доступ к WildFly Administration Console по адресу http://<docker-host>:9990 или
https://<docker-host>:9993 перенаправит вас на страницу входа Keycloak. Вы можете войти с пользователем/паролем
root/changeit.
При защищённой установке архива имеются преднастроенные пользователи / роли, предназначенные для разных целей — см. Пользователи и роли защищённого Архива.
При желании добавьте отдельных пользователей для администрирования Keycloak / Wildfly, чтобы развязать роли / ответственности
пользователя root архива:
| Имя | Пароль | Роль(и) |
|---|---|---|
wildfly-admin |
changeit |
userADMINISTRATOR |
keycloak-admin |
changeit |
userвсе роли, заданные клиентом realm-management |
с помощью скриптов:
- add-keycloak-admin
$ docker exec ldap add-keycloak-admin keycloak-admin changeit
adding new entry "uid=keycloak-admin,ou=users,dc=dcm4che,dc=org"
modifying entry "cn=user,ou=users,dc=dcm4che,dc=org"
modifying entry "cn=create-client,ou=realm-management,dc=dcm4che,dc=org"
modifying entry "cn=impersonation,ou=realm-management,dc=dcm4che,dc=org"
modifying entry "cn=manage-authorization,ou=realm-management,dc=dcm4che,dc=org"
modifying entry "cn=manage-clients,ou=realm-management,dc=dcm4che,dc=org"
modifying entry "cn=manage-events,ou=realm-management,dc=dcm4che,dc=org"
modifying entry "cn=manage-identity-providers,ou=realm-management,dc=dcm4che,dc=org"
modifying entry "cn=manage-realm,ou=realm-management,dc=dcm4che,dc=org"
modifying entry "cn=manage-users,ou=realm-management,dc=dcm4che,dc=org"
modifying entry "cn=realm-admin,ou=realm-management,dc=dcm4che,dc=org"
modifying entry "cn=view-authorization,ou=realm-management,dc=dcm4che,dc=org"
modifying entry "cn=view-clients,ou=realm-management,dc=dcm4che,dc=org"
modifying entry "cn=view-events,ou=realm-management,dc=dcm4che,dc=org"
modifying entry "cn=view-identity-providers,ou=realm-management,dc=dcm4che,dc=org"
modifying entry "cn=view-realm,ou=realm-management,dc=dcm4che,dc=org"
modifying entry "cn=view-users,ou=realm-management,dc=dcm4che,dc=org"
modifying entry "cn=query-users,ou=realm-management,dc=dcm4che,dc=org"
modifying entry "cn=query-groups,ou=realm-management,dc=dcm4che,dc=org"
modifying entry "cn=query-realms,ou=realm-management,dc=dcm4che,dc=org"
modifying entry "cn=query-clients,ou=realm-management,dc=dcm4che,dc=org"
- add-wildfly-admin
$ docker exec ldap add-wildfly-admin wildfly-admin changeit
adding new entry "uid=wildfly-admin,ou=users,dc=dcm4che,dc=org"
modifying entry "cn=user,ou=users,dc=dcm4che,dc=org"
modifying entry "cn=ADMINISTRATOR,ou=users,dc=dcm4che,dc=org"
что даст

По умолчанию пользователь root имеет роль ADMINISTRATOR, а также все роли, заданные клиентом realm-management:

что позволяет получить полный доступ к Realm Admin Console Keycloak и Wildfly Administration Console. Если для вашего приложения требуется развязка
функций управления, войдите в Keycloak Admin Console по адресу
https://<docker-host>:8843/admin/dcm4che/console под пользователем keycloak-admin и снимите назначения ролей ADMINISTRATOR и
клиентских ролей realm-management с пользователя root.


в результате получится

По умолчанию Import Users включён (ON), что обеспечивает импорт пользователей LDAP в БД Keycloak и их синхронизацию по настроенным политикам синхронизации.
Дополнительно, Sync Registrations также включён (ON) для добавления в LDAP новых пользователей, создаваемых Keycloak.
Обе эти настройки можно проверить, перейдя в User Federation >> Ldap и далее в Synchronization Settings на вкладке Ldap Settings



и редактирование, удаление или добавление новых пользователей через
переход в Users:

Вы можете добавить дополнительные Realm Roles, связанные
с конкретной Конфигурация прав UI,
и назначить их пользователям, чтобы предоставить им связанные права UI. (Пользователи с ролью root — или значением,
заданным переменной окружения SUPER_USER_ROLE
для контейнера Архива — имеют доступ ко всем функциям UI независимо от их других ролей и настроенных прав UI.)
```
$ docker stop ldap mariadb keycloak db arc
```
и запустить все 5 контейнеров снова командой:
$ docker start ldap mariadb keycloak db arc
```
$ docker rm -v ldap mariadb keycloak db arc
```
Вы можете удалить созданную bridge-сеть командой
$ docker network rm dcm4chee_network
В качестве альтернативы Docker Command Line можно использовать Docker Compose для запуска всех 4 контейнеров:
docker-compose.yml (напр.):yaml
version: "3"
services:
ldap:
image: dcm4che/slapd-dcm4chee:2.6.10-34.3
logging:
driver: json-file
options:
max-size: "10m"
ports:
- "389:389"
- "636:636"
environment:
STORAGE_DIR: /storage/fs1
volumes:
- /var/local/dcm4chee-arc/ldap:/var/lib/openldap/openldap-data
- /var/local/dcm4chee-arc/slapd.d:/etc/openldap/slapd.d
mariadb:
image: mariadb:10.11.4
logging:
driver: json-file
options:
max-size: "10m"
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: keycloak
MYSQL_USER: keycloak
MYSQL_PASSWORD: keycloak
volumes:
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
- /var/local/dcm4chee-arc/mysql:/var/lib/mysql
keycloak:
image: dcm4che/keycloak:26.0.6
logging:
driver: json-file
options:
max-size: "10m"
ports:
- "8843:8843"
environment:
KC_HTTPS_PORT: 8843
KC_HOSTNAME: https://<docker-host>:8843
KC_HOSTNAME_BACKCHANNEL_DYNAMIC: 'true'
KC_BOOTSTRAP_ADMIN_USERNAME: admin
KC_BOOTSTRAP_ADMIN_PASSWORD: changeit
KC_DB: mariadb
KC_DB_URL_DATABASE: keycloak
KC_DB_URL_HOST: mariadb
KC_DB_USERNAME: keycloak
KC_DB_PASSWORD: keycloak
KC_LOG: file
ARCHIVE_HOST: <docker-host>
KEYCLOAK_WAIT_FOR: ldap:389 mariadb:3306
depends_on:
- ldap
- mariadb
volumes:
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
- /var/local/dcm4chee-arc/keycloak:/opt/keycloak/data
db:
image: dcm4che/postgres-dcm4chee:17.4-34
logging:
driver: json-file
options:
max-size: "10m"
ports:
- "5432:5432"
environment:
POSTGRES_DB: pacsdb
POSTGRES_USER: pacs
POSTGRES_PASSWORD: pacs
volumes:
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
- /var/local/dcm4chee-arc/db:/var/lib/postgresql/data
arc:
image: dcm4che/dcm4chee-arc-psql:5.34.3-secure
ports:
- "8080:8080"
- "8443:8443"
- "9990:9990"
- "9993:9993"
- "11112:11112"
- "2762:2762"
- "2575:2575"
- "12575:12575"
environment:
POSTGRES_DB: pacsdb
POSTGRES_USER: pacs
POSTGRES_PASSWORD: pacs
AUTH_SERVER_URL: https://keycloak:8843
UI_AUTH_SERVER_URL: https://<docker-host>:8843
WILDFLY_CHOWN: /storage
WILDFLY_WAIT_FOR: ldap:389 db:5432 keycloak:8843
depends_on:
- ldap
- keycloak
- db
volumes:
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
- /var/local/dcm4chee-arc/wildfly:/opt/wildfly/standalone
- /var/local/dcm4chee-arc/storage:/storage
вам необходимо заменить \
Все доступные переменные окружения для контейнеров: - Slapd - PostgreSQL - Archive - Keycloak - MariaDB
Примечание: Если возникают сложности с запуском сервиса архива из-за
There is insufficient memory for the Java Runtime Environment to continue. Cannot create GC thread. Out of system resources.
добавьте следующую опцию к сервису arc
security_opt:
- seccomp:unconfined
console
$ docker-compose -p dcm4chee up -d
Creating network "dcm4chee_default" with the default driver
Creating dcm4chee_ldap_1 ... done
Creating dcm4chee_mariadb_1 ... done
Creating dcm4chee_db_1 ... done
Creating dcm4chee_keycloak_1 ... done
Creating dcm4chee_arc_1 ... done
в каталоге, содержащем docker-compose.yml.
```console
$ docker-compose -p dcm4chee stop
Stopping dcm4chee_arc_1 ... done
Stopping dcm4chee_keycloak_1 ... done
Stopping dcm4chee_ldap_1 ... done
Stopping dcm4chee_mariadb_1 ... done
Stopping dcm4chee_db_1 ... done
```
и запустить все 5 контейнеров снова командой:
console
$ docker-compose -p dcm4chee start
Starting ldap ... done
Starting mariadb ... done
Starting keycloak ... done
Starting db ... done
Starting arc ... done
```console
$ docker-compose -p dcm4chee down
Stopping dcm4chee_arc_1 ... done
Stopping dcm4chee_keycloak_1 ... done
Stopping dcm4chee_ldap_1 ... done
Stopping dcm4chee_mariadb_1 ... done
Stopping dcm4chee_db_1 ... done
Removing dcm4chee_arc_1 ... done
Removing dcm4chee_keycloak_1 ... done
Removing dcm4chee_ldap_1 ... done
Removing dcm4chee_mariadb_1 ... done
Removing dcm4chee_db_1 ... done
Removing network dcm4chee_network
```