web-dev-qa-db-fra.com

Docker Compose vers CoreOS

J'apprends actuellement Docker et j'ai fait une configuration Docker Compose agréable et simple. 3 conteneurs, tous avec leur propre configuration Dockerfile. Comment pourrais-je convertir ceci pour qu'il fonctionne sur CoreOS afin que je puisse configurer un cluster plus tard?

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

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

redis:
  build: ./redis
  ports:
    - "6379:6379"
  volumes:
    - /data/redis:/data
39
Dustin

extrait de https://docs.docker.com/compose/install/

la seule chose est que/usr est en lecture seule, mais/opt/bin est accessible en écriture et dans le chemin, donc:

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
51
Francis

J'ai créé un script simple pour installer la dernière Docker Compose sur 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

Il suffit de l'exécuter avec Sudo

34
marszall87

La bonne façon d'installer ou d'exécuter vraiment n'importe quoi sur CoreOS est soit

  1. Installez-le comme une unité
  2. Exécuter dans un conteneur Docker séparé

Pour docker-compose vous voulez probablement l'installer comme une unité, tout comme vous avez docker comme une unité. Consultez les excellents guides de Digital Ocean sur CoreOS et le chapitre nités systemd pour en savoir plus.

Localisez votre configuration cloud en fonction de votre fournisseur de cloud ou d'une installation personnalisée, voir https://coreos.com/os/docs/latest/cloud-config-locations.html pour les emplacements.

Installez docker-compose en l'ajoutant comme une unité

#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

Notez que je n'ai pas pu obtenir le uname -s et uname -m extensions pour fonctionner dans l'instruction curl, je les ai donc simplement remplacées par leurs valeurs étendues.

Validez votre fichier de configuration avec

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

Il devrait produire quelque chose comme

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 #

Notez que coreos-cloudinit ne valide pas les blocs de contenu dans votre cloud-config. Redémarrez CoreOS lorsque vous avez terminé et vous êtes prêt à partir.

Mise à jour: comme @Wolfgang commente, vous pouvez exécuter coreos-cloudinit --from-file path-to-cloud-config au lieu de redémarrer CoreOS.

23
gogstad

Je suggérerais également docker-compose dans un conteneur docker comme celui de dduportal .

Pour des raisons de convivialité, j'ai étendu mon cloud-config.yml comme suit:

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"

Après avoir mis à jour le cloud-config via Sudo coreos-cloudinit -from-url http-path-to/cloud-config.yml et un redémarrage du système, vous sont capables d'utiliser la commande docker-compose comme vous en avez l'habitude sur toutes les autres machines.

7
derfranz

CentruyLabs a créé un rubygem appelé fig2coreos

Il traduit fig.yml en fichiers .service

fig est obsolète depuis que docker-compose a été créé mais la syntaxe semble être la même pour qu'elle puisse probablement fonctionner.

6
Julian Kaffke

le voici, le meilleur moyen que j'ai trouvé:

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

terminé!

4
BBJ3

Simple 3 étapes :

Sudo mkdir -p /opt/bin

Prenez la commande sur le site officiel https://docs.docker.com/compose/install/ et changez le chemin de sortie de /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

Rendre exécutable:

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

Vous avez maintenant docker-compose :)

4
Renato Prado

eh bien, CoreOS prend en charge Docker, mais il s'agit d'un système d'exploitation Linux avec support de cluster, vous devez donc inclure une image de base pour tous vos conteneurs (utilisez FROM et dans Dockerfile, vous devrez peut-être également exécuter RUN yum -y install bzip2 gnupg etc.,) qui a les bacs et les bibliothèques dont votre application et redis ont besoin (mieux vaut prendre une image de base ubuntu)

Ici, vous pouvez les mettre tous dans un conteneur/docker ou séparément si vous le faites séparément, vous devez ensuite lier les conteneurs et éventuellement monter le volume - docker a de bonnes notes à ce sujet ( https: //docs.docker .com/userguide/dockervolumes / )

Atlast, vous devez écrire une configuration cloud qui spécifie les unités systemd. Dans votre cas, vous aurez 3 unités qui seront démarrées par systemd (systemd remplace le bon vieux système init dans coreOS) et le nourriront à coreos-cloudinit (astuce: coreos-cloudinit -from-file =./Cloud-config -validate = false), vous devez également fournir cette configuration cloud sur le bootcmd linux pour la persistance.

3
resultsway

Actuellement, la façon la plus simple d'utiliser docker-compose contre un CoreOS Vagrant VM . Vous avez juste besoin de vous assurer de port Docker vers l'avant .

Si vous n'êtes pas particulièrement attaché à l'utilisation de docker-compose, vous pouvez essayer CoreOS en cours d'exécution Kubernetes . Il existe plusieurs options et j'ai implémenté l'un d'eux pour Azure .

1
errordeveloper