[分享] docker 簡易入門使用教學 - 討論區

[分享] docker 簡易入門使用教學

文章瀏覽次數 227 文章回覆數 3

Alex

Alex圖像

2025-02-25 11:49:53

From:211.23.21.202

docker 簡易入門使用教學

docker 簡易入門使用教學設定檔 zip 下載

下載安裝 docker desktop

下載安裝 docker desktop

實作之一 docker-test1

php-apache server

進入 docker hub 找合適的 image

在此頁面搜尋框輸入 php 按 Enter,進入下面這個連結

php 官方 image

這裡會有 Overview, Tags 兩個頁籤,切換進入 Tags 這個頁籤,在 Filter tags 輸入 php 按下 Enter,會進入下面這個連結

符合 filter 條件的 image

使用 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

  1. 先建立 c:/temp/
    c:/temp/

  2. 在 c:/temp/ 建立兩個子目錄 docker-test1 及 web1
    c:/temp/docker-test1/
    c:/temp/web1/

  3. 在 docker-test1 裡,建立一個 docker-compose.yml 檔,來執行各項啟動設定
    c:/temp/docker-test1/docker-compose.yml

  4. 進入
    cd c:/temp/docker-test1/

  5. 執行 docker
    方法一 : docker compose up
    方法二 : docker compose up -d
    Windows Defender 允許

  6. 另開一個 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

  1. http://127.0.0.1:8010/

  2. 停止這個 docker container
    方法一 : 在原來的 terminal 中,按 ctrl + c
    方法二 : 在原來的 terminal 中,執行 docker compose down

實作之二 docker-test2

加入 mariadb

mariadb server

mariadb 官方 image

這裡會有 Overview, Tags 兩個頁籤,切換進入 Tags 這個頁籤,在 Filter tags 輸入 10.10 按下 Enter,會進入下面這個連結

符合 filter 條件的 image

使用 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

  1. 進入
    cd c:/temp/docker-test2/

  2. 執行 docker
    方法一 : docker compose up
    方法二 : docker compose up -d
    Windows Defender 允許

  3. 另開一個 cmd,執行 docker ps -a,查看所有正在執行的 docker container
    這次 docker 裡面,會有兩個 containers,一個是 web,另一個是 db

  4. 開啟兩個 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 複製完整的指令逐條執行。

  5. 在 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;

  6. http://127.0.0.1:8010/maria1.php

  7. 出現錯誤訊息
    連線失敗: 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

  8. 查看 php extension
    sh utils.sh w
    php -m | grep my
    mysqlnd
    少了下面這兩個 extension
    mysqli
    pdo_mysql

  9. 停止這個 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

  1. 進入
    cd c:/temp/docker-test3/

  2. 執行 docker
    方法一 : docker compose up
    方法二 : docker compose up -d
    Windows Defender 允許

  3. 另開一個 cmd,執行 docker ps -a,查看所有正在執行的 docker container
    這次 docker 裡面,會有兩個 containers,一個是 web,另一個是 db

  4. 開啟兩個 git bash ,並進入 cd c:/temp/docker-test3/
    sh utils.sh w
    會進入 web 容器的 command line
    sh utils.sh d
    會進入 db 容器的 command line

  5. 因為先前第二次啟動已經把 database 初始化完成,這次就不再重作

  6. http://127.0.0.1:8010/maria1.php

  7. 出現新的錯誤訊息
    連線失敗: 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

  8. 打開 maria1.php
    修改
    $host = 'localhost'; // 不能用 'locaclhost' 也不能用 '127.0.0.1'

    $host = 'db'; // 在 docker 內部, 只能用 yml 裡面 service 的名稱

  9. 停止這個 docker container
    方法一 : 在原來的 terminal 中,按 ctrl + c
    方法二 : 在原來的 terminal 中,執行 docker compose down

註釋:

  1. 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

留言

#1

特種兵

特種兵圖像(預設)

2025-02-25 15:42:16

From:211.23.21.202

慢慢跟著一步一步做,大概兩個小時可以完成

#2

阿慶

阿慶圖像

2025-02-28 23:02:12

From:118.168.250.183

感覺用 Dockerfile 自訂 image 應該是滿主要的用途,可以設計符合使用場景的 image
加上 docker compose,就可以把服務都組合起來了!

#3

特種兵

特種兵圖像(預設)

2025-03-08 10:07:44

From:111.249.175.4

這是最基本的使用,如果想用在實戰,還有很多需要研究的部分,例如調整apache的設定以符合當下的系統。