在 Docker 容器中运行 Jboss/Keycloak 服务器

使用 docker 命令创建并运行 Jboss/Keycloak 容器。

jackli@docker-01:~$ sudo docker run -d \
> --name keycloak \
> --net keycloak-network \
> -p 8080:8080 \
> -e KEYCLOAK_USER=admin \
> -e KEYCLOAK_PASSWORD=Admin@1234 \
> -e DB_ADDR=mariadb \
> -e DB_USER=keycloak \
> -e DB_PASSWORD=Keycloak@1234 \
> jboss/keycloak
e2b42254fa94804e1ab9cf2924fa0463b8997205f6002e81f542b117f56a91bf

上面的命令已被分解描述以便读者更好地理解。

  • docker run -d -> 在守护进程模式下启动一个docker容器
  • --name keycloak -> 设置docker容器的名称
  • --net keycloak-network -> 设置容器使用的网络
  • -p 8080:8080 -> Docker 容器与宿主机的端口映射
  • -e KEYCLOAK_USER -> 设置 Keycloak 的管理员用户名
  • -e KEYCLOAK_PASSWORD -> 设置 Keycloak 的管理员用户密码
  • -e DB_ADDR -> 设置数据存储容器的名称
  • -e DB_USER -> 设置数据库用户名以访问 MariaDB 数据存储
  • -e DB_PASSWORD -> 设置数据库用户的密码
  • jboss/keycloak -> 它是将用于创建 Keycloak 容器的图像

我们已经创建并启动了 Jboss/Keycloak 容器。

使用以下命令检查 docker 容器的状态。

jackli@docker-01:~$ sudo docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                              NAMES
e2b42254fa94        jboss/keycloak      "/opt/jboss/tools/do->¦"   10 minutes ago      Up 10 minutes       0.0.0.0:8080->8080/tcp, 8443/tcp   keycloak
55de1ec4e0c9        mariadb             "docker-entrypoint.s->¦"   26 minutes ago      Up 26 minutes       3306/tcp                           mariadb

允许 docker 主机上的 8080/tcp 服务端口,因此我们的 Keycloak 服务器可以被网络中的其他计算机访问。

jackli@docker-01:~$ sudo ufw allow 8080/tcp
Rules updated
Rules updated (v6)
jackli@docker-01:~$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

访问 Keycloak 服务器 Web UI

在客户端浏览器中打开 URL http://docker-01.recipes.com:8080。

单击“管理控制台”以访问它。

以我们在创建 docker 容器时定义的管理员用户身份登录。

成功登录后,我们现在处于“领域设置”页面。

我们已经在 Docker 中成功启动了一个 Keycloak 容器。
我们现在可以使用它来创建领域、用户、角色等。
为此,我们应该参考 Keycloak 文档。

从 Docker Hub 拉取所需的镜像

使用 ssh 工具以管理员用户身份连接 docker-01.recipes.com。

因为,我们已经安装了 Docker ,因此,我们现在可以访问 Docker Hub 并下载所需的图像。

在这里,我们正在创建两个容器,

  • 实际的 Jboss/Keycloak 服务器和
  • MariaDB 作为 Keycloak 服务器的数据存储

首先,下载 mariadb 官方 docker 镜像。

jackli@docker-01:~$ sudo docker pull mariadb
Using default tag: latest
latest: Pulling from library/mariadb
5c939e3a4d10: Pull complete
c63719cdbe7a: Pull complete
19a861ea6baf: Pull complete
651c9d2d6c4f: Pull complete
077e14009561: Pull complete
5f038f59a326: Pull complete
1b0216466f21: Pull complete
1b0570aa273a: Pull complete
07d05628c2aa: Pull complete
8f2f7d8e5cbd: Pull complete
fbf3ad7b2eec: Pull complete
22080b3a46be: Pull complete
8021ad8acbef: Pull complete
0b1f06407ccd: Pull complete
Digest: sha256:6f80d059050b80fd8bd951323f6e4a7dde36d62e355cf01b92d26c34d3f702f6
Status: Downloaded newer image for mariadb:latest

现在,下载 jboss/keycloak docker 镜像。

jackli@docker-01:~$ sudo docker pull jboss/keycloak
Using default tag: latest
latest: Pulling from jboss/keycloak
03e56b46bf0b: Pull complete
3a13cc2f5d65: Pull complete
315b0e98b961: Pull complete
3ac53bc98ab6: Pull complete
08d597fdd8b1: Pull complete
Digest: sha256:70171289054e77e2a091fd4b7d274807e777bd01d18719a7b7b139b67d1952d4
Status: Downloaded newer image for jboss/keycloak:latest

在 Docker 中创建一个虚拟网络

为了互连 MariaDB 和 Keycloak 容器,我们需要创建一个虚拟网络。

jackli@docker-01:~$ sudo docker network create keycloak-network
152e689ac69f722e8b36bcb61558dba740ec909ec27c5a8ba34f2f5ca0694038
更多: zhilu jiaocheng

在 Docker 容器中运行 MariaDB 服务器

在docker主机上创建一个目录来存放MariaDB数据库文件,这样我们就可以和MariaDB服务器的其他容器使用相同的数据库文件了。

jackli@docker-01:~$ mkdir /home/jackli/keycloak_data

创建一个 MariaDB 容器并其中挂载 keycloak_data 目录。

jackli@docker-01:~$ sudo docker run -d \
> --name mariadb \
> --net keycloak-network \
> -v /home/jackli/keycloak_data:/var/lib/mysql \
> -e MYSQL_ROOT_PASSWORD=Root@1234 \
> -e MYSQL_DATABASE=keycloak \
> -e MYSQL_USER=keycloak \
> -e MYSQL_PASSWORD=Keycloak@1234 \
> mariadb
55de1ec4e0c94dbe22897e6122cec57a250c95cbc4dc1be76fc7a06832f7641a

上面的命令已经分解如下:

  • docker run -d -> 在守护进程模式下注视一个容器
  • --name mariadb -> 设置容器名称
  • --net keycloak-network -> 设置容器将使用的网络
  • -v /home/jackli/keycloak_data:/var/lib/mysql -> 在 MariaDB 容器中挂载 docker 主机目录
  • -e MYSQL_ROOT_PASSWORD -> 设置mysql root用户密码
  • -e MYSQL_DATABASE -> 在 MariaDB 容器中创建一个同名的数据库
  • -e MYSQL_USER -> 创建具有必要权限的数据库用户
  • -e MYSQL_PASSWORD -> 设置mysql用户的密码
  • mariadb -> 这是将用于创建 docker 容器的图像

通过使用 Docker,我们成功启动了一个 MariaDB 容器,它将作为 Keycloak 服务器的数据存储。

现在检查 keycloak_data 目录的包含。

jackli@docker-01:~$ ls /home/jackli/keycloak_data/
aria_log.00000001  ibdata1      ibtmp1             mysql
aria_log_control   ib_logfile0  keycloak           performance_schema
ib_buffer_pool     ib_logfile1  multi-master.info

你可以看到 MariaDB 容器已经在 keycloak_data 目录中创建了它的数据库文件。

在 Docker 容器中运行 Keycloak 服务器

Keycloak 是一种开源软件产品,允许使用针对现代应用程序和服务的身份管理和访问管理进行单点登录。

通过使用 Keycloak ,开发人员可以以最少的努力向应用程序和安全服务添加身份验证。
无需处理存储用户或者验证用户。
这一切都是开箱即用的。
我们甚至可以获得高级功能,例如用户联合、身份代理和社交登录。

Keycloak 有两个主要组件。

  • Keycloak Server - 它是 Keycloak 的服务器组件
  • Keycloak 应用程序适配器 - 这些是应用程序访问 Keycloak 身份验证服务的插件。

在本文中,我们将在 Docker 容器中创建并运行 Keycloak 服务器。

日期:2020-09-17 00:16:28 来源:oir作者:oir