Подтвердить что ты не робот

Docker Compose для CoreOS

В настоящее время я изучаю Docker и сделал приятную и простую настройку Docker Compose. 3 контейнера, все со своей установкой Dockerfile. Как я могу перейти к преобразованию этого для работы в CoreOS, чтобы впоследствии настроить кластер?

web:
  build: ./app
  ports:
    - "3030:3000"
  links:
    - "redis"

newrelic:
  build: ./newrelic
  links:
    - "redis"

redis:
  build: ./redis
  ports:
    - "6379:6379"
  volumes:
    - /data/redis:/data
4b9b3361

Ответ 1

взято из https://docs.docker.com/compose/install/

единственное, что /usr читается только, но /opt/bin доступен для записи и в пути, поэтому:

sd-xx~ # mkdir /opt/
sd-xx~ # mkdir /opt/bin
sd-xx~ # curl -L https://github.com/docker/compose/releases/download/1.3.3/docker-compose-`uname -s`-`uname -m` > /opt/bin/docker-compose
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   403    0   403    0     0   1076      0 --:--:-- --:--:-- --:--:--  1080
100 7990k  100 7990k    0     0  2137k      0  0:00:03  0:00:03 --:--:-- 3176k
sd-xx~ # chmod +x /opt/bin/docker-compose

sd-xx~ # docker-compose
Define and run multi-container applications with Docker.

Usage:
  docker-compose [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

Commands:
  build              Build or rebuild services
  help               Get help on a command
  kill               Kill containers
  logs               View output from containers
  port               Print the public port for a port binding
  ps                 List containers
  pull               Pulls 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
  up                 Create and start containers
  migrate-to-labels  Recreate containers to add labels

Ответ 2

Я создал простой script для установки последней версии Docker Compose на CoreOS: https://gist.github.com/marszall87/ee7c5ea6f6da9f8968dd

#!/bin/bash
mkdir -p /opt/bin
curl -L `curl -s https://api.github.com/repos/docker/compose/releases/latest | jq -r '.assets[].browser_download_url | select(contains("Linux") and contains("x86_64"))'` > /opt/bin/docker-compose
chmod +x /opt/bin/docker-compose

Просто запустите его с помощью sudo

Ответ 3

Правильный способ установить или запустить что-нибудь в CoreOS - это

  • Установите его как единицу
  • Запуск в отдельном контейнере докеров

Для docker-compose вы, вероятно, захотите установить его как единицу, так же, как у вас есть docker как единица. Подробные сведения см. В разделе "Цифровые океаны" для руководства по CoreOS и systemd units.

Найдите конфигурацию облака на основе поставщика облачных вычислений или пользовательской установки, см. https://coreos.com/os/docs/latest/cloud-config-locations.html для местоположений.

Установите docker-compose, добавив его как единицу

#cloud-config

coreos:
  units:
    - name: install-docker-compose.service
      command: start
      content: |
        [Unit]
        Description=Install docker-compose
        ConditionPathExists=!/opt/bin/docker-compose

        [Service]
        Type=oneshot
        RemainAfterExit=yes
        ExecStart=/usr/bin/mkdir -p /opt/bin/
        ExecStart=/usr/bin/curl -o /opt/bin/docker-compose -sL "https://github.com/docker/compose/releases/download/1.9.0/docker-compose-linux-x86_64"
        ExecStart=/usr/bin/chmod +x /opt/bin/docker-compose

Обратите внимание, что я не мог получить расширения uname -s и uname -m для работы в инструкции curl, поэтому я просто заменил их своими расширенными значениями.

Подтвердите свой файл конфигурации с помощью

coreos-cloudinit -validate --from-file path-to-cloud-config

Он должен вывести что-то вроде

myhost core # coreos-cloudinit -validate --from-file path-to-cloudconfig
2016/12/12 12:45:03 Checking availability of "local-file"
2016/12/12 12:45:03 Fetching user-data from datasource of type "local-file"
myhost core #

Обратите внимание, что coreos-cloudinit не проверяет содержимое-блоки в вашем cloud-config. Перезагрузите CoreOS, когда закончите, и вы готовы к работе.

Обновление. Как комментарии @Wolfgang, вы можете запустить coreos-cloudinit --from-file path-to-cloud-config вместо перезапуска CoreOS.

Ответ 4

Я также предлагаю докер-компоновку в контейнере докеров, как тот, который из dduportal.

Для удобства использования я расширил свой cloud-config.yml следующим образом:

write_files:
 - path: "/etc/profile.d/aliases.sh"
   content: |
     alias docker-compose="docker run -v \"\$(pwd)\":\"\$(pwd)\" -v /var/run/docker.sock:/var/run/docker.sock -e COMPOSE_PROJECT_NAME=\$(basename \"\$(pwd)\") -ti --rm --workdir=\"\$(pwd)\" dduportal/docker-compose:latest"

После обновления облачной конфигурации с помощью sudo coreos-cloudinit -from-url http-path-to/cloud-config.yml и перезагрузки системы вы можете использовать команду docker-compose, как вы привыкли каждая другая машина.

Ответ 5

CentruyLabs создал рубигем под названием fig2coreos

Переводит fig.yml в .service файлы

fig устарел, поскольку был создан файл docker-compose, но синтаксис кажется таким же, чтобы он мог работать.

Ответ 6

Простой 3 шага:

sudo mkdir -p /opt/bin

Захватите команду на официальном сайте https://docs.docker.com/compose/install/ и измените путь вывода с /usr/local/bin/docker -compose в /opt/bin:

sudo curl -L "https://github.com/docker/compose/releases/download/1.9.0/docker-compose-$(uname -s)-$(uname -m)" -o /opt/bin/docker-compose

Сделать исполняемым:

sudo chmod +x /opt/bin/docker-compose

Теперь у вас docker-compose:)

Ответ 7

Ну, coreOS поддерживает докеры, но это голой костный linux с поддержкой кластеризации, поэтому вам нужно включить базовое изображение для всех ваших контейнеров (используйте FROM и в Dockerfile вам также может понадобиться RUN yum -y установить bzip2 gnupg и т.д.,), у которого есть бины и библиотеки, которые необходимы вам приложением и redis (лучше возьмите базовое изображение ubuntu)

Здесь вы можете поместить все их в один контейнер/докер или отдельно, если вы сделаете это отдельно, тогда вам нужно связать контейнеры, и, при необходимости, mount mount - у докеров есть хорошие заметки об этом (https://docs.docker.com/userguide/dockervolumes/)

Atlast, вам нужно написать облачную конфигурацию, которая определяет единицы systemd. В вашем случае у вас будет 3 единицы, которые будут запущены systemd (systemd заменяет старую старшую систему init в coreOS) и подает ее на coreos-cloudinit (tip: coreos-cloudinit -from-file =./Cloud-config -validate = false). Вам также необходимо предоставить эту облачную конфигурацию для linux bootcmd для сохранения.

Ответ 8

вот он, наилучшим образом я нашел:

[email protected] ~ $ docker pull dduportal/docker-compose
[email protected] ~ $ cd /dir/where-it-is-your/docker-compose.yml
[email protected] ~ $ docker run -v "$(pwd)":/app \
             -v /var/run/docker.sock:/var/run/docker.sock \
             -e COMPOSE_PROJECT_NAME=$(basename "$(pwd)")\
             -ti --rm \
             dduportal/docker-compose:latest up

сделано!

Ответ 9

В настоящее время самый простой способ использовать docker-compose снова - CoreOS Vagrant VM. Вам просто нужно убедиться, что переместить порт Докера.

Если вы не особенно привязаны к использованию docker-compose, вы можете попробовать использовать CoreOS Kubernetes. Есть несколько вариантов, и я внедрил один из них для Azure.