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
Ответы
Ответ 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.