在 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
在 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 目录中创建了它的数据库文件。
Keycloak 是一种开源软件产品,允许使用针对现代应用程序和服务的身份管理和访问管理进行单点登录。
通过使用 Keycloak ,开发人员可以以最少的努力向应用程序和安全服务添加身份验证。
无需处理存储用户或者验证用户。
这一切都是开箱即用的。
我们甚至可以获得高级功能,例如用户联合、身份代理和社交登录。
Keycloak 有两个主要组件。
- Keycloak Server - 它是 Keycloak 的服务器组件
- Keycloak 应用程序适配器 - 这些是应用程序访问 Keycloak 身份验证服务的插件。
在本文中,我们将在 Docker 容器中创建并运行 Keycloak 服务器。