[Hilo Oficial] Docker

wdaoajw

#117 en la documentación dice que si estás montando la DB sobre un volumen con datos ya existentes, debes omitir la variable de entorno MYSQL_ROOT_PASSWORD.

Si necesitas hacer un Restore de un dump, yo me crearía un dockerfile que haga el Restore a partir del dump file

Por cierto, el atributo link creo que ya está deprecated

1 respuesta
Leos

#121 mmmm entonces haré un docker file para que me haga el dump y omitire las variables a ver que tal.

Lo de links es que lo he visto en todos sitios así, en la docu de docker también esta así.

Ahora updateare con los cambios a ver si funciona!

1 respuesta
wdaoajw

#122

Warning: The --link flag is a legacy feature of Docker. It may eventually be removed. Unless you absolutely need to continue using it, we recommend that you use user-defined networks to facilitate communication between two containers instead of using --link. One feature that user-defined networks do not support that you can do with --link is sharing environment variables between containers. However, you can use other mechanisms such as volumes to share environment variables between containers in a more controlled way.

A eso me refería con lo de link.

De todas formas, compose crea una Network por defecto por lo que el link no te hace falta

1
Leos

Updateo, estaba ya todo bien, pero tenia un volumen creado mal y no me habia dado cuenta y entonces no me creaba la base de datos correctamente, he eliminado el volumen y vuelto a correr el docker compose y todo correcto!

1 respuesta
JohnVoiden

#124 La proxima vez te diremos, has probado en reniciar. :psyduck:

1
3 meses después
eondev

https://github.com/lavie/runlike
que chachens ma venido de puta madre para no tener que tirar de ansible, habia hecho la cochinada de toquetear un container para hacer unos cambios guarros xD

Mtra

Alguien ha tenido problemas con la indexacion automática de capítulos de plex? Ya me ha pasado con un par de series por carpetas/temporadas que no me los detecta bien y me reproduce capítulos que no son cuando no toca...

1 respuesta
Markitos_182

#127 No. Aparte este hilo es de Docker xD

1 respuesta
Mtra

#128 face-palm, pensaba que era el de nas xD

16 días después
B

Estoy teniendo un error creado el docker-compose y no sé porque:

services:
  mysql:
    image: mysql
    ports:
      - '3306:3306'
    restart: always
    volumes:
      - db-volume:/var/lib/mysql/
    environment:
      MYSQL_ROOT_PASSWORD: 'root'
      MYSQL_DATABASE: 'test_db'
      MYSQL_USER: 'test_user'
      MYSQL_PASSWORD: 'test_pw'
  apache:
    image: httpd:alpine
    ports:
      - '8080:80'
    restart: always
    volumes:
      - app-volume:/usr/local/apache2/htdocs/
    depends_on:
      - php
  php:
    build: php:alpine
    ports:
      - '9000:9000'
    restart: always
    volumes:
      - app-volume:/aplication
volumes:
  app-volume:
  db-volume:
ERROR: The Compose file './docker-compose.yml' is invalid because:
Unsupported config option for services: 'apache'
Unsupported config option for volumes: 'db-volume'
3 respuestas
X-Crim

...

Markitos_182

#130 yo a ojo no veo nada raro. ¿has mirado que no hayas mezclado espacios y tabs en la indentación? Los yaml son muy tocahuevos.

Leos

#130 Como dice @Markitos_182 tiene toda la pinta de una mala identación, el yaml peta por nada con estas tonterias

1 respuesta
Markitos_182

#130 #133 xDD no, ya vi lo que es: Te falta poner qué versión de docker-compose es el fichero.

Como no es swarm, usa la 2.4. Añade al principio del fichero version: "2.4"

Otra cosa que te va a petar es

  php:
    build: php:alpine

estás referenciando una imagen como si fuese un Dockerfile a construir.

1 2 respuestas
Leos

#134 Es verdad, con eso ya la debería hacer funcionar, no habia caído en lo de la versión

B

#134 Tengo que revisar eso de la versión, no sé porqué entendí que era algo para anotar la versión rollo v0.1 beta, v1 release xDDDD

#134Markitos_182:

estás referenciando una imagen como si fuese un Dockerfile

Bien visto, vaya fail.

Gracias.

B

Hay algo que no estoy logrando hacer, no sé si lo he entendido mal. Tengo un docker volume mapeado a una carpeta del contenedor, eso significa que comparten contenido entre ellas, lo cual me lleva a pensar que yo añado ese volumen al workspace del IDE que sea y a trabajar. ¿Es correcto? En caso de que lo sea, no tengo ni idea de como añadirlo, me faltan permisos por todos lados

De momento lo que hice es cambiar los volumes por el path a unas carpetas del mismo proyecto en el cual está el docker-compose y esas carpetas ya las cargo al workspace de VS Code por ejemplo que es el que estoy utlizando.

El docker-compose se quedaría así:

spoiler
2 respuestas
Markitos_182
#137Kazulu:

yo añado ese volumen al workspace del IDE que sea

Yo esto no lo he hecho nunca.
Normalmente hago binds de directorios, no sé muy bien usar volúmenes de docker y me lía.

1 respuesta
wdaoajw

#137 #138 Si.

Estas mapeando un path local con un path del contenedor. Por tanto, si abres tu path "./app" con VSCode y editas codigo lo estas editando directamente sobre el path "/usr/local/apache2/htdocs/" del servicio 'server' y '/aplication' del servicio 'lang'

Un volumen con nombre(o anonimo) creado con 'docker volume create' se crea por defecto en el path '/var/lib/docker/volumes/nombredelvolumen/_data/' y se bindea ese path con el del contenedor. Lo bueno de esto es que solo se puede acceder a este path con superuser, pero para trabajar mejor bindear paths como haces en el compose

1
B

Bueno, lo tengo funcionando un Apache básico, MySQL y phpmyadmin, con algunos cambios en el compose que hice antes, pero funciona correctamente. Ahora tengo que preparar las extensiones de php que quiero y demás, pero eso irá todo a un dockerfile.

2 meses después
B

Buenas, me he pasado de Windows a Debian y me está dando algún problema Docker.

docker-compose.yml
Dockerfile Webserver

Como véis lo que hago es desplegar 3 contenedores con Apache (Composer + Laravel + NodeJS), MySQL y PHPMyAdmin. En Windows me funcionaba tal cual está, el problema es que ahora al desplegarlo desde Linux e intentar acceder desde localhost:80 me salta un mensaje en Laravel que dice:

UnexpectedValueException
The stream or file "/var/www/html/storage/logs/laravel.log" could not be opened: failed to open stream: Permission denied

Además de eso cuando intento modificar algún archivo de la carpeta bindeada también me dice que no tengo permisos de escritura.

Edit: Me han comentado de añadir el usuario de apache al grupo users con:

RUN usermod -u 1000 www-data
RUN usermod -aG users www-data
RUN chown -R www-data:www-data /var/www

De esta forma funciona correctamente, el problema es que si creo archivos en la carpeta bindeada utilizando PHP Artisan por ejemplo php artisan make:model Ejemplo. El achivo Ejemplo se crea con el usuario y grupo root.

1 respuesta
X-Crim

al menos ya has dejado windows de lado.

Vas mejorando, aunque te caiga mal, lo hago por ti.

1 respuesta
B

#142 me caes bien, si algún día llego a algo en la vida será gracias a tí, los libros de Hexan que no me he leido y el blog de desu

4
B

Buenas, tengo dos imagenes una de phpmyadmin y otra de mysql, estoy intentando conectar la BDD a través de JDBC pero me tira error en el IDE a la hora de hacer la conexión -> el host en el JDBC deberia de ser -> jdbc:mysql://localhost:3306/db

El error es el siguiente, he buscado por todos lados sobretodo stackoverflow y ni puta idea no hay manera. He hecho la prueba con XAMPP y si que funca.

error

A través de phpmyadmin no tengo ningún problema :/ puedo acceder a la bdd, mysql y tal pascual

JuAn4k4

#141 Ejecuta tu container como no root user:

añade tras el chown en el dockerfile:

USER www-data

5 meses después
B

.

1 mes después
B

Una duda, ¿Vale la pena usar en un docker de Ubuntu toda la instalación de programas en plan Python, nginx, etc...? ¿O es mejor en varios dockers? ¿Y por qué? Para que lo entienda.

2 respuestas
X-Crim

#147 con tus palabras, que es docker?

1 respuesta
B

#148 las imágenes. He probado en una imagen Ubuntu instalar todo, pero veo que se estila el docker-compose de varias imágenes y comunicación entre estas. Por eso no entiendo, ¿En qué es mejor eso que una sola imagen?

En lugar de:
Mi imagen
Ubuntu

Usan compose de:
Mi imagen
Python
Nginx

No sé si me estoy explicando, estoy aprendiendo estos despliegues y me cuesta un poco

1 respuesta
ke2g

#149 Creo que a lo que te refieres es ¿por qué no correr varios servicios en un solo contenedor de docker (una imagen con Nginx, Python, MySQL, etc)? La respuesta es que, por diseño, se suele recomendar que un docker container = un servicio (incluso un proceso). Los motivos son varios:

  • Escalabilidad: si tienes todos los servicios separados en distintos containers, puedes levantar varias instancias de X servicio si se te queda corto.
  • Reusabilidad: si mañana necesitas ese servicio de python pero no el Nginx, no pasa nada, levantas el contenedor de python y lo adaptas a lo que sea.
  • Debug: el debug es mucho mejor si puedes aislar un servicio e inspeccionar que hace vs tener mil servicios/procesos corriendo.
  • Patching: Similar a lo anterior. ¿Qué quieres hacer upgrade de un contenedor concreto? actualizas solo ese, te despreocupas de los demás. Además que puedes hacer upgrades balanceando contenedores de forma mucho más fácil también.

Y seguro que hay más puntos que me estoy dejando. En definitiva la idea es modularizar todo los servicios de forma que sea como piezas con las que construyes un puzzle (vs tener un puzzle entero).

Si buscas en google hay millones de explicaciones y literatura sobre esto: (https://runnable.com/docker/rails/run-multiple-processes-in-a-container / https://stackoverflow.com/questions/30003338/docker-one-process-per-container / https://docs.docker.com/config/containers/multi-service_container/)

Espero haberte aclarado la duda :)

1 1 respuesta