前置:
# 安裝步驟:
# 1、開啟 linux 子系統和虛擬機器平臺
# 2、store 安裝 windows terminal
# 3、安裝 vscode
# 4、store 搜尋 ubuntu 安裝一個
# 5、點選啟動設定使用者名稱密碼
# 6、安裝 Docker Desktop (不要勾選代替 hyper-v,否則造成站點訪問慢)(安裝完也可在設定取消勾選 Use the WSL 2 based engine:若已編譯完成需重新編譯容器)
# 7、設定開啟 wsl2 & Resources WSL integration 開啟安裝的版本
1、 克隆倉庫:
git clone https://github.com/Laradock/laradock.git | git clone https://hub.fastgit.org/Laradock/laradock.git
2、複製 env
cp .env.example .env
3、修改 .env 配置
# 版本及路徑根據實際需要修改
APP_CODE_PATH_HOST=../code
DATA_PATH_HOST=../data
PHP_VERSION=7.2.34
MYSQL_VERSION=5.7.34
CHANGE_SOURCE=true #(In China)
WORKSPACE_TIMEZONE=Asia/Shanghai
WORKSPACE_NODE_VERSION=18.17.1 WORKSPACE_NVM_NODEJS_ORG_MIRROR=https://npm.taobao.org/mirrors/node WORKSPACE_NPM_REGISTRY=https://registry.npm.taobao.org
MYSQL_VERSION=5.7.42
#各項擴充套件(建議只開啟用到的,防止編譯錯誤)
# 預設 mysql 及 redis 密碼是否需要更改
修改 workspace/Dockerfile
每個 https://raw.githubusercontent.com 前面加上 https://ghproxy.com/ 如果需要在容器裡執行 npm run dev 或 vite 要把埠對映出來
統一時區:修改 docker-compose.yml
nginx/redis/: port 後面增加: environment: - TZ=${WORKSPACE_TIMEZONE}
4、啟動 docker 容器
docker compose up -d nginx mysql redis
# (php-fpm 和 workspace 為預設編譯 docker-in-docker)
# 可選 phpmyadmin(localhost:8081 mysql root root)
# 啟動容器後如需修改埠對映或其它 .env 配置修改後停止容器,
# 然後執行 docker compose up -d xxx 就可以了
5、執行命令
docker ps # 找到 CONTAINER ID docker exec -it xxx bash
# 在主機修改專案配置:
DB_HOST=mysql
REDIS_HOST=redis
...
6、新增擴充套件重新編譯:
docker compose build xxx #e.g: docker compose build workspace
7、多 PHP 版本
# .env 增加配置
PHP81_VERSION=8.1
# docker-compose.yml: 複製一份 PHP_FPM php-fpm81
LARADOCK_PHP_VERSION=${PHP81_VERSION}
volumes: - ./php-fpm/php${PHP81_VERSION}.ini:/usr/local/etc/php/php.ini
expose: - "9081" # 自定義埠
# 站點修改:
fastcgi_pass php-fpm82:9082;
nginx: depends_on: - php-fpm - php-fpm82
# 啟動
docker compose up -d php-fpm81
8、多 workspace
# docker-compose.yml: 複製一份 workspace workspace81
LARADOCK_PHP_VERSION=${PHP81_VERSION}
# 不同版本 PHP 擴充套件不相容的在複製的版本里直接指定
# 啟動
docker compose up -d workspace81
重啟所有容器:
docker restart $(docker ps -a -q)
設定開啟自啟:
docker update --restart=always <containerName>
附:
匯入主機 sql 檔案:
docker cp ./dir docker-id:/home/tmp/
docker exec -it docker-id bash
cd /home/tmp
mysql -uroot -p
use xxx;
source xxx.sql
遷移 Docker 儲存位置(釋放 C 盤空間):
# 停止 Docker 容器:
docker compose stop
# 關閉發行版:
wsl --shutdown
# 匯出 docker-desktop-data 發行版:
wsl --export docker-desktop-data D:\wsl\docker\tmp\docker-desktop-data.tar
# 登出 docker-desktop-data 發行版:
wsl --unregister docker-desktop-data
# 匯入 docker-desktop-data 到期望遷移的目錄:
wsl --import docker-desktop-data D:\wsl\docker\data\ D:\wsl\docker\tmp\docker-desktop-data.tar --version 2
# 刪除匯出臨時檔案、遷移另一個 Docker 發行版 docker-desktop (可選,佔用空間很小)
# 啟動 docker destktop 啟動容器:
docker compose start nginx mysql redis
編譯錯誤:
# 開啟 source_change 關閉代理 反之開啟代理 多試幾次
Docker 國內加速
# 網易:
https://hub-mirror.c.163.com
# 百度:
https://mirror.baidubce.com
GPK 錯誤:
# wsl 裡執行
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 23E7166788B63E1E
~ 下新增 .wslconfig
wsl 佔用記憶體過高問題
# Settings apply across all Linux distros running on WSL 2
[wsl2]
# Limits VM memory to use no more than 4 GB, this can be set as whole numbers using GB or MB
memory=2GB
# Sets the VM to use two virtual processors
processors=1
# Specify a custom Linux kernel to use with your installed distros. The default kernel used can be found at https://github.com/microsoft/WSL2-Linux-Kernel
# kernel=C:\\temp\\myCustomKernel
# Sets additional kernel parameters, in this case enabling older Linux base images such as Centos 6
# kernelCommandLine = vsyscall=emulate
# Sets amount of swap storage space to 8GB, default is 25% of available RAM
swap=2GB
# Sets swapfile path location, default is %USERPROFILE%\AppData\Local\Temp\swap.vhdx
# swapfile=C:\\temp\\wsl-swap.vhdx
# Disable page reporting so WSL retains all allocated memory claimed from Windows and releases none back when free
# pageReporting=false
# Turn off default connection to bind WSL 2 localhost to Windows localhost
localhostforwarding=true
# Disables nested virtualization
# nestedVirtualization=false
# Turns on output console showing contents of dmesg when opening a WSL 2 distro for debugging
# debugConsole=true
本作品採用《CC 協議》,轉載必須註明作者和本文連結