Ir al contenido

Usar Docker

Docker es una plataforma software que le permite construir, probar y desplegar aplicaciones rápidamente. Docker empaqueta el software en unidades estandarizadas llamadas contenedores con todo lo que el software necesita para funcionar, incluyendo librerías, herramientas del sistema, código y entorno de ejecución. Usando Docker, puede desplegar y escalar aplicaciones rápidamente en cualquier entorno y tener la certeza de que su código funcionará.

Hay una imagen de Docker disponible en nuestro repositorio privado de Docker en https://docker.openkm.com. Es la forma más sencilla de poner OpenKM en marcha en su servidor. Si desea usar esta imagen, envíe un ticket de soporte y le proporcionaremos acceso al repositorio.

Consulte la documentación de Docker para las instrucciones de instalación y para saber más sobre Docker.

Una vez instalado Docker, cree el fichero openkm.properties apropiado o configúrelo usando variables de entorno, y ejecute este comando para obtener su instancia de OpenKM:

Ventana de terminal
$ docker run --name openkm -p 8080:8080 -v ${PWD}/openkm.properties docker.openkm.com/private/professional

Después, apunte su navegador a http://localhost:8080/. El usuario y contraseña por defecto son “okmAdmin” / “admin”.

De esta forma, puede crear un contenedor con la base de datos H2 embebida por defecto (no recomendada para producción, pero perfectamente válida para pruebas):

Ventana de terminal
$ docker run -d --name openkm -p 8080:8080 -v myvol:/opt/tomcat \
-e DATABASE_DRIVER=org.h2.Driver \
-e DATABASE_URL=jdbc:h2:/opt/tomcat/okmdb \
-e DATABASE_DIALECT=com.openkm.db.dialect.H2Dialect \
--restart=unless-stopped docker.openkm.com/private/professional:7.1.13

Este es un ejemplo que puede usarse para crear un contenedor usando MySQL, pero la forma recomendada es usar Docker Compose:

Ventana de terminal
$ docker run -d --name openkm -p 8080:8080 -v myvol:/opt/tomcat \
-e DATABASE_DRIVER="com.mysql.cj.jdbc.Driver" \
-e DATABASE_URL="jdbc:mysql://172.17.0.1:3306/dbtest?useUnicode=true&characterEncoding=UTF8&serverTimezone=CET&nullNamePatternMatchesAll=true" \
-e DATABASE_USER="openkm" \
-e DATABASE_PASSWORD="openkm" \
-e DATABASE_DIALECT="com.openkm.db.dialect.MySQL5InnoDBDialect" \
--restart=unless-stopped docker.openkm.com/private/professional:7.1.13

La base de datos puede crearse de esta forma:

CREATE USER 'openkm'@'%' IDENTIFIED BY 'openkm';
CREATE DATABASE dbtest DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_bin;
GRANT ALL ON dbtest.* TO 'openkm'@'%' WITH GRANT OPTION;

Para ver los logs del contenedor:

Ventana de terminal
$ docker logs -f openkm

Para detener el contenedor:

Ventana de terminal
$ docker stop openkm

Para iniciarlo de nuevo:

Ventana de terminal
$ docker start openkm

Para acceder al contenedor:

Ventana de terminal
$ docker exec -ti openkm bash

Para más acciones, consulte el sitio de documentación de Docker.

Estas son las variables de entorno que pueden usarse para configurar el contenedor de OpenKM:

Variable Descripción
DATABASE_DRIVER El driver JDBC de base de datos que conecta con la base de datos.
DATABASE_URL La URL JDBC para conectar con la base de datos.
DATABASE_USER El usuario de la base de datos.
DATABASE_PASSWORD La contraseña del usuario de la base de datos.
DATABASE_DIALECT El dialecto de base de datos de Hibernate.

Para facilitar toda esta configuración, recomendamos usar Docker Compose. Consulte la documentación de Docker Compose para las instrucciones de instalación y más información.

Este es un fichero de configuración de Docker Compose de ejemplo usando variables de entorno, donde se usa MySQL como base de datos:

version: '3.2'
services:
openkm_mysql:
image: docker.openkm.com/private/professional:7.1.13
container_name: openkm_mysql
hostname: openkm
ports:
- 8080:8080
volumes:
- openkm_mysql:/opt/tomcat
environment:
- DATABASE_DRIVER=com.mysql.cj.jdbc.Driver
- DATABASE_URL=jdbc:mysql://mysql:3306/okmdb?useUnicode=true&characterEncoding=UTF8&serverTimezone=CET&nullNamePatternMatchesAll=true
- DATABASE_USER=openkm
- DATABASE_PASSWORD=openkm
- DATABASE_DIALECT=com.openkm.db.dialect.MySQL5InnoDBDialect
- TZ=Europe/Madrid
entrypoint: [ "wait-for-it.sh", "mysql:3306", "--timeout=0", "--strict", "--", "entrypoint.sh" ]
links:
- mysql:mysql
networks:
skynet:
ipv4_address: 172.28.1.1
mysql:
image: mysql:8.0.18
container_name: okmdb_mysql
hostname: mysql
command: --default-authentication-plugin=mysql_native_password --character-set-server=utf8 --collation-server=utf8_bin
volumes:
- okmdb_mysql:/var/lib/mysql
environment:
- MYSQL_DATABASE=okmdb
- MYSQL_USER=openkm
- MYSQL_PASSWORD=openkm
- MYSQL_ROOT_PASSWORD=openkm
security_opt:
- seccomp:unconfined
networks:
skynet:
ipv4_address: 172.28.1.2
volumes:
openkm_mysql:
okmdb_mysql:
networks:
skynet:
ipam:
driver: default
config:
- subnet: 172.28.0.0/16

Este es otro fichero de configuración de Docker Compose de ejemplo:

version: '3.2'
services:
openkm_mysql:
image: docker.openkm.com/private/professional:7.1.13
container_name: openkm_mysql
hostname: openkm
ports:
- 8080:8080
volumes:
- ${PWD}/openkm.properties:/opt/tomcat/openkm.properties
- ${PWD}/repository:/opt/tomcat/repository
environment:
- TZ=Europe/Madrid
entrypoint: [ "wait-for-it.sh", "mysql:3306", "--timeout=0", "--strict", "--", "entrypoint.sh" ]
links:
- mysql:mysql
networks:
skynet:
ipv4_address: 172.28.1.1
mysql:
image: mysql:8.0.18
container_name: okmdb_mysql
hostname: mysql
command: --default-authentication-plugin=mysql_native_password --character-set-server=utf8 --collation-server=utf8_bin
volumes:
- ${PWD}/mysql:/var/lib/mysql
environment:
- MYSQL_DATABASE=okmdb
- MYSQL_USER=openkm
- MYSQL_PASSWORD=openkm
- MYSQL_ROOT_PASSWORD=openkm
security_opt:
- seccomp:unconfined
networks:
skynet:
ipv4_address: 172.28.1.2
networks:
skynet:
ipam:
driver: default
config:
- subnet: 172.28.0.0/16

Este es el fichero openkm.properties:

# OpenKM Hibernate configuration values
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://mysql:3306/okmdb?useUnicode=true&characterEncoding=UTF8&serverTimezone=CET&nullNamePatternMatchesAll=true
spring.datasource.username=openkm
spring.datasource.password=openkm
# JPA stuff
spring.jpa.hibernate.ddl-auto=create-only
spring.jpa.properties.hibernate.dialect=com.openkm.db.dialect.MySQL5InnoDBDialect
# Cluster
cluster.enabled=false
cluster.node=master
# Logging config
spring.output.ansi.enabled=always