Докер составить для 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 - либо
- Установите его как единое целое
- Запустить в отдельном док-контейнере
За 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 разделе "Установить как контейнер".