[Hilo Oficial] Docker

HeXaN

#90 Exacto. En el caso de que sea algo costos de buildear la exporto y me la llevo donde sea.

1 respuesta
ke2g

#91 Entiendo. Pero necesito subirlo en el hub justamente para no tener que hacer el build cada vez que quiero utilizar la image.

EDIT: vale, lo de exportar podría ser una opcion, pero no me creo que no haya una solución correcta (utilizando el hub) para hacer lo que quiero.

2 respuestas
Saphyel

#92 yo tengo automated builds, cada vez que hago un commit al repo actualiza el build y ademas tengo un trigger de otras builds en las que se basa el mio, por lo que esta siempre actualizado.

Sobre tu pregunta me temo que no puedes hacer eso.

1 respuesta
HeXaN
#92ke2g:

pero no me creo que no haya una solución correcta (utilizando el hub) para hacer lo que quiero.

Hombre, si usas un repositorio privado del Docker Hub no creo que tengas problemas por subir el fichero de configuración, ¿no?

1 respuesta
pineda

#93 si son datos sensibles, no solo no debe estar en git sino que tampoco debe estar dentro de la imagen.
te has planteado montar un volumen en tiempo de ejecución?
de esta forma si alguien tiene tu imagen no tendrá tu fichero de configuración

1 respuesta
ke2g

#94 sería mejor obviamente, pero me sigue pareciendo feote tener que subir ficheros de configuración.

#95 esto tiene mas sentido, es lo que se hace normalmente con esto tipo de ficheros? ya digo, he utilizado Docker poquísimo.

1 respuesta
pineda

#96 hay muchas opciones, pero lo que no es buena idea es tener la configuración dentro de la imagen.
Hay muchos motivos pero con este creo que lo entenderás fácilmente.

Si la configuración es externa, puedes certificar una imagen concreta, y sabes que no se ha modificado desde el desarrollo hasta su puesta en producción. Si la configuración está dentro, requieres recompilar por entorno (o tener N configuraciones dentro) lo cual no tiene mucho sentido

Formas de trabajar hay muchas, desde que la aplicación consulte a un 'config server' su configuración, a ser inyectada mediante ficheros, ser inyectada por variables de entorno, o incluso que la configuración sea un template y que al arrancar el contenedor un .sh modifique esta configuración por variables inyectadas desde fuera.

Cada una tiene sus ventajas y su complejidad, simplemente elige la que más se ajuste a lo que buscas

2 1 respuesta
ke2g

#97 vale, me ha quedado claro. Muchas gracias por currarte la respuesta!

10 días después
bultack

Hola devs!

Estoy usando Atom como editor de código y tengo instalado el plugin de php-ide y lo que me gustaría hacer es poder indicarle el ejecutable de PHP que tiene la imagen para así no tener que instalar php en mi máquina. Sabéis si es posible?

1 respuesta
Markitos_182

#99 Si lo que quieres es ejecutar el código en un contenedor docker, tendrás que dockerizar tu código.

1 respuesta
bultack

#100 No me he parado a mirar cómo funcionan los intellisense pero en este caso, el servidor de lenguaje que utiliza este paquete requiere que se le especifique la ruta en la que se encuentra el ejecutable de PHP (igual que para VS Code).

Entiedo que si necesita la ruta es porque debe ejecutar el código. El tema es que no sé o de qué forma podría indicar esta ruta o si en su defecto tendría que hacerse un desarrollo en este paquete para habilitar el uso de una imagen de PHP y lo que sea que ejecute lo haga en el contendor.

1 respuesta
Markitos_182

#101 ¿pero tiene algo que ver tu pregunta con docker? xD

bultack

Sí. El tema está en que estos paquetes te "obligan" a indicar la ruta en la que está el ejecutable de PHP, lo cual obliga a tener que tenerlo instalado en la máquina local.

Lo que quiero saber es si de alguna forma yo puedo tener una imagen de PHP con Docker y de alguna forma (si es posible) decirle que el ejecutable de PHP se encuentra en la imagen. No sé si es posible de alguna forma enlazar un directorio con el de un contenedor para que pase por allí. Simplemente, si es posible hacerlo tener que evitar instalar PHP en mi máquina.

HeXaN

¿Y por qué no pones tu código en un volumen de un contenedor con PHP, Apache y lo que te haga falta, bindeas al exterior un puerto y ale?

2
bultack

Lo que viene a ser el servidor web lo tengo montado y me funciona, con eso no tengo problemas.

La duda que tengo es si yo puedo usar de alguna forma el contenedor que levanto de PHP para decirle al paquete de Atom que la ruta del ejecutable de PHP está en una ubicación que no es la de /usr/bin/php7.2

El tema está en que si es posible hacer este tipo de comunicación pueda ver los errores e ir a la declaracíon de métodos, atributos, etc.

A lo mejor me estoy liando mucho y me cuesta pillarlo...

1 respuesta
Markitos_182

#105 No, no puedes.
Docker está pensado para que las cosas se ejecuten dentro de los contenedores, no fuera.

1 respuesta
bultack

#106 Vale. Entonces sí tendría que ver cómo funciona este paquete para saber qué es lo que hace y en todo caso habilitarle una opción para que ejecute un comando de Docker.

1 mes después
s4suk3

ninja edit, ya resolví la duda..
ahora estoy investigando como asignar ips privadas para comunicar contenedores.. si alguien me da un poco de luz se lo agradezco

1 respuesta
Markitos_182

#108 ¿Usas Compose? Si no usas compose, empieza a usar compose.

Ejemplo de como asignar ip privada a una network determinada en un compose:

  nexus:
    container_name: nexus
    image: sonatype/nexus3
    networks:
      proxy_bridge:
        ipv4_address: 172.30.0.150
    volumes:
      - "/srv/nexus:/nexus-data"
    restart: unless-stopped

De todos modos, los contenedores se pueden comunicar entre ellos sin necesidad de asignarles IPs estáticas. Simplemente llámalos por su nombre: Docker incorpora un DNS interno que resuelve las IPs de los containers al llamarlos por su nombre.
Por ejemplo, al container de arriba en lugar de usar la IP, se le puede llamar (siempre que sae desde dentro de la misma network) como nexus, por ejemplo http://nexus:8080/

Yo tengo asignado en este caso una IP estática porque delante tiene un proxy inverso y nginx si no puede resolver todos los nombres en arranque, crashea.

1 respuesta
Saphyel

#109 no te hace falta container_name ni el network, por defecto pone esos valores...

1 respuesta
Markitos_182

#110 el nombre por defecto del container sería $stack_nexus_1.
Tengo cinco o seis networks diferentes, una de ellas (la que está en el ejemplo) es un bridge para los containers que salen a través del proxy.

1 respuesta
Saphyel

#111 para ese escenario si, pero si solo usas ese network dentro del network usa el nombre del container

1 mes después
Saphyel

Voy a escribir un post en ingles de como usar Docker for mac y no morir en la espera... si hay alguien interesando poner manita/PM xD

2 1 respuesta
Markitos_182

#113 Teniendo en cuenta que todo hipster que se precie que use docker, lo hace en mac... ¿no debería sobrar documentación por todas partes? xD

Yo estoy un poco hasta la polla de ver el 99% de la documentación, transparencias y charlas hechas sobre docker for mac.

Also, ¿qué diferencia hay? Docker for Mac carga una VM sobre virtualbox como Docker for Windows y el resto es transparente, ¿no? En el macbook lo tengo puesto pero lo uso muy poco porque ya tengo el sobremesa o el servidor con linux nativo.

1 respuesta
Saphyel

#114 He estado usando docker for mac durante 2 meses.. he buscado informacion por todas, etc... y n encontre nada realmente "estable" que no hiciera que docker vaya pedaleando... (un ejemplo cargar un simple pagina de symfony le cuesta 20secs... usando docker-sync y demas beta solutions tiene sus defectos)
por lo que no, no funciona como en Linux (uso Linux de normal y tarda 3secs como mucho en ese ejemplo).

La documentacion sobre esto es muy escasa porque hablamos de cambios en la version Edge...

Los hipsters no usan docker.. usan node instalado en su local.

1 respuesta
Markitos_182

#115 Pero estás hablando de que va más lento que en linux. Nos ha jodido: Docker en linux va nativo mientras que en los demás entornos va virtualizado, jajaja.

Me refería al uso, que es transparente.

La versión estable es inestable, yo la edge ni con un palo en nada que dé servicio.

1 año después
Leos

Buenas, estoy liado con docker y me ha surgido una duda, a ver si alguien me puede echar un cable.

Tengo dos microservicios y uno de ellos se conecta a la base de datos.

Con docker compose añado los 3 servicios, hago un dump del sql en el container de mysql que crea, pero el microservicio que se debería de conectar a la base de datos, siempre failea.

El microservicio usa un .env para las variables de conexion, he estado buscando y en principio poniendo el nombre del servicio debería conectarse bien, pero nunca lo hace.

Este es el docker compose que tengo, no se si esta fatal o no la verdad xD

version: '3'

services: 
  core:
      container_name: functional-core-local
      build: .
      command: npm run start:dev
      env_file: 
        - .env
      ports: 
        - '3000:3002'
      depends_on: 
        - mysql
      links: 
        - mysql

  mysql:
    container_name: ds_server_manager
    image: mariadb:latest
    environment: 
      MYSQL_USER: 'mediavida'
      MYSQL_ROOT_PASSWORD: 'mediavida'
    env_file: 
      - .env
    volumes: 
      - ./mysql-dump:/docker-entrypoint-initdb.d
      - db-data:/var/lib/mysql
      
volumes: db-data:
3 respuestas
Markitos_182

#117 A simple vista parece que está bien.
Ahora mismo no recuerdo si tienes que hacer algo para que el MYSQL_USER de mariadb pueda conectarse desde cualquier host. ¿Qué error te tira al conectarse?

1 respuesta
JohnVoiden

#117 Has intentado hacer ping aunque sea? veo que es JS el backend, como tienes montado la conexión?¿

1 respuesta
Leos

#118 Me daba error de que no encontraba ese host, pero he borrado todo y vuelto a empezar y ahora me da error de que no encuentra la database, cosa que me indica que se esta pasando por el forro el dump :thinking:

#119 La hace un orm, exactamente la hace typeorm

Usuarios habituales

Tags