windows11 下搭建 Docker 開發環境記錄(少踩坑版)

qingye發表於2023-08-30

前置:

# 安裝步驟:
# 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 協議》,轉載必須註明作者和本文連結

相關文章