This commit is contained in:
spiritlhl
2024-01-15 13:16:41 +00:00
parent e0c3851302
commit d3d7587876
61 changed files with 2249 additions and 54 deletions

View File

@@ -0,0 +1,164 @@
---
outline: deep
---
# 前言
两种开设方式
## 单独开设
- 只生成一个docker这里有判断为国际服务器还是国内服务器如果在国内服务器上开设容器内的包管理源自动替换为清华源
- 可配置绑定独立的IPV6地址但需要先前使用本套脚本的环境安装命令安装的docker且需要宿主机至少绑定了/112的IPV6子网
- 支持x86_64和ARM架构的服务器
### 下载脚本
国际
```shell
curl -L https://raw.githubusercontent.com/spiritLHLS/docker/main/scripts/onedocker.sh -o onedocker.sh && chmod +x onedocker.sh
```
国内
```shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/spiritLHLS/docker/main/scripts/onedocker.sh -o onedocker.sh && chmod +x onedocker.sh
```
### 示例
运行支持的变量
```
./onedocker.sh name cpu memory password sshport startport endport <independent_ipv6> <system>
```
目前system仅支持选择
- alpine
- debian
- ubuntu
- almalinux
默认不填则是debian
```shell
./onedocker.sh test 1 512 123456 25000 34975 35000 N debian
```
以下为开设的示例容器的信息:
| 属性 | 值 |
|------------------------|----------------|
| 容器名字 | test |
| SSH登录的用户名 | root |
| SSH登录的密码 | 123456 |
| CPU核数 | 1 |
| 内存大小 | 512MB |
| SSH端口 | 25000 |
| 内外网映射端口一致的区间 | 34975到35000 |
| 系统 | debian |
| 是否绑定独立的IPV6地址 | N |
### 相关操作
删除示例
```shell
docker rm -f test
rm -rf test
ls
```
进入示例
```shell
docker exec -it test /bin/bash
```
要退出容器就执行```exit```退出。
查询已开设的信息
```shell
cat 容器名字
```
输出格式
```
容器名字 SSH端口 登陆的root密码 核数 内存 外网端口起 外网端口止
```
docker的ipv6地址只能在容器内自己查询在docker的配置中是不存在的
## 批量开设
- 批量多次运行继承配置生成
- 生成多个时为避免SSH连接中断建议在screen中执行
- 支持x86_64和ARM架构的服务器
### 运行
国际
```shell
curl -L https://raw.githubusercontent.com/spiritLHLS/docker/main/scripts/create_docker.sh -o create_docker.sh && chmod +x create_docker.sh && bash create_docker.sh
```
国内
```shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/spiritLHLS/docker/main/scripts/onedocker.sh -o onedocker.sh && chmod +x onedocker.sh
```
### 查询批量开设的信息
```shell
cat dclog
```
输出格式
```
容器名字 SSH端口 登陆的root密码 核数 内存 外网端口起 外网端口止
```
一行一个容器对应的信息docker的ipv6地址只能在容器内自己查询在docker的配置中是不存在的
## 卸载所有docker容器和镜像
以下命令卸载会忽略ndpresponder以防止IPV6的配置失效
```shell
docker ps -aq --format '{{.Names}}' | grep -E '^ndpresponder' | xargs -r docker rm -f
docker images -aq --format '{{.Repository}}:{{.Tag}}' | grep -E '^ndpresponder' | xargs -r docker rmi
rm -rf dclog
ls
```
## 更新上述所有脚本
删除原始配置脚本
```bash
rm -rf /usr/local/bin/ssh_sh.sh
rm -rf /usr/local/bin/ssh_bash.sh
rm -rf /usr/local/bin/check-dns.sh
rm -rf /root/ssh_sh.sh
rm -rf /root/ssh_bash.sh
rm -rf /root/onedocker.sh
rm -rf /root/create_docker.sh
```
下载回新版本的相关配置脚本
```bash
wget https://raw.githubusercontent.com/spiritLHLS/docker/main/extra_scripts/check-dns.sh -O /usr/local/bin/check-dns.sh && chmod +x /usr/local/bin/check-dns.sh
wget https://raw.githubusercontent.com/spiritLHLS/docker/main/scripts/config.sh -O /usr/local/bin/config.sh && chmod +x /usr/local/bin/config.sh
wget https://raw.githubusercontent.com/spiritLHLS/docker/main/scripts/ssh_bash.sh -O /usr/local/bin/ssh_bash.sh && chmod +x /usr/local/bin/ssh_bash.sh
wget https://raw.githubusercontent.com/spiritLHLS/docker/main/scripts/ssh_sh.sh -O /usr/local/bin/ssh_sh.sh && chmod +x /usr/local/bin/ssh_sh.sh
wget https://raw.githubusercontent.com/spiritLHLS/docker/main/scripts/onedocker.sh -O /root/onedocker.sh && chmod +x /root/onedocker.sh
wget https://raw.githubusercontent.com/spiritLHLS/docker/main/scripts/create_docker.sh -O /root/create_docker.sh && chmod +x /root/create_docker.sh
```

View File

@@ -0,0 +1,324 @@
---
outline: deep
---
# 使用Docker一键安装某些容器的脚本
每个容器都有对应的配置要求,自行查看,内存不够的用[这个](https://virt.spiritlhl.net/guide/docker_install.html#%E5%BC%80%E8%AE%BE%E8%99%9A%E6%8B%9F%E5%86%85%E5%AD%98)开设虚拟内存补足也行
注意,以下脚本使用前务必使用本套教程中的环境安装脚本进行前期环境安装
## 一键开设Android系统的容器
- 自定义安卓版本
- 自动创建带校验的web网站
- 自动进行nginx安装和反向代理的配置可选择是否绑定域名默认回车不绑定使用80端口
- 无需考虑宿主机是否支持嵌套虚拟化
- 支持x86_64和ARM架构
**宿主机的配置至少要有1核2G内存15G硬盘否则开设可能会导致宿主机卡死**
宿主机推荐 Ubuntu 系统Debian 系统可能导致安卓屏幕白屏
安卓版本越新占用越大,以上的配置要求是最低版本安卓的配置要求 (个人测试到 12.0.0-latest 的tag可用更高版本映射白屏了自己测试哪个能用吧)
**开设**
国际
```shell
curl -L https://raw.githubusercontent.com/spiritLHLS/docker/main/scripts/create_android.sh -o create_android.sh && chmod +x create_android.sh && bash create_android.sh
```
国内
```shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/spiritLHLS/docker/main/scripts/create_android.sh -o create_android.sh && chmod +x create_android.sh && bash create_android.sh
```
命令执行后按照提示输入即可,注意选择版本输入的是序号,对应选项的数字序号,安装完毕后打开```本机IPV4+80端口```可登录
如果需要查询生成的安卓信息和web登录信息执行```cat /root/android_info```可查询信息
默认的用户名 ```onea```
默认密码 ```oneclick```
远程的桌面点击```H264 Converter```跳转就是了
**暂时只支持生成一个安卓容器,勿要重复生成,如需替换版本请执行后续命令删除后再次开设**
**删除**
- 删除容器
- 删除容器对应镜像
- 删除配置文件
```
docker rm -f android
docker rm -f scrcpy_web
docker rmi $(docker images | grep "redroid" | awk '{print $3}')
rm -rf /etc/nginx/sites-enabled/reverse-proxy
rm -rf /etc/nginx/sites-available/reverse-proxy
rm -rf /etc/nginx/passwd_scrcpy_web
rm -rf /root/android_info
```
## 一键开设Windows系统的容器
- 共享宿主机所有资源(CPU、内存、硬盘)基于docker所以只占用系统的大小适合多开
- 共享IP做了docker的NAT映射可选择是否映射到外网或仅内网
- 设置的win系统默认最多占用为1核2G内存50G硬盘实际占用看使用情况
- 无需iptables进行NAT映射删除容器时自动删除了端口的映射方便维护
- 需要考虑宿主机是否支持嵌套虚拟化暂时只支持X86_64架构的系统
**宿主机需要支持嵌套虚拟化且暂时只支持X86_64架构的系统手头没ARM机器编译对应的镜像**
执行
```
egrep -c '(vmx|svm)' /proc/cpuinfo
```
结果需要大于或等于1不能为0
然后需要先设置docker切换使用v1版cgroup启动
```
sed -i 's/GRUB_CMDLINE_LINUX="\(.*\)"/GRUB_CMDLINE_LINUX="\1 systemd.unified_cgroup_hierarchy=0"/' /etc/default/grub
update-grub
ls
```
如果执行都无报错,执行```reboot```重启系统以使得设置生效
**支持的镜像**
使用的自建的镜像:[https://hub.docker.com/r/spiritlhl/wds](https://hub.docker.com/r/spiritlhl/wds)
| 镜像名字 | 镜像大小 |
|---------|--------|
| 10 | 20G |
| 2022 | 17.5G |
| 2019 | 17G |
创建出的容器大小会比镜像大小大一丢丢,但不多
**下载脚本**
```
curl -L https://raw.githubusercontent.com/spiritLHLS/docker/main/scripts/onewindows.sh -o onewindows.sh && chmod +x onewindows.sh
```
**使用方法**
开设前务必在screen窗口中执行避免SSH长期链接造成掉线卡死
```
./onewindows.sh 容器名字 系统版本 RDP的端口 是否为外网映射(留空则默认是N可选Y)
```
开设前需要确认宿主机至少有镜像大小的两倍大小加10G硬盘的大小因为docker在创建容器时得先将镜像拉到本地再创建
创建过程中,硬盘占用峰值为```宿主机系统+镜像大小+容器大小```
比如开设容器名字为```test```,占用最低的```Windows 2019```系统的容器映射外网RDP端口为```13389```,设置为```外网映射```(映射到你的服务器外网IPV4地址)
```
./onewindows.sh test 2019 13389 Y
```
开设后默认的用户名是```Administrator```和```vagrant```
默认的密码是```vagrant```
如果你选择开设映射的外网端口,务必登录后修改对应账户的密码(两个账户都可能有,自行尝试),否则可能被人爆破滥用
**删除**
需要删除对应镜像和容器,先执行```docker ps -a```和```docker images```查询镜像是```spiritlhl/wds```的ID然后对应使用
```
docker rm -f 容器的ID
docker rmi 镜像的ID
```
删除后可开设别的版本的windows容器
(在宿主机上使用Docker安装Windows系统好像绕过了某些商家不允许DD成Win系统的TOS限制)
## 一键开设Firefox浏览器的容器
- 已设置崩溃自启
- 已设置带中文字体
- 自带web的校验可自设置密码
- 可自定义容器最大的内存占用
- 可选是否开启VNC端口默认不开启
- 无需考虑是否支持嵌套虚拟化和服务器的架构
- 不支持声音映射无论是WEB端还是VNC端都无法传输声音
**宿主机需要至少1核2G内存5G硬盘开设的容器大小将占用起码1G硬盘**
**开设**
开设后默认的密码是```oneclick```
默认的web端口是```3003```,开设后打开```本机IPV4:端口```即可
```shell
curl -L https://raw.githubusercontent.com/spiritLHLS/docker/main/scripts/onefirefox.sh -o onefirefox.sh && chmod +x onefirefox.sh && bash onefirefox.sh
```
**删除**
修改以下端口号```3003```为你实际的端口号,然后执行命令回车两次即可删除容器、配置文件、对应镜像
```shell
PORT="3003"
docker stop firefox_${PORT}
docker rm -f firefox_${PORT}
rm -rf /usr/local/bin/firefox_${PORT}
docker rmi jlesage/firefox
```
## 一键开设Chrome浏览器的容器
- 已设置崩溃自启
- 自带web的校验可自设置密码
- 可自定义容器最大的内存占用
- 无需考虑是否支持嵌套虚拟化和服务器的架构
- 支持声音映射
**宿主机需要至少1核2G内存5G硬盘开设的容器大小将占用起码1G硬盘**
**开设**
开设后默认的密码是```oneclick```
默认的http端口是```3004```,开设后打开```http://本机IPV4:端口```即可
默认的https端口是```3005```,开设后打开```https://本机IPV4:端口```即可
```shell
curl -L https://raw.githubusercontent.com/spiritLHLS/docker/main/scripts/onechromium.sh -o onechromium.sh && chmod +x onechromium.sh && bash onechromium.sh
```
**删除**
修改以下端口号```3004```为你实际的http端口号然后执行命令回车两次即可删除容器、配置文件、对应镜像
```shell
PORT="3004"
docker stop chromium_${PORT}
docker rm -f chromium_${PORT}
rm -rf /usr/local/bin/config_${PORT}
rm -rf /usr/local/bin/password_${PORT}
docker rmi lscr.io/linuxserver/chromium
```
## 一键开设Desktop的容器
- 已设置崩溃自启
- 已设置带中文字体
- 自带web的校验可自设置用户名和密码
- 可自定义容器最大的内存占用
- 无需考虑是否支持嵌套虚拟化和服务器的架构
- 支持声音映射WEB端可传输声音
完整的Linux桌面可以在上面使用浏览器
**宿主机需要至少1核2G内存5G硬盘开设的容器大小将占用起码3.2G硬盘**
**开设**
开设后默认的用户名是```onew```,密码是```oneclick```默认的内存最大占用是2GB
默认的http协议的web端口是```3004```默认的https协议的web端口是```3005```,开设后打开对应协议的```本机IPV4:端口```即可
```shell
curl -L https://raw.githubusercontent.com/spiritLHLS/docker/main/scripts/onewebtop.sh -o onewebtop.sh && chmod +x onewebtop.sh && bash onewebtop.sh
```
**删除**
执行
```shell
docker ps -a
```
查询name的前缀是webtop的容器记录容器的ID用
```shell
docker rm -f 容器的ID
```
删除所有关联的容器后可用
```shell
docker rmi lscr.io/linuxserver/webtop
```
删除对应镜像
## 一键安装guacamole
一个网页端连接SSH或RDP等协议控制服务器的玩意
网址:```http://你的IPV4地址:80/guacamole```
默认用户: ```guacadmin```
默认密码: ```guacadmin```
安装完毕登录后自行修改
**宿主机的配置至少要有1核2G内存10G硬盘否则开设可能会导致宿主机卡死**
国际
```shell
curl -L https://raw.githubusercontent.com/spiritLHLS/docker/main/extra_scripts/guacamole.sh -o guacamole.sh && chmod +x guacamole.sh && bash guacamole.sh
```
国内
```shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/spiritLHLS/docker/main/extra_scripts/guacamole.sh -o guacamole.sh && chmod +x guacamole.sh && bash guacamole.sh
```
## 一键开设RustDesk的容器
- 已设置崩溃自启
- 无需考虑是否支持嵌套虚拟化和服务器的架构
- 传输质量看你的服务器和各端之间的连通性和延迟
一个跨端的远控中继端(非客户端),支持双向控制
**宿主机需要至少1核1G内存10G硬盘对带宽的需求极低**
**开设**
安装后客户端在这里找 [https://github.com/rustdesk/rustdesk/releases/latest](https://github.com/rustdesk/rustdesk/releases/latest)
在设置中设置中继服务器的IP即可支持 Android、Windows、Linux、浏览器 端,支持电脑远控手机
```shell
curl -L https://raw.githubusercontent.com/spiritLHLS/docker/main/scripts/onerustdesk.sh -o onerustdesk.sh && chmod +x onerustdesk.sh && bash onerustdesk.sh
```
**删除**
删除容器
```shell
docker rm -f hbbs
docker rm -f hbbr
```
删除对应镜像
```shell
docker rmi rustdesk/rustdesk-server
```

View File

@@ -0,0 +1,63 @@
---
outline: deep
---
# 前言
支持开设 Docker 虚拟化的各系统,含 Linux、Android、Windows 系统
如果你的宿主机本身没有IPV6的子网又想给容器分配IPV6地址那么请先查看```LXD```模块中的```自定义```分区中的```给宿主机附加免费的IPV6地址段```的内容给宿主机附加上IPV6子网后再进行环境安装
## 开设虚拟内存
:::tip
内存开点swap免得机器炸了
:::
单位换算:输入 1024 产生 1G SWAP-虚拟内存虚拟内存占用硬盘空间当实际内存不够用时将自动使用虚拟内存做内存使用但随之带来IO高占用以及CPU性能占用
建议只开实际内存大小两倍大小的虚拟内存
国际
```shell
curl -L https://raw.githubusercontent.com/spiritLHLS/addswap/main/addswap.sh -o addswap.sh && chmod +x addswap.sh && bash addswap.sh
```
国内
```shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/spiritLHLS/addswap/main/addswap.sh -o addswap.sh && chmod +x addswap.sh && bash addswap.sh
```
## 环境预设
- 检测系统环境,安装对应组件
- 安装docker和docker-compose这里有判断为国际服务器还是国内服务器自动安装对应源的docker
- 下载默认需要的一些配置脚本
- 检测如果存在IPV6地址检测其是否大于或等于/112如果符合条件则配置docker的ipv6的网络
- 如果上述条件都符合创建ndpresponder的docker和radvd使得IPV6的分配支持ndp广播和自动分配
- 支持x86_64和ARM架构的服务器
国际
```shell
curl -L https://raw.githubusercontent.com/spiritLHLS/docker/main/scripts/dockerinstall.sh -o dockerinstall.sh && chmod +x dockerinstall.sh && bash dockerinstall.sh
```
国内
```shell
curl -L https://cdn.spiritlhl.net/https://raw.githubusercontent.com/spiritLHLS/docker/main/scripts/dockerinstall.sh -o dockerinstall.sh && chmod +x dockerinstall.sh && bash dockerinstall.sh
```
```
bash dockerinstall.sh
```
:::tip
环境安装过程中可能要求你重启服务器后再次执行脚本,详见脚本运行后的说明
:::

View File

@@ -0,0 +1,37 @@
---
outline: deep
---
# 前言
以下为非自定义部分的介绍,自定义部分有自己对应的介绍,勿弄混了
:::warning
如果宿主机带IPV6网络的话安装会改变宿主机的网络结构请保证宿主机随时可重置系统且运行前无重要数据在宿主机上
:::
如果你的宿主机本身没有IPV6的子网又想给容器分配IPV6地址那么请先查看```LXD```模块中的```自定义```分区中的```给宿主机附加免费的IPV6地址段```的内容给宿主机附加上IPV6子网后再进行环境安装
## 项目特点
通过docker批量或单独开设NAT服务器(Bulk or individual NAT server provisioning via docker)
默认使用debian系统可选alpine系统每个容器自带1个外网ssh端口25个内外网一致端口可选择是否绑定IPV6地址
默认创建的是非特权容器且不挂载与宿主机的docker的守护进程之间的通信所以**宿主机创建的docker虚拟化的NAT服务器内无法再嵌套虚拟化docker**
默认安装并启用lxcfs使得在容器内的查询资源时CPU和内存使用的是配置的视图而不是宿主机的视图
由于大部分云服务器是ext4文件系统docker默认的存储引擎是overlayfs2即便宿主机的文件系统是xfs默认也不会启用pquota选项所以**默认共享宿主机硬盘,无法限制每个容器的磁盘大小**
## 配置要求
系统可安装docker即可用网络能连接Github的raw界面就能用硬件配置只要不拉跨就行空闲硬盘有3G就行
(如果需要绑定IPV6地址那么请保证使用本套脚本的环境预设脚本进行环境安装需要它自动预设部分设置)
如果硬件资源只是好了一点需要限制更多东西并需要限制硬盘大小可使用LXD分区的脚本批量开LXC虚拟化的容器
如果硬件非常好资源很多可使用PVE分区的脚本批量开KVM虚拟化的虚拟机
推荐在开设NAT服务器前先增加部分SWAP虚拟内存避免突发的内存占用导致宿主机卡死

View File

@@ -0,0 +1,67 @@
---
outline: deep
---
# 解惑
## 常见的一些docker命令
查询某个容器的实时占用
```
docker stats 容器名字
```
进入某个容器
```
docker exec -it 容器名字 /bin/bash
```
清理 Docker 缓存,清理未使用的资源,包括镜像、容器、网络等
```
docker system prune -a
```
卸载所有docker的镜像和容器
```
docker rm -f $(docker ps -aq); docker rmi $(docker images -aq)
```
查看对应容器日志
```
docker logs 容器名字或ID
```
查看docker整体的disk占用
```
docker system df
```
查看所有容器
```
docker ps -a
```
查看所有镜像
```
docker images
```
删除某个特定容器
```
docker rm -f 容器名字或ID
```
删除某个特定镜像
```
docker rmi 镜像名字或ID
```

View File

@@ -0,0 +1,39 @@
## 致谢
https://hub.docker.com/_/debian
https://hub.docker.com/r/redroid/redroid
https://github.com/NetrisTV/ws-scrcpy
https://guacamole.apache.org/doc/gug/introduction.html
https://blog.imoeq.com/oracle-arm-run-android-by-docker
https://blog.imoeq.com/scrcpy-run-a-android-web-page
https://www.howtoforge.com/how-to-install-apache-guacamole-as-docker-container-on-ubuntu/
https://releases.hashicorp.com/vagrant/
https://github.com/hashicorp/vagrant/
https://app.vagrantup.com/peru
https://medium.com/axon-technologies/installing-a-windows-virtual-machine-in-a-linux-docker-container-c78e4c3f9ba1
https://forum.garudalinux.org/t/error-while-attempting-to-create-a-virtual-machine-with-virt-manager/18534/4
https://github.com/jlesage/docker-firefox
https://github.com/linuxserver/docker-webtop
https://github.com/rustdesk/rustdesk
https://github.com/yoursunny/ndpresponder
https://github.com/linuxserver/docker-chromium
https://github.com/SuperManito/LinuxMirrors
感谢 [@Ella-Alinda](https://github.com/Ella-Alinda) 和 @CoiaPrant 提供的Docker指导