docker 簡易入門使用教學
下載安裝 docker desktop
實作之一 docker-test1
php-apache server
在此頁面搜尋框輸入 php 按 Enter,進入下面這個連結
這裡會有 Overview, Tags 兩個頁籤,切換進入 Tags 這個頁籤,在 Filter tags 輸入 php 按下 Enter,會進入下面這個連結
使用 bookworm (Debian 12) 且有 apache 這個版本
php:8.3.17-apache-bookworm
下載 image
先打開 docker desktop
程式
進入 cmd
docker pull php:8.3.17-apache-bookworm
幾秒後,就會下載完成,可用下列命令查看
docker image ls
C:\Users\KG4>docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
php 8.3.17-apache-bookworm 9a01360407ad 39 hours ago 713MB
第一次啟動 docker
使用 c:/temp/docker-test1/docker-compose.yml
-
先建立 c:/temp/
c:/temp/ -
在 c:/temp/ 建立兩個子目錄 docker-test1 及 web1
c:/temp/docker-test1/
c:/temp/web1/ -
在 docker-test1 裡,建立一個 docker-compose.yml 檔,來執行各項啟動設定
c:/temp/docker-test1/docker-compose.yml -
進入
cd c:/temp/docker-test1/ -
執行 docker
方法一 : docker compose up
方法二 : docker compose up -d
Windows Defender 允許 -
另開一個 cmd,執行 docker ps -a,查看所有正在執行的 docker container
C:\Users\KG4>docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f9b28431419d php:8.3.17-apache-bookworm "docker-php-entrypoi…" About a minute ago Up 59 seconds 0.0.0.0:8010->80/tcp apache-php-abc
-
http://127.0.0.1:8010/
-
停止這個 docker container
方法一 : 在原來的 terminal 中,按 ctrl + c
方法二 : 在原來的 terminal 中,執行 docker compose down
實作之二 docker-test2
加入 mariadb
mariadb server
這裡會有 Overview, Tags 兩個頁籤,切換進入 Tags 這個頁籤,在 Filter tags 輸入 10.10 按下 Enter,會進入下面這個連結
使用 mariadb:10.10.7-jammy 這個版本 (在 windows 無法初始化 db)
改用 mariadb:11.7.2-noble
下載 image
進入 cmd
docker pull mariadb:11.7.2-noble
幾秒後,就會下載完成,可用下列命令查看
docker image ls
C:\Users\KG4>docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
php 8.3.17-apache-bookworm 9a01360407ad 2 days ago 713MB
mariadb 11.7.2-noble 334b315c10e5 15 months ago 549MB
第二次啟動
使用 c:/temp/docker-test2/docker-compose.yml
-
進入
cd c:/temp/docker-test2/ -
執行 docker
方法一 : docker compose up
方法二 : docker compose up -d
Windows Defender 允許 -
另開一個 cmd,執行 docker ps -a,查看所有正在執行的 docker container
這次 docker 裡面,會有兩個 containers,一個是 web,另一個是 db -
開啟兩個 git bash [1],並進入 cd c:/temp/docker-test2/
sh utils.sh w
會進入 web 容器的 command line
sh utils.sh d
會進入 db 容器的 command line
如果在 git bash 沒辦法順利使用 sh 執行 utils.sh,那就開另一個 cmd 來做,或者開啟 utils.sh 複製完整的指令逐條執行。 -
在 db 的 terminal 中,
輸入 ls /sql-init/1.sql
輸入 mariadb -u dbuser4maria -p hellodb
進入 mariadb client 之後,執行 source /sql-init/1.sql
完成後,可用 show tables;
select * from users;
select * from profiles;
-
http://127.0.0.1:8010/maria1.php
-
出現錯誤訊息
連線失敗: could not find driver
Fatal error: Uncaught Error: Class "mysqli" not found in /var/www/html/maria1.php:74 Stack trace: #0 {main} thrown in /var/www/html/maria1.php on line 74 -
查看 php extension
sh utils.sh w
php -m | grep my
mysqlnd
少了下面這兩個 extension
mysqli
pdo_mysql -
停止這個 docker container
方法一 : 在原來的 terminal 中,按 ctrl + c
方法二 : 在原來的 terminal 中,執行 docker compose down
實作之三 docker-test3
自建 image 加入 php extension mysqli pdo_mysql
產生 image 的 Dockerfile
建立一個 v3.Dockerfile
開啟 git bash 進入 cd c:/temp/docker-test3
執行 sh utils.sh build
開始 build image
幾秒鐘後,build 完成
使用 docker image ls 查看,有一個新的 image 叫 my-v3-php:8.3.17-apache-bookworm image
KG4@TABLET-IQO17SPQ MINGW64 /c/temp/docker-test3
docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
my-v3-php 8.3.17-apache-bookworm d8ec296bba71 57 seconds ago 717MB
mariadb 11.7.2-noble 310d29fbb581 2 days ago 466MB
php 8.3.17-apache-bookworm 9a01360407ad 2 days ago 713MB
第三次啟動
使用 c:/temp/docker-test3/docker-compose.yml
注意 : yml 裡的 web image 要改為剛剛產生的 my-v3-php:8.3.17-apache-bookworm
-
進入
cd c:/temp/docker-test3/ -
執行 docker
方法一 : docker compose up
方法二 : docker compose up -d
Windows Defender 允許 -
另開一個 cmd,執行 docker ps -a,查看所有正在執行的 docker container
這次 docker 裡面,會有兩個 containers,一個是 web,另一個是 db -
開啟兩個 git bash ,並進入 cd c:/temp/docker-test3/
sh utils.sh w
會進入 web 容器的 command line
sh utils.sh d
會進入 db 容器的 command line -
因為先前第二次啟動已經把 database 初始化完成,這次就不再重作
-
http://127.0.0.1:8010/maria1.php
-
出現新的錯誤訊息
連線失敗: SQLSTATE[HY000] [2002] No such file or directory
Fatal error: Uncaught mysqli_sql_exception: No such file or directory in /var/www/html/maria1.php:74 Stack trace: #0 /var/www/html/maria1.php(74): mysqli->__construct('localhost', 'dbuser4maria', Object(SensitiveParameterValue), 'hellodb') #1 {main} thrown in /var/www/html/maria1.php on line 74 -
打開 maria1.php
修改
$host = 'localhost'; // 不能用 'locaclhost' 也不能用 '127.0.0.1'
為
$host = 'db'; // 在 docker 內部, 只能用 yml 裡面 service 的名稱 -
停止這個 docker container
方法一 : 在原來的 terminal 中,按 ctrl + c
方法二 : 在原來的 terminal 中,執行 docker compose down
註釋:
- git bash 下,資料夾與磁碟機的分隔符號是 /,而 c: 要寫成 /c,這部分與傳統 windows cmd 有差異。
※最後更新時間:2025-02-25 11:53:44 From:211.23.21.202 By:Alex
※最後更新時間:2025-02-25 12:01:40 From:211.23.21.202 By:Alex