Составление сервисной оркестровки Docker

задняя часть Docker Composer

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, просьба указывать автора и источник при перепечатке.