Ответ 1
Службы и контейнер связаны друг с другом, но оба они разные.
Услуга может выполняться одним или несколькими контейнерами.
С помощью docker
вы можете обрабатывать контейнеры, а с помощью docker-compose
вы можете обрабатывать сервисы.
Например:
Скажем, что у нас есть этот файл docker-compose.yml
:
web:
image: example/my_web_app:latest
expose:
- 80
links:
- db
db:
image: postgres:latest
Этот составный файл определяет две службы: web
и db
.
Когда вы запустите docker-compose up
, считая, что каталог проекта test1
, тогда compose запустит 2 контейнера с именем myapp_db_1
и myapp_web_1
.
$ docker ps -a
CONTAINER ID IMAGE COMMAND ... NAMES
1c1683e871dc test1_web "nginx -g" ... test1_web_1
a41360558f96 test1_db "postgres -d" ... test1_db_1
Итак, в этом пункте у вас есть 2 службы и 1 контейнер для каждого.
Но вы можете масштабировать службу с именем web
для использования 5 контейнеров.
$ docker-compose scale web=5
Creating and starting 2 ... done
Creating and starting 3 ... done
Creating and starting 4 ... done
Creating and starting 5 ... done
В этом пункте у вас есть 2 службы и 6 контейнеров
$ docker ps -a
CONTAINER ID IMAGE COMMAND ... NAMES
1bf4c939263f test1_web "nginx -g" ... test1_web_3
d3033964a44b test1_web "nginx -g" ... test1_web_4
649bbda4d0b0 test1_web "nginx -g" ... test1_web_5
a265ea406727 test1_web "nginx -g" ... test1_web_2
1c1683e871dc test1_web "nginx -g" ... test1_web_1
a41360558f96 test1_db "postgres -d' ... test1_db_1
Кроме того, с помощью docker-compose вы можете запускать подкоманду против одной или нескольких служб.
$docker-compose stop web