Вы можете упростить эту настройку, используя собственную систему образов Docker. Обычно инструкции по компиляции приложения будут встроены в Dockerfile
, поэтому запуск docker-compose up --build
приведет к перекомпиляции. Система кеширования слоев Docker делает это очень быстро, если приложение фактически не изменилось. После этого вам не понадобится volumes:
для перезаписи содержимого изображения, и вам не потребуется отдельно интерактивная оболочка, прикрепленная к каждому контейнеру.
Если вы удалите volumes:
и некоторые другие настройки которые либо находятся в Dockerfile
, либо обычно вам не нужны, что оставляет вам гораздо более короткие docker-compose.yml
:
version: '3'
services:
server:
build: ./server
ports:
- "3500:3500"
# volumes: undo what server/Dockerfile does
# working_dir: is the Dockerfile WORKDIR
# server-type processes don't usually need stdin_open: or tty:
client:
build: ./client
ports:
- "2800:2800"
db:
# as above
Когда вы что-то меняете, вы можете запустить docker-compose up --build -d
и он перестроит и перезапустит указанные c объекты, которые необходимо перестроить и перезапустить.
Многие команды docker
имеют прямые docker-compose
эквиваленты. Если вам действительно нужна интерактивная оболочка в контейнере, например, вы можете
docker-compose exec server /bin/sh
docker-compose exec
найдет для вас идентификатор Docker контейнера и по умолчанию docker exec -it
флаги.