from - release docker compose
Docker Compose para CoreOS (9)
Actualmente estoy aprendiendo Docker y he hecho una configuración agradable y simple de Docker Compose. 3 contenedores, todos con su propia configuración de Dockerfile. ¿Cómo podría convertir esto para trabajar en CoreOS para poder configurar un clúster más adelante?
web:
build: ./app
ports:
- "3030:3000"
links:
- "redis"
newrelic:
build: ./newrelic
links:
- "redis"
redis:
build: ./redis
ports:
- "6379:6379"
volumes:
- /data/redis:/data
Actualmente, la forma más fácil de usar docker-compose
contra una máquina virtual Vaos de CoreOS . Solo necesita asegurarse de reenviar el puerto Docker .
Si no está particularmente apegado a usar docker-compose
componte , puede probar CoreOS ejecutando Kubernetes . Hay múltiples options y he implementado una de ellas para Azure .
CentruyLabs creó un rubygem llamado fig2coreos
Traduce fig.yml a archivos .service
fig está en desuso desde que se creó docker-compose pero la sintaxis parece ser la misma, por lo que probablemente podría funcionar.
Creé un script simple para instalar la última versión de Docker Compose en 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
Solo sudo
con sudo
La forma correcta de instalar o ejecutar realmente cualquier cosa en CoreOS es cualquiera
- Instálalo como una unidad
- Ejecutar en un contenedor acoplador separado
Para docker-compose
es probable que desee instalarlo como una unidad, al igual que tiene docker
como una unidad. Consulte las excelentes guías de Digital Ocean sobre CoreOS y el capítulo de unidades del sistema para obtener más información.
Ubique su configuración de nube según su proveedor de nube o instalación personalizada, consulte https://coreos.com/os/docs/latest/cloud-config-locations.html para conocer las ubicaciones.
Instalar docker-componer agregándolo como una unidad
#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
Tenga en cuenta que no pude hacer que las expansiones uname -s
y uname -m
funcionen en la instrucción curl, así que simplemente las reemplacé con sus valores expandidos.
Valide su archivo de configuración con
coreos-cloudinit -validate --from-file path-to-cloud-config
Debería producir algo así como
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 #
Tenga en cuenta que coreos-cloudinit
no valida los bloques de contenido en su configuración de nube. Reinicie CoreOS cuando haya terminado y listo.
Actualización: como comentarios de @Wolfgang, puede ejecutar coreos-cloudinit --from-file path-to-cloud-config
lugar de reiniciar CoreOS.
Simple 3 pasos :
sudo mkdir -p /opt/bin
Tome el comando en el sitio web oficial https://docs.docker.com/compose/install/ y cambie la ruta de salida desde / usr / local / bin / docker-compose a / 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
Hacer ejecutable:
sudo chmod +x /opt/bin/docker-compose
Ahora tienes docker-componer :)
También sugeriría docker-componer en un contenedor docker como el de dduportal .
En aras de la usabilidad extendí mi cloud-config.yml de la siguiente manera:
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"
Después de actualizar la configuración de la nube a través de sudo coreos-cloudinit-from-url http-path-to / cloud-config.yml y un reinicio del sistema, puede usar el comando docker-compose como está acostumbrado en cualquier otra máquina .
aquí está, la mejor manera que encontré:
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
¡hecho!
bueno, coreOS soporta Docker pero es bare bone linux con soporte de clúster, por lo que necesita incluir una imagen base para todos sus contenedores (use FROM y en Dockerfile también podría necesitar ejecutar RUN yum -y install bzip2 gnupg etc.,) que tiene los contenedores y librerías que necesita su aplicación y redis (mejor tome una imagen base de ubuntu)
Aquí puede ponerlos todos en un contenedor / docker o separarlos si lo hace por separado, entonces necesita vincular los contenedores y opcionalmente montar el volumen. La docker tiene algunas buenas notas al respecto ( https://docs.docker.com/userguide/dockervolumes/ )
Atlast, necesitas escribir la configuración de la nube que especifica las unidades del sistema. En su caso, tendrá 3 unidades que serán iniciadas por systemd (systemd reemplaza el buen sistema init anterior en coreOS) y lo alimentará a coreos-cloudinit (tip: coreos-cloudinit -from-file =. / Cloud-config -validate = falso), también necesita proporcionar esta configuración de nube en el linux bootcmd para persistencia.
tomado de https://docs.docker.com/compose/install/
lo único es que / usr es de solo lectura, pero / opt / bin es escribible y en la ruta, entonces:
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