Estoy usando Docker y Docker compose para el desarrollo de una aplicación PHP-FPM/Nginx/Mariadb. Quiero usarlo ahora en producción con Docker swarm y docker-compose v3 (a través de docker-stack.yml)
Mi archivo docker-stack es así:
version: "3" services: db: image: mariadb environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: app php: image: <MYREGISTRY>/php volumes: - app-data:/var/www/app deploy: replicas: 2 nginx: image: <MYREGISTRY>/nginx depends_on: - php volumes: - app-data:/var/www/app deploy: replicas: 2 ports: - "80:80" volumes: app-data:Como puede ver, uso mi propio registro privado para almacenar imágenes de aplicaciones. Mi pregunta es ¿dónde pongo mi código fuente?
Veo 2 opciones:
app de servicio (¿basada en la imagen de busybox?) para ser un contenedor solo de datos. Luego puedo enviar la imagen de código fuente a mi registro e implementarla. Puede ser conveniente tener una imagen de Docker con código fuente etiquetado.¿Cuál es la mejor opción?
El mantenimiento del código fuente debe ser independiente del mantenimiento de las imágenes de la ventana acoplable. Al insertar una imagen acoplable que contiene el código fuente en el registro, solo para mantener el código fuente, su primera opción parece mezclar los dos.
Mantenga el código fuente en un VCS (sistema de control de versiones). Cuando el código esté listo para distribuirse, cree una imagen de ventana acoplable con ese código. Sería menos mantenimiento general si la imagen tiene acceso al código fuente directamente desde el VCS.
Puede explorar compilaciones de ventanas acoplables de múltiples etapas, donde se pueden crear contenedores temporales que se conectan al VCS, extrae el código apropiado y lo compila si es necesario. Luego, la imagen final solo copia el resultado del proceso de compilación del contenedor temporal, sin necesidad de acceso innecesario al VCS.