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
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
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
La bonne façon d'installer ou d'exécuter vraiment n'importe quoi sur CoreOS est soit
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.
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.
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.
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é!
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 :)
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.
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 .