MySQL(MariaDB)

# MySQL
docker run \
-d \
-e MYSQL_ROOT_PASSWORD=Passw0rd \
-e MYSQL_DATABASE=mydb \
-e MYSQL_USER=luanrz \
-e MYSQL_PASSWORD=Passw0rd \
-p 127.0.0.1:3306:3306 \
-v ~/Data/App/MySQL/data:/var/lib/mysql \
--name=mysql \
mysql
# phpMyAdmin
docker run \
-d \
-e PMA_USER=root \
-e PMA_PASSWORD=Passw0rd \
-p 127.0.0.1:8880:80 \
--link mysql:db \
--name phpmyadmin \
phpmyadmin

Redis

# Redis
docker run \
-d \
-p 127.0.0.1:6379:6379 \
--name=redis \
redis

XXL-JOB

docker run \
-d \
-e PARAMS="--spring.datasource.url=jdbc:mysql://db:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai --spring.datasource.password=Passw0rd" \
-p 127.0.0.1:8881:8080 \
-v ~/Data/App/XXL-JOB/logs:/data/applogs/xxl-job \
--name xxl-job-admin \
--link mysql:db \
xuxueli/xxl-job-admin:2.4.0

XXL-JOB依赖于MySQL,首次启动XXL-JOB时需要执行对应SQL

Windows

Docker Compose

创建docker-compose.yml文件:

version: "3"
services:
  windows:
    image: dockurr/windows
    container_name: windows
    devices:
      - /dev/kvm
    cap_add:
      - NET_ADMIN
    ports:
      - 127.0.0.1:8006:8006
      - 127.0.0.1:3399:3389/tcp
      - 127.0.0.1:3399:3389/udp
    stop_grace_period: 2m
    restart: on-failure
    environment:
      VERSION: "http://winiso/ltsc10.iso"
      RAM_SIZE: "4G"
      CPU_CORES: "2"
      DISK_SIZE: "32G"
    volumes:
      - ./win:/storage
    depends_on:
      - winiso
  winiso:
    image: nginx:alpine
    container_name: winiso
    restart: on-failure
    volumes:
     - ./iso:/usr/share/nginx/html

在当前目录下创建iso子目录,将ltsc10.iso放入其中,随后启动容器:

docker compose up -d

在浏览器中访问http://127.0.0.1:8006,执行windows安装流程。安装完成后开启远程桌面访问,后续可通过Remmina等支持RDP协议的工具连接3399端口访问远程桌面。

Docker Run

  1. 准备本地iso镜像下载容器(可选)

后续创建Windows容器时,需要从远程服务器下载iso镜像,可新建本地iso镜像下载容器,以提升后续下载速度。

在当前目录下创建iso子目录,将ltsc10.iso放入其中,随后创建自定义网络与iso镜像下载容器:

创建自定义网络的目的是启用Docker的DNS,以便Windows容器能够通过容器名访问镜像下载容器提供的服务。

# 创建自定义网络
docker network create windows_network

# 创建镜像下载容器
docker run \
--name=winiso \
-d \
-v ./iso:/usr/share/nginx/html \
--net windows_network \
nginx:alpine
  1. 启动Windows容器
docker run \
--name windows \
-it \
-p 127.0.0.1:8006:8006 \
-p 127.0.0.1:3399:3389 \
--device=/dev/kvm \
--cap-add NET_ADMIN \
--stop-timeout 120 \
--net windows_network \
-e VERSION="http://winiso/ltsc10.iso" \
-e RAM_SIZE="4G" \
-e CPU_CORES="2" \
-e DISK_SIZE="32G" \
-v ./win:/storage \
dockurr/windows
  • --net需要与镜像下载容器winiso处于同一个网络(windows_network)。
  • -e VERSION可指定windows镜像版本,指定为本地镜像下载容器服务路径可提升下载速度。
  1. 安装windows

在浏览器中访问http://127.0.0.1:8006,执行windows安装流程。安装完成后开启远程桌面访问,后续可通过Remmina等支持RDP协议的工具连接3399端口访问远程桌面。

  1. 移除临时容器(可选)
docker rm -f winiso
  1. 移除临时网络(可选)
# docker network connect bridge windows
docker network disconnect windows_network windows
docker network rm windows_network

当前Windows容器在首次启动时将NetworkMode配置为windows_network,通过上述命令移除windows_network后,重启Windows容器会提示找不到windows_network而报错。因此,需重建Windows容器:

docker rm -f windows

docker run \
--name windows \
-d \
-p 127.0.0.1:3399:3389 \
--device=/dev/kvm \
--cap-add NET_ADMIN \
--stop-timeout 120 \
-e VERSION="http://winiso/ltsc10.iso" \
-e RAM_SIZE="4G" \
-e CPU_CORES="2" \
-e DISK_SIZE="32G" \
-v ./win:/storage \
dockurr/windows

重建Windows容器时,将直接基于./win中的内容启动容器。同时,以下几个配置已不再需要:-p 127.0.0.1:8006:8006 --net windows_network

参见官方Github页面这篇文章