Apache Guacamole

ワークディレクトリ作成

$ mkdir -p guacamole 
$ cd guacamole

docker-compose.xml作成

$ cat << EOF >> docker-compose.yml
services:
  guacd:
    image: guacamole/guacd
    container_name: guacamole-guacd

  mysql:
    image: mysql
    container_name: guacamole-mysql
    environment:
      - MYSQL_ROOT_PASSWORD=guacapass
    volumes:
      - "./mysql/data:/var/lib/mysql"
      - "./mysql/init:/docker-entrypoint-initdb.d"

  guacamole:
    image: guacamole/guacamole
    container_name: guacamole
    links:
      - guacd:guacd
      - mysql:mysql
    environment:
      - MYSQL_DATABASE=guacamole_db
      - MYSQL_USER=guacamole_user
      - MYSQL_PASSWORD=guacapass
      - GUACD_HOSTNAME=guacd
      - MYSQL_HOSTNAME=mysql

  nginx:
    image: nginx
    container_name: guacamole-nginx
    ports:
      - "80:8000"
    volumes:
      - "./nginx:/etc/nginx"
      - "./nginx-log:/var/log/nginx"
    links:
      - guacamole
EOF

SQL初期化用のスクリプトを作成

$ mkdir -p ./mysql/init
$ cat << EOF >> ./mysql/init/1_createdb.sql
CREATE DATABASE guacamole_db;
CREATE USER guacamole_user IDENTIFIED BY 'guacapass';
GRANT SELECT,INSERT,UPDATE,DELETE ON guacamole_db.* TO guacamole_user;
FLUSH PRIVILEGES;
EOF
$ docker run --rm guacamole/guacamole /opt/guacamole/bin/initdb.sh --mysql > ./mysql/init/2_initguacamoledb.sql
$ sed -i '1s/^/use guacamole_db;\n/' ./mysql/init/2_initguacamoledb.sql

NGINX用の事前設定

$ docker run -it -d --name tmp-nginx nginx 
$ docker cp tmp-nginx:/etc/nginx nginx 
$ docker rm -f tmp-nginx
$ cat << EOF >> ./nginx/conf.d/guacamole.conf 
server {
  listen 8000;
  server_name _;

  location /guacamole/ {
    proxy_pass http://guacamole:8080/guacamole/;
    proxy_read_timeout 61s;
    proxy_buffering off;
  }
}
EOF
$ docker-compose up -d
$ docker-compose ps