我有Windows 10 2004、8核AMD CPU,12GB RAM,运行现有的wsl2 debian实例也很好。我可以使用现有的WSL运行典型的Web堆栈php-fpm nginx mariadb redis-server,并且性能很好。我一直在阅读wsl2和docker现在要好得多,并想尝试一下。
我用wsl2安装了docker 2.3.0.4,并安装了devilbox作为Web堆栈。
我使用.wslconfig文件将wls进程限制为4gb和4 cpus,这一切都很酷,而且工作正常。
不能正常工作的是,一个简单的php页面(例如<?php echo time(); ?>
可能需要15到30秒才能显示出来!任何与数据库对话的信息都会导致90秒钟的加载时间。 wordpress站点是不可能的。在WSL2的nginx / debian上运行相同的脚本/站点/数据库是完美的。
Windows重新启动后,我无法运行docker桌面应用程序(在重新启动之前,它可以工作)。启动时,放在我桌面上的图标docker安装程序没有任何作用。我看不到任务管理器中出现任何流程。似乎没有崩溃,只是没有用。我可以右键单击任务栏中的docker图标,然后以这种方式进入仪表板。我通常还是在命令行上工作,所以没什么大不了的,以为我已经提到了。
devilbox安装会设置一个本地Web服务器,并且一切正常。我不得不多次docker-compose up
才能正确拉出容器,但那时我确实有糟糕的互联网。 Web界面非常灵活,我可以启动phpmyadmin之类的工具,并且它们可以正常加载。如果我尝试用100个表还原一个10mb的数据库,它将超时并崩溃并刻录。即使我的磁盘负载达到90%并在那里停留了5分钟,也可以通过mysql通过外壳恢复相同的数据库工作正常。
我如何弄清楚为什么与在同一环境下在WSL2上直接安装linux相比,docker是如此糟糕?我猜这与io位Windows任务管理器说磁盘io平均负载为2%有关。
答案 0 :(得分:0)
我认为是 docker volume 和 windows 文件共享的问题。即使您使用 WSL2,也不意味着您使用 linux 文件系统。如果你使用windows系统的文件,例如:import pickle
import os
from google_auth_oauthlib.flow import Flow, InstalledAppFlow
from googleapiclient.discovery import build
from googleapiclient.http import MediaFileUpload, MediaIoBaseDownload
from google.auth.transport.requests import Request
def Create_Service(client_secret_file, api_name, api_version, *scopes):
print(client_secret_file, api_name, api_version, scopes, sep='-')
CLIENT_SECRET_FILE = client_secret_file
API_SERVICE_NAME = api_name
API_VERSION = api_version
SCOPES = [scope for scope in scopes[0]]
print(SCOPES)
cred = None
pickle_file = f'token_{API_SERVICE_NAME}_{API_VERSION}.pickle'
# print(pickle_file)
if os.path.exists(pickle_file):
with open(pickle_file, 'rb') as token:
cred = pickle.load(token)
if not cred or not cred.valid:
if cred and cred.expired and cred.refresh_token:
cred.refresh(Request())
else:
flow = InstalledAppFlow.from_client_secrets_file(CLIENT_SECRET_FILE, SCOPES)
cred = flow.run_local_server()
with open(pickle_file, 'wb') as token:
pickle.dump(cred, token)
try:
service = build(API_SERVICE_NAME, API_VERSION, credentials=cred)
print(API_SERVICE_NAME, 'service created successfully')
return service
except Exception as e:
print('Unable to connect.')
print(e)
return None
def convert_to_RFC_datetime(year=1900, month=1, day=1, hour=0, minute=0):
dt = datetime.datetime(year, month, day, hour, minute, 0).isoformat() + 'Z'
return dt
CLIENT_SECRET_FILE = 'credentials.json'
API_SERVICE_NAME = 'drive'
API_VERSION = 'v3'
SCOPES = ['https://www.googleapis.com/auth/drive']
service = Create_Service(CLIENT_SECRET_FILE,API_SERVICE_NAME,API_VERSION,SCOPES)
,它是windows文件和文件夹,windows会在docker执行之前读取和扫描它们。
我找到了解决方案。它是在 WSL 发行版中安装您的项目。打开你的 linux 发行版,对我来说是 Ubuntu 18.0,你将从 d:/workspace/myproject
开始,在这里安装你的项目,例如:/home/%USER_PATH%
您可以将 IDE 远程连接到 WSL,在 VSCode 中,它通过扩展远程 WSL 支持。这使您的项目仅在 linux 文件系统上工作,而不与 windows 共享,并且速度更快