如何在 Ubuntu 上安装 Apache Guacamole 作为 Docker 容器
在此页
- 先决条件
- 安装 Docker 引擎
- 安装 Docker Compose
- 下载 Apache Guacamole 服务器和客户端
- 启动 Apache Guacamole MySQL 容器
- 启动鳄梨酱服务器容器
- 启动 Guacamole 客户端容器
- 访问 Apache Guacamole 仪表板
- 结论
Apache Guacamole 是免费的开源无客户端远程桌面应用程序,允许您通过 Web 浏览器访问远程桌面和服务器计算机。支持VNC、RDP、SSH等标准协议,远程连接使用HTML5。它可以在大多数 Linux 发行版上运行,客户端可以在任何现代 Web 浏览器上运行。您不需要在系统上安装任何软件。只需浏览并连接到您的服务器上定义的任何远程服务器。
在本文中,我们将向您展示如何在 Ubuntu 22.04 上使用 Docker 安装 Apache Guacamole 服务器和客户端。
先决条件
- 一台运行 Ubuntu 22.04 的服务器。
- 在服务器上配置了根密码。
安装 Docker 引擎
始终建议将最新版本的 Docker 安装到您的服务器。
首先,使用以下命令安装所需的依赖项:
apt install ca-certificates curl gnupg lsb-release -y
安装所有依赖项后,使用以下命令添加 Docker GPG 密钥和存储库:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor > /etc/apt/trusted.gpg.d/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture)] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" > /etc/apt/sources.list.d/docker.list
接下来,更新存储库并使用以下命令安装 Docker 引擎包:
apt update -y
apt install docker-ce docker-ce-cli containerd.io -y
安装完成后,使用以下命令验证 Docker 版本:
docker --version
您应该得到以下输出:
Docker version 20.10.18, build b40c2f6
安装 Docker 组合
您还需要在服务器上安装 Docker Compose。您可以使用以下命令安装它:
curl -sL "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
接下来,使用以下命令验证 Docker Compose 版本:
docker-compose --version
您将获得以下输出:
docker-compose version 1.29.2, build 5becea4c
下载 Apache Guacamole 服务器和客户端
首先,您需要从 Docker 注册表下载 Apache Guacamole 服务器和客户端映像。
首先,使用以下命令下载服务器映像:
docker pull guacamole/guacd
您应该看到以下输出:
Using default tag: latest
latest: Pulling from guacamole/guacd
4b7b4a8876e2: Pull complete
4e542e9cf89d: Pull complete
9741340fbbb2: Pull complete
96fa725029d6: Pull complete
0f0a6df13f2a: Pull complete
a4fa6e99a790: Pull complete
07365dfaa371: Pull complete
Digest: sha256:efdc09beba21e2c5d7c8c77e8c6b95ffd173d75645c9c41b6024f5b835d2a034
Status: Downloaded newer image for guacamole/guacd:latest
docker.io/guacamole/guacd:latest
首先,使用以下命令下载客户端映像:
docker pull guacamole/guacamole
您应该看到以下输出:
Using default tag: latest
latest: Pulling from guacamole/guacamole
2b55860d4c66: Pull complete
2ca45fc4c4ca: Pull complete
0cd32add6672: Pull complete
ac52cbbb8ca2: Pull complete
7f7dc3a9f4cc: Pull complete
5d7996a24402: Pull complete
4819d3e4118d: Pull complete
055afbac1f72: Pull complete
23ee772344b7: Pull complete
e44569de6126: Pull complete
f7d7e8014b18: Pull complete
Digest: sha256:8a8db8cf9f5359aa20547382213a42a720ea1c5fe86460ded727061e1995d9f2
Status: Downloaded newer image for guacamole/guacamole:latest
docker.io/guacamole/guacamole:latest
接下来,使用以下命令验证下载的图像:
docker images
您将获得以下输出:
REPOSITORY TAG IMAGE ID CREATED SIZE
guacamole/guacd latest 4086ac9e35a7 9 hours ago 271MB
guacamole/guacamole latest 959856a45436 10 hours ago 432MB
启动 Apache Guacamole MySQL 容器
首先,您至少需要一个数据库容器用于 Apache Guacamole 身份验证。您可以使用以下命令下载并启动 MySQL 容器:
docker run --name guacamoledb -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=guacdb -d mysql/mysql-server
您将获得以下输出:
latest: Pulling from mysql/mysql-server
cdd8b07c6082: Pull complete
c2f1720beca1: Pull complete
39f143a8d6de: Pull complete
118a8285b641: Pull complete
b45cbcaf75c7: Pull complete
d4574372e600: Pull complete
1f565a3cbc52: Pull complete
Digest: sha256:e30a0320f2e3c7b7ee18ab903986ada6eb1ce8e5ef29941b36ec331fae5f10b2
Status: Downloaded newer image for mysql/mysql-server:latest
c7a9309eac20a7d0bb6f0a16460bf2b678aae741c201efae8974ea64a3736595
接下来,创建一个目录来存储数据库:
mkdir -p /opt/guacamole/mysql
接下来,使用以下命令生成 MySQL 初始化脚本:
docker run --rm guacamole/guacamole /opt/guacamole/bin/initdb.sh --mysql > /opt/guacamole/mysql/01-initdb.sql
接下来,将 Guacamole MySQL 数据库初始化脚本复制到 MySQL Docker 容器中:
docker cp /opt/guacamole/mysql/01-initdb.sql guacamoledb:/docker-entrypoint-initdb.d
接下来,使用以下命令连接到 MySQL 数据库容器:
docker exec -it guacamoledb bash
连接后,您将获得以下 shell:
bash-4.4#
接下来,使用以下命令列出 MySQL 初始化脚本:
cd /docker-entrypoint-initdb.d/
ls
输出:
01-initdb.sql
接下来,使用以下命令连接到 MySQL shell:
mysql -u root -p
接下来,将数据库切换到 guacd 并初始化 Guacamole 数据库:
use guacdb;
source 01-initdb.sql;
接下来,使用以下命令验证所有表:
show tables;
您将获得以下输出:
+---------------------------------------+
| Tables_in_guacdb |
+---------------------------------------+
| guacamole_connection |
| guacamole_connection_attribute |
| guacamole_connection_group |
| guacamole_connection_group_attribute |
| guacamole_connection_group_permission |
| guacamole_connection_history |
| guacamole_connection_parameter |
| guacamole_connection_permission |
| guacamole_entity |
| guacamole_sharing_profile |
| guacamole_sharing_profile_attribute |
| guacamole_sharing_profile_parameter |
| guacamole_sharing_profile_permission |
| guacamole_system_permission |
| guacamole_user |
| guacamole_user_attribute |
| guacamole_user_group |
| guacamole_user_group_attribute |
| guacamole_user_group_member |
| guacamole_user_group_permission |
| guacamole_user_history |
| guacamole_user_password_history |
| guacamole_user_permission |
+---------------------------------------+
接下来,创建一个管理员用户并使用以下命令设置密码:
create user '%';
接下来,使用以下命令刷新权限并退出 MySQL shell:
flush privileges;
exit;
接下来,使用以下命令退出 MySQL 容器:
exit
您现在可以使用以下命令验证正在运行的容器:
docker ps
您应该在以下输出中看到 MySQL 容器:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c7a9309eac20 mysql/mysql-server "/entrypoint.sh mysq…" 2 minutes ago Up 2 minutes (healthy) 3306/tcp, 33060-33061/tcp guacamoledb
您还可以使用以下命令检查容器日志:
docker logs guacamoledb
您将获得以下输出:
[Entrypoint] Starting MySQL 8.0.30-1.2.9-server
2022-10-02T11:31:52.589985Z 0 [Warning] [MY-011068] [Server] The syntax '--skip-host-cache' is deprecated and will be removed in a future release. Please use SET GLOBAL host_cache_size=0 instead.
2022-10-02T11:31:52.592352Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.30) starting as process 1
2022-10-02T11:31:52.602604Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2022-10-02T11:31:52.875859Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2022-10-02T11:31:53.131572Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
2022-10-02T11:31:53.131639Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.
2022-10-02T11:31:53.163561Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060, socket: /var/run/mysqld/mysqlx.sock
2022-10-02T11:31:53.163648Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.30' socket: '/var/lib/mysql/mysql.sock' port: 3306 MySQL Community Server - GPL.
启动鳄梨酱服务器容器
现在,运行以下命令启动 Guacamole 服务器容器:
docker run --name guacamole-server -d guacamole/guacd
您可以使用以下命令检查容器日志:
docker logs --tail 10 guacamole-server
您将获得以下输出:
guacd[7]: INFO: Guacamole proxy daemon (guacd) version 1.4.0 started
guacd[7]: INFO: Listening on host 0.0.0.0, port 4822
要检查正在运行的容器,请使用以下命令:
docker ps
您将获得以下输出:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
51b2efdab0db guacamole/guacd "/bin/sh -c '/usr/lo…" 26 seconds ago Up 25 seconds (health: starting) 4822/tcp guacamole-server
c7a9309eac20 mysql/mysql-server "/entrypoint.sh mysq…" 3 minutes ago Up 3 minutes (healthy) 3306/tcp, 33060-33061/tcp guacamoledb
启动鳄梨酱客户端容器
您还可以使用以下命令启动 Guacamole 客户端容器:
docker run --name guacamole-client --link guacamole-server:guacd --link guacamoledb:mysql -e MYSQL_DATABASE=guacdb -e MYSQL_USER=guacadmin -e MYSQL_PASSWORD=password -d -p 80:8080 guacamole/guacamole
接下来,使用以下命令验证正在运行的容器:
docker ps
您应该看到以下输出:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d4034a72bb69 guacamole/guacamole "/opt/guacamole/bin/…" 58 seconds ago Up 57 seconds 0.0.0.0:80->8080/tcp, :::80->8080/tcp guacamole-client
51b2efdab0db guacamole/guacd "/bin/sh -c '/usr/lo…" About a minute ago Up About a minute (health: starting) 4822/tcp guacamole-server
c7a9309eac20 mysql/mysql-server "/entrypoint.sh mysq…" 5 minutes ago Up 5 minutes (healthy) 3306/tcp, 33060-33061/tcp guacamoledb
此时Guacamole容器启动,并监听80端口,可以通过以下命令查看:
ss -altnp | grep :80
您将获得以下输出:
LISTEN 0 4096 0.0.0.0:80 0.0.0.0:* users:(("docker-proxy",pid=4006,fd=4))
LISTEN 0 4096 [::]:80 [::]:* users:(("docker-proxy",pid=4013,fd=4))
访问 Apache Guacamole 仪表板
您现在可以使用 URL http://your-server-ip/guacamole 访问 Apache Guacamole Web 界面。您应该会看到鳄梨酱登录屏幕:

提供默认凭据:
用户:guacadmin
密码:guacadmin
然后,单击“登录”按钮。您应该会在以下屏幕上看到 Guacamole 仪表板:

结论
恭喜!您已经在 Ubuntu 22.04 服务器上使用 Docker 成功安装了 Apache Guacamole 服务器和客户端。您现在可以创建新连接并通过 Web 浏览器访问远程服务器。如果您有任何问题,请随时问我。