Докер составить для 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

9 ответов

Решение

Взято с 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

Я создал простой скрипт для установки последней версии 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

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

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

За docker-compose вы, вероятно, хотите установить его как единое целое, как у вас docker как единое целое. Посмотрите отличные руководства Digital Ocean по CoreOS и главу о системных модулях, чтобы узнать больше.

Найдите свою облачную конфигурацию на основе вашего облачного провайдера или пользовательской установки, см. 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 не проверяет блоки содержимого в вашем облачном конфиге. Перезапустите CoreOS, когда вы закончите, и вы готовы к работе.

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

Я бы также предложил сделать docker-compose в Docker-контейнере, подобном 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"

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

Простые 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:)

CentruyLabs создал rubygem под названием fig2coreos

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

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

Вот он, лучший способ, который я нашел:

core@london-1 ~ $ docker pull dduportal/docker-compose
core@london-1 ~ $ cd /dir/where-it-is-your/docker-compose.yml
core@london-1 ~ $ 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

сделанный!

Ну, CoreOS поддерживает Docker, но это чистый Linux с поддержкой кластеризации, поэтому вам нужно включить базовый образ для всех ваших контейнеров (используйте FROM и в Dockerfile, вам также может понадобиться выполнить RUN yum -y install bzip2 gnupg и т. д.), что содержит бины и библиотеки, которые нужны вашему приложению и Redis (лучше взять базовый образ Ubuntu)

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

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

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

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

При использовании docker-compose с Fedora CoreOS у вас могут возникнуть проблемы с python, однако запуск docker-compose из контейнера работает отлично.

Существует удобный сценарий оболочки bash, который задокументирован в официальной документации здесь: https://docs.docker.com/compose/install/#alternative-install-options разделе "Установить как контейнер".

Другие вопросы по тегам