阿公絕對不會!在Windows上建立Docker環境跑WordPress網站

利用Docker快速包裝好程式的開發環境,換電腦時不用再做煩人的前置設定

使用 Windows 的 Hyper-V 服務(記得從BIOS開啟)來建立 Linux 虛擬機跑 Docker

註冊 https://hub.docker.com/

下載安裝檔

https://desktop.docker.com/win/stable/amd64/Docker%20Desktop%20Installer.exe

阿公絕對不會!在Windows上建立Docker環境跑WordPress網站

阿公絕對不會!在Windows上建立Docker環境跑WordPress網站

安裝好後,重新開機。

阿公絕對不會!在Windows上建立Docker環境跑WordPress網站

下載安裝 Linux 核心更新套件

執行命令將 WSL 2 設定為預設版本

wsl --set-default-version 2

下載安裝Ubuntu 20.04 LTS

阿公絕對不會!在Windows上建立Docker環境跑WordPress網站

阿公絕對不會!在Windows上建立Docker環境跑WordPress網站

阿公絕對不會!在Windows上建立Docker環境跑WordPress網站

啟動Docker Desktop

阿公絕對不會!在Windows上建立Docker環境跑WordPress網站

WSL 整合設定Ubuntu 20.04

阿公絕對不會!在Windows上建立Docker環境跑WordPress網站

確認 Docker 是否安裝成功,執行命令

docker --version

阿公絕對不會!在Windows上建立Docker環境跑WordPress網站

查詢目前存在那些 image

docker image list

WordPress架站示範(方式1)

docker pull wordpress

docker pull mysql:latest 參考

docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag

我下的指令是:docker run --name test123 -e MYSQL_ROOT_PASSWORD=123 -d mysql:5.7

docker run --name some-wordpress --link some-mysql:mysql -p 8080:80 -d wordpress

我下的指令是:docker run --name test --link test123:mysql -p 8080:80 -d wordpress

瀏覽器輸入 localhost:8080

阿公絕對不會!在Windows上建立Docker環境跑WordPress網站

WordPress架站示範(方式2)

安裝visual studio code

阿公絕對不會!在Windows上建立Docker環境跑WordPress網站

安裝WSL

進入終端機

wsl

cd ~

mkdir wordpress

開啟資料夾,在位址列輸入\\wsl$......

可以看到我們建立的wordpress資料夾

阿公絕對不會!在Windows上建立Docker環境跑WordPress網站

進入終端機

cd wordpress

code .

會自動開啟vscode

阿公絕對不會!在Windows上建立Docker環境跑WordPress網站

阿公絕對不會!在Windows上建立Docker環境跑WordPress網站

進入終端機

mkdir ~/wordpress/nginx-conf

開啟vscode

阿公絕對不會!在Windows上建立Docker環境跑WordPress網站

server {
listen 80;
listen [::]:80;
server_name _;
location / {
rewrite ^ https://$host$request_uri? permanent;
}
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name _;
index index.php index.html index.htm;
root /var/www/html/wordpress;
include conf.d/security.conf;
client_max_body_size 512M;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass wordpress:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_read_timeout 600;
}
location ~ /\.ht {
deny all;
}
location = /favicon.ico {
log_not_found off; access_log off;
}
location = /robots.txt {
log_not_found off; access_log off; allow all;
}
location ~* \.(css|gif|ico|jpeg|jpg|js|png)$ {
expires max;
log_not_found off;
}
}
server {
listen 8080 ssl http2;
listen [::]:8080 ssl http2;
server_name _;
index index.php index.html index.htm;
root /var/www/html/phpmyadmin;
include conf.d/security.conf;
client_max_body_size 512M;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass phpmyadmin:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_read_timeout 600;
}
location ~ /\.ht {
deny all;
}
location = /favicon.ico {
log_not_found off; access_log off;
}
location = /robots.txt {
log_not_found off; access_log off; allow all;
}
location ~* \.(css|gif|ico|jpeg|jpg|js|png)$ {
expires max;
log_not_found off;
}
}

阿公絕對不會!在Windows上建立Docker環境跑WordPress網站
阿公絕對不會!在Windows上建立Docker環境跑WordPress網站

阿公絕對不會!在Windows上建立Docker環境跑WordPress網站

server_tokens off;
ssl_certificate /etc/nginx/certs/self-signed.crt;
ssl_certificate_key /etc/nginx/certs/private/self-signed.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers off;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384;
ssl_ecdh_curve secp384r1;
ssl_session_timeout 10m;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Referrer-Policy "no-referrer-when-downgrade" always;
add_header Content-Security-Policy "default-src * data: 'unsafe-eval' 'unsafe-inline'" always;

進入終端機

mkdir -p ~/wordpress/.docker/nginx

開啟vscode

阿公絕對不會!在Windows上建立Docker環境跑WordPress網站

阿公絕對不會!在Windows上建立Docker環境跑WordPress網站

阿公絕對不會!在Windows上建立Docker環境跑WordPress網站

FROM nginx:stable-alpine
RUN apk --update --no-cache add openssl
RUN mkdir -p /etc/nginx/certs/ /etc/nginx/certs/private/
RUN openssl req -x509 -nodes -days 365 -subj "/C=CA/ST=QC/O=Tplus, Inc./CN=localhost" \
-addext "subjectAltName=DNS:localhost" -newkey rsa:2048 \
-keyout /etc/nginx/certs/private/self-signed.key \
-out /etc/nginx/certs/self-signed.crt;

進入終端機

mkdir -p ~/wordpress/.docker/wordpress

阿公絕對不會!在Windows上建立Docker環境跑WordPress網站

FROM wordpress:5-fpm-alpine
RUN apk --no-cache add shadow && usermod -u 1000 www-data

阿公絕對不會!在Windows上建立Docker環境跑WordPress網站

file_uploads = On
memory_limit = 500M
upload_max_filesize = 500M
post_max_size = 500M
max_execution_time = 600

阿公絕對不會!在Windows上建立Docker環境跑WordPress網站

version: '3'
services:
db:
image: mysql:8.0
container_name: wp_db
restart: unless-stopped
env_file: .env
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: wordpress
volumes:
- database:/var/lib/mysql
command: '--default-authentication-plugin=mysql_native_password'
networks:
- app-network
wordpress:
build:
context: ./.docker/wordpress
dockerfile: Dockerfile
depends_on:
- db
image: wordpress/myproj
container_name: wordpress
restart: unless-stopped
env_file: .env
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: ${MYSQL_USER}
WORDPRESS_DB_PASSWORD: ${MYSQL_PASSWORD}
WORDPRESS_DB_NAME: wordpress
WORDPRESS_TABLE_PREFIX: my_wp_
WORDPRESS_CONFIG_EXTRA: |
define( 'FS_METHOD', 'direct' );
volumes:
- ./wordpress:/var/www/html
- ./.docker/wordpress/uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
networks:
- app-network
webserver:
build:
context: ./.docker/nginx
dockerfile: Dockerfile
depends_on:
- wordpress
- phpmyadmin
image: nginx/ssl
container_name: webserver
restart: unless-stopped
ports:
- "80:80"
- "${WP_PORT:-443}:443"
- "${MYADMIN_PORT:-8080}:8080"
volumes:
- ./wordpress:/var/www/html/wordpress
- phpmyadmin:/var/www/html/phpmyadmin
- ./nginx-conf:/etc/nginx/conf.d
networks:
app-network:
aliases:
- localhost
phpmyadmin:
depends_on:
- db
image: phpmyadmin/phpmyadmin:fpm-alpine
container_name: phpmyadmin
restart: always
env_file: .env
environment:
PMA_HOST: db
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
volumes:
- phpmyadmin:/var/www/html
networks:
- app-network
volumes:
phpmyadmin:
driver: local
database:
driver: local
networks:
app-network:
driver: bridge

進入終端機

docker-compose up -d

阿公絕對不會!在Windows上建立Docker環境跑WordPress網站

阿公絕對不會!在Windows上建立Docker環境跑WordPress網站

瀏覽器輸入 localhost

阿公絕對不會!在Windows上建立Docker環境跑WordPress網站

https://localhost:8080/

阿公絕對不會!在Windows上建立Docker環境跑WordPress網站

關於作者 多力哥
阿公絕對不會!在Windows上建立Docker環境跑WordPress網站
影像創作攝影師/網頁動畫設計師/系統網路工程師/水草研究生
景文科大畢業後,我成為一名網站動畫設計師,並副修MIS電腦資訊管理。2004年,我開始接觸單眼相機,並在2008年正式成為一名接案攝影師,目前使用Canon系統進行拍攝。2016年,我愛上了美麗的水草缸,這讓我的生活多了另一層次的放鬆。每天在電腦前修圖時,能欣賞紅吱吱、綠油油的水草,彷彿多了一份平靜與愉悅。攝影與水草讓我的生活充滿了藝術與自然的交融。
連絡信箱:[email protected] (歡迎合作提案)
DORIGO IMAGE 攝影工作室:https://dorigo-image.com
如果你喜歡我的內容,可以用行動贊助我一杯咖啡☕,支持我持續創作,也讓這個網站可以繼續營運下去喔!

若您喜歡這篇文章,歡迎按讚分享喔!
0 回復

發表評論

想要留言嗎?
歡迎歡迎!

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *