Compose — это инструмент оркестровки служб для Docker, который в основном используется для создания сложных приложений на основе Docker.Compose управляет несколькими контейнерами Docker через файл конфигурации, что очень подходит для сценариев, когда несколько контейнеров используются в комбинации для разработки.
проиллюстрировать:Compose — это обновленная версия Fig,FigБольше не поддерживается. Compose обратно совместим с Fig, всеfig.yml
просто нужно переименоватьdocker-compose.yml
Может использоваться Compose.
Инструменты оркестрации сервисов упрощают и ускоряют управление приложениями Docker. Создать сайт:docs.docker.com/compose/
Установить композицию:
# 方法一:
$ curl -L https://github.com/docker/compose/releases/download/1.8.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
$ chmod +x /usr/local/bin/docker-compose
# Linux下等效于
$ curl -L https://github.com/docker/compose/releases/download/1.8.1/docker-compose-Linux-x86_64 > /usr/local/bin/docker-compose; chmod +x /usr/local/bin/docker-compose
# 方法二:使用pip安装,版本可能比较旧
$ yum install python-pip python-dev
$ pip install docker-compose
# 方法三:作为容器安装
$ curl -L https://github.com/docker/compose/releases/download/1.8.0/run.sh > /usr/local/bin/docker-compose
$ chmod +x /usr/local/bin/docker-compose
# 方法四:离线安装
# 下载[docker-compose-Linux-x86_64](https://github.com/docker/compose/releases/download/1.8.1/docker-compose-Linux-x86_64),然后重新命名添加可执行权限即可:
$ mv docker-compose-Linux-x86_64 /usr/local/bin/docker-compose;
$ chmod +x /usr/local/bin/docker-compose
# 百度云地址: http://pan.baidu.com/s/1slEOIC1 密码: qmca
# docker官方离线地址:https://dl.bintray.com/docker-compose/master/
скопировать код
После завершения установки вы можете просмотреть версию:
# docker-compose --version
docker-compose 1.8.1
скопировать код
Обновить
Если вы используете Compose 1.2 или более раннюю версию, вам потребуется удалить или перенести существующие контейнеры после завершения обновления. Это связано с тем, что в версии 1.3 Composer использует теги Docker для инструментальных контейнеров, поэтому им необходимо воссоздать теги индекса.
удалить
$ rm /usr/local/bin/docker-compose
# 卸载使用pip安装的compose
$ pip uninstall docker-compose
скопировать код
Compose различает версию 1 и версию 2 (Compose 1.6.0+, Docker Engine 1.10.0+). Версия 2 поддерживает больше команд. В версии 1 не указано, что версия по умолчанию «версия 1». Версия 1 будет объявлена устаревшей в будущем.
Версия 1 относится к игнорированию
version
Версия ключевого слова; версия 2 должна быть добавлена в начале строкиversion: '2'
.
Пример начала работы
Общие шаги
1. Определите Dockerfile для легкой миграции куда угодно;
2. Напишите файл docker-compose.yml;
3. Бегиdocker-compose up
запустить службу
Пример
Подготовка: Заранее скачайте зеркало:
docker pull mysql
docker pull wordpress
скопировать код
Вам нужно создать новый пустой каталог, например, wptest. Создайте новый файл docker-compose.yml
version: '2'
services:
web:
image: wordpress:latest
links:
- db
ports:
- "8002:80"
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_PASSWORD: 123456
db:
image: mysql
environment:
- MYSQL_ROOT_PASSWORD=123456
скопировать код
Приведенная выше команда означает создание нового контейнера db и wordpress. Эквивалентно:
$ docker run --name db -e MYSQL_ROOT_PASSWORD=123456 -d mysql
$ docker run --name some-wordpress --link db:mysql -p 8002:80 -d wordpress
скопировать код
Обратите внимание, что если вы выполняете миграцию непосредственно с fig и
web
внутриlinks
да- db:mysql
, тут подскажет, что для wordpress не заданы переменные окружения, тут нужно добавить переменные окруженияWORDPRESS_DB_HOST
а такжеWORDPRESS_DB_PASSWORD
.
Хорошо, запустим приложение:
# docker-compose up
Creating wptest_db_1...
Creating wptest_wordpress_1...
Attaching to wptest_db_1, wptest_wordpress_1
wordpress_1 | Complete! WordPress has been successfully copied to /var/www/html
скопировать код
Это сработало. доступ через браузерhttp://localhost:8002 (или http://host-ip:8002) может.
По умолчанию запускается на переднем плане и выводит журналы на консоль. Если вы хотите работать в фоновом режиме, вы можете:
docker-compose up -d
скопировать код
После подачи фона вы можете просмотреть статус с помощью следующей команды:
# docker-compose ps
Name Command State Ports
-----------------------------------------------------------------------------------
figtest_db_1 docker-entrypoint.sh mysqld Up 3306/tcp
figtest_wordpress_1 docker-entrypoint.sh apach ... Up 0.0.0.0:8002->80/tcp
# docker-compose logs
Attaching to wptest_wordpress_1, wptest_db_1
db_1 | 2016-10-4T14:38:46.98030Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
db_1 | 2016-10-4T14:38:46.99974Z 0 [Note] mysqld (mysqld 5.7.15) starting as process 1 ...
db_1 | 2016-10-4T14:38:46.27191Z 0 [Note] InnoDB: PUNCH HOLE support available
скопировать код
Не работает:
# docker-compose stop
Stopping wptest_wordpress_1...
Stopping wptest_db_1...
скопировать код
Перезапустите службу:
docker-compose restart
скопировать код
ссылка на docker-compose.yml
Каждый файл docker-compose.yml должен определятьimage
илиbuild
Один из них, остальные необязательны.
image
Укажите тег или идентификатор изображения. Пример:
image: redis
image: ubuntu:14.04
image: tutum/influxdb
image: example-registry.com:4000/postgresql
image: a4bc65fd
скопировать код
Обратите внимание, что в
version 1
используется одновременноimage
а такжеbuild
не допускается,version 2
тогда да, если оба указаны, будетbuild
Образ, который выходит, помечен именемimage
Этикетка.
build
используется для указания содержащегоDockerfile
Путь к файлу. Обычно текущий каталог.
. Fig создаст и сгенерирует изображение со случайным именем.
Обратите внимание, что в
version 1
внутриbulid
Только поддерживаемые значения являются строками.version 2
формат объекта поддерживается.
build: ./dir
build:
context: ./dir
dockerfile: Dockerfile-alternate
args:
buildno: 1
скопировать код
context
это путь,dockerfile
Замените значение по умолчанию при необходимостиdocker-compose
имя файла,args
Это переменная среды в процессе сборки (сборки), которая заменяет переменную, определенную в Dockerfile.ARG
параметр, недоступный в контейнере. Пример:
Dockerfile:
ARG buildno
ARG password
RUN echo "Build number: $buildno"
RUN script-requiring-password.sh "$password"
скопировать код
docker-compose.yml:
build:
context: .
args:
buildno: 1
password: secret
build:
context: .
args:
- buildno=1
- password=secret
скопировать код
command
Используется для переопределения команды по умолчанию. Пример:
command: bundle exec thin -p 3000
скопировать код
command
Также поддерживаются формы массива:
command: [bundle, exec, thin, -p, 3000]
скопировать код
links
Используется для связывания другой службы контейнера, например службы mysql, с другим контейнером. Можно указать имя службы и псевдоним или просто имя службы, чтобы псевдоним совпадал с именем службы. такой жеdocker run --link
. Пример:
links:
- db
- db:mysql
- redis
скопировать код
Использование псевдонима будет автоматически добавлено в контейнер/etc/hosts
Создайте соответствующие записи в файле:
172.17.2.186 db
172.17.2.186 mysql
172.17.2.187 redis
скопировать код
Таким образом, мы можем напрямую использовать псевдоним в качестве имени хоста службы в контейнере.
ports
Используется для раскрытия портов. такой жеdocker run -p
. Пример:
ports:
- "3000"
- "8000:8000"
- "49100:22"
- "127.0.0.1:8001:8001"
скопировать код
expose
expose обеспечивает доступ к портам между контейнерами и не будет доступен хосту. такой жеdocker run --expose
.
expose:
- "3000"
- "8000"
скопировать код
volumes
Смонтируйте том данных. такой жеdocker run -v
. Пример:
volumes:
- /var/lib/mysql
- cache/:/tmp/cache
- ~/configs:/etc/configs/:ro
скопировать код
volumes_from
Смонтируйте контейнер тома данных, монтирование — это контейнер. такой жеdocker run --volumes-from
. Пример:
volumes_from:
- service_name
- service_name:ro
- container:container_name
- container:container_name:rw
скопировать код
container:container_name
поддерживается только форматversion 2
.
environment
Добавьте переменные среды. такой жеdocker run -e
. Может быть в формате массива или словаря:
environment:
RACK_ENV: development
SESSION_SECRET:
environment:
- RACK_ENV=development
- SESSION_SECRET
скопировать код
depends_on
Используется для указания сервисных зависимостей, обычно mysql, redis и т. д. Если указана зависимость, она будет создана и запущена вместо службы.
links
Зависимости также могут быть указаны.
external_links
словосочетание ссылокdocker-compose.yml
файл илиCompose
Услуги, которые определены снаружи, обычно предоставляют общие или общедоступные услуги. формат сlinks
сходство:
external_links:
- redis_1
- project_db_1:mysql
- project_db_1:postgresql
скопировать код
Уведомление,
external_links
Связанная служба и текущая служба должны находиться в одной и той же сетевой среде.
extra_hosts
Добавьте сопоставления имен хостов.
extra_hosts:
- "somehost:162.242.195.82"
- "otherhost:50.31.209.229"
скопировать код
будет в/etc/hosts
Создайте запись:
162.242.195.82 somehost
50.31.209.229 otherhost
скопировать код
extends
Наследуется от служб, определенных в текущем файле yml или других файлах, и может выборочно переопределять исходную конфигурацию.
extends:
file: common.yml
service: webapp
скопировать код
service
должен иметь,file
Необязательный.service
это служба, которая должна быть унаследована, например.web
,database
.
net
Установите сетевой режим. то же, что докер--net
параметр.
net: "bridge"
net: "none"
net: "container:[name or id]"
net: "host"
скопировать код
dns
Пользовательский DNS-сервер.
dns: 8.8.8.8
dns:
- 8.8.8.8
- 9.9.9.9
скопировать код
cpu_shares, cpu_quota, cpuset, domainname, hostname, ipc, mac_address, mem_limit, memswap_limit, privileged, read_only, restart, shm_size, stdin_open, tty, user, working_dir
Все эти команды являются одиночными значениями, пожалуйста, обратитесь к значениюdocker run.
cpu_shares: 73
cpu_quota: 50000
cpuset: 0,1
user: postgresql
working_dir: /code
domainname: foo.com
hostname: foo
ipc: host
mac_address: 02:42:ac:11:65:43
mem_limit: 1000000000
mem_limit: 128M
memswap_limit: 2000000000
privileged: true
restart: always
read_only: true
shm_size: 64M
stdin_open: true
tty: true
скопировать код
ссылка на командную строку
$ docker-compose
Define and run multi-container applications with Docker.
Usage:
docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...]
docker-compose -h|--help
Options:
-f, --file FILE Specify an alternate compose file (default: docker-compose.yml)
-p, --project-name NAME Specify an alternate project name (default: directory name)
--verbose Show more output
-v, --version Print version and exit
-H, --host HOST Daemon socket to connect to
--tls Use TLS; implied by --tlsverify
--tlscacert CA_PATH Trust certs signed only by this CA
--tlscert CLIENT_CERT_PATH Path to TLS certificate file
--tlskey TLS_KEY_PATH Path to TLS key file
--tlsverify Use TLS and verify the remote
--skip-hostname-check Don't check the daemon's hostname against the name specified
in the client certificate (for example if your docker host
is an IP address)
Commands:
build Build or rebuild services
bundle Generate a Docker bundle from the Compose file
config Validate and view the compose file
create Create services
down Stop and remove containers, networks, images, and volumes
events Receive real time events from containers
exec Execute a command in a running container
help Get help on a command
kill Kill containers
logs View output from containers
pause Pause services
port Print the public port for a port binding
ps List containers
pull Pulls service images
push Push service images
restart Restart services
rm Remove stopped containers
run Run a one-off command
scale Set number of containers for a service
start Start services
stop Stop services
unpause Unpause services
up Create and start containers
version Show the Docker-Compose version information
скопировать код
пакетный скрипт
# 关闭所有正在运行容器
docker ps | awk '{print $1}' | xargs docker stop
# 删除所有容器应用
docker ps -a | awk '{print $1}' | xargs docker rm
# 或者
docker rm $(docker ps -a -q)
скопировать код
Ссылаться на:
1. Обзор Docker Compose — Docker
docs.docker.com/compose/oVE…
2. библиотека/mysql — Docker Hub
hub.docker.com/_/mysql/
3. библиотека/wordpress — Docker Hub
Hubei.docker.com/_/WordPress…
Автор: Feihongying~
Источник:http://52fhy.cnblogs.com/
Кстати, после прочтения статьи получите красный конверт! До 99 юаней! Доступен каждый день!
Если вы считаете, что эта статья полезна для вашего обучения, вы можете вознаградить блоггера через «WeChat» или «Alipay» или щелкнуть рекомендацию внизу страницы, чтобы поддержать блоггера.
Заявление об авторских правах: Перепечатка или специальное заявление не указываются как оригинальная работа автора. В этой статье используется следующее соглашение для авторизации,Бесплатная перепечатка — некоммерческая — не производная — сохранить авторство | Creative Commons BY-NC-ND 3.0, просьба указывать автора и источник при перепечатке.