2023 iT邦鐵人賽 Day 30 - Docker 指令彙整

前言

終於到了鐵人賽的終點了,我們從基本 Server 帶入到 Docker,接著進入 Docker 的世界,了解了容器、連接阜、網絡、Volume 掛載、生命週期、映像檔、映像層、Dockerfile、Docker Compose、容器管理。

透過三十天,介紹了一大輪,大家應該都認識了整個 Docker 的應用,之後如果想要加強哪個部分,都可以知道要從哪個部分下手。

今天最後一天,我們就彙整一下所有指令。

指令彙整

容器

對容器進行故障與問題追蹤時:

docker container top 容器id : 查看容器內的進程(process)信息,列出在特定容器中運行的所有進程及其相關信息,如 PID(進程 ID)、USER(進程的擁有者)、TIME(進程運行的時間)、COMMAND(啟動進程的命令)等。

docker container logs 容器id : 查看日誌檔內容,包含應用程式執行結果或HTTP request的請求過程與結果。

docker container inspect 容器id : 查看容器的詳細完整資訊。

docker container stats : 查看所有執行中的容器,正在使用多少系統資源,如 CPU、記憶體、網路流量和磁碟空間。

docker container stats 容器id :也可查看指定容器。

查詢容器們:

docker container ls : 查看所有運行中的容器

docker container ls --all : 查看所有容器,包含運行中與停止的容器

當容器內的應用程式結束後,容器便會進入退出狀態 ( exited ),也就是停止運作。

刪除容器:

docker container rm --force $(docker container ls --all --quiet)

容器必須先停止 stop 後才能刪除。

  • --force-f: 強制刪除執行中容器,不必先 stop。

  • $( ) : 先執行括號內的指令,再執行$()前面的指令,並將括號內的執行結果作為前面指令收受對象。

  • --quiet-q: 只顯示必要資訊,如容器 id,不會顯示其他資訊。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    docker container ls --all:

    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    5f19765b2e57 diamol/ch02-hello-diamol-web "httpd-foreground" 6 minutes ago Up 6 minutes 0.0.0.0:8088->80/tcp ecstatic_perlman
    40688178a6d9 diamol/ch02-hello-diamol-web "httpd-foreground" 23 hours ago Exited (255) 12 minutes ago 0.0.0.0:8088->80/tcp exciting_solomon
    f327ecf33824 diamol/base "/bin/sh" 23 hours ago Exited (0) 23 hours ago quirky_meitner

    docker container ls --all --quiet:
    5f19765b2e57
    40688178a6d9
    f327ecf33824

用容器建立映像檔:

docker commit 容器名稱 映像檔名稱 : 以該容器現存狀態,建立成一個映像檔。

與容器互動

docker container exec -it 容器名稱 sh

options:

--publish 8088:80-p 8088:80 : 配發實體的網路連接阜( 8088 )給容器使用( 80 )。

讓 docker 監聽實體電腦連接阜 8088 的網路流量,將 8088 的訊息轉送到容器的連接阜 80

--detach-d: 在背景啟動容器並顯示容器ID。

-filter-f : 尋找符合條件的容器

可用 namenetworkstatus 當查詢條件

-v--volume : 指定 volume 掛載到容器的目錄資料夾

映像檔

docker image ls : 查看所有的映像檔。

docker image ls 'w*' : 查看名字開頭為 w 的映像檔。

docker image history 映像檔名稱 : 查看映像檔的中繼資料( metadata )與建置紀錄。

也就是查看映像檔的每個映像層與建置每個映像層所使用的命令。

docker image ls --filter reference=映像檔名稱 : 查詢映像檔列表中,符合某個映像檔名稱的映像檔

docker image ls --filter reference='*/映像檔名稱'

volume

docker volume create volume_name : 建立 volume,名稱為 volume_name

docker volume ls : 查看 volume 清單

docker volume prune : 刪除所有未被使用的 volume

-v--volume : 啟動容器時,指定 volume

docker container run --name practice -p 8080:80 -v volume_name:'/data'
啟動容器時,將 volume_name 掛載到容器的 /data

約定掛載

docker container run --mount type=bind,source="$(pwd)/new",target="/init" d iamol/ch06-bind-mount

--mount type=bind,source="$(pwd)/new",target="/init"

ps. type、source、target 與逗號間不能有空格

檔案系統

  • 每個容器都有各自的檔案系統
  • 檔案系統由可寫層、約定掛載層、volume層、映像層整合而成

Docker Compose

docker-compose up : 建立並啟動所有容器

docker-compose stop : 停止所有容器,被停止的容器不會佔用 CUP,但在檔案系統內仍是存在的

docker-compose start :重啟所有系列容器

docker-compose down :停止並刪除所有容器、未設定 external 的 volume 跟 net

docker-compose ls

docker-compose ps : 列出 compose 中所有執行中的容器

options

--scale : 擴展服務容器的數量 ex: docker-compose up --scale service_name=5

總結

很高興今年也參加並完賽了鐵人賽,去年寫了 Rails 的測試,今年寫了 Docker,每年能大量學習到不同的技術。先許願明年希望能寫個資料庫相關的主題。