Docker

    版本為 12:23, 30 Nov 2024

    到這個版本。

    返回到 版本存檔.

    查閱目前版本

    docker-logo.png什麼是 Docker?

    • Ben Golub說(Docker CEO):「Docker不只是一項Container技術,而是要打造一個Container生態系,讓應用程式可以在任何地方執行。」,「Docker是一個可以來建置、移動和執行分散式應用程式的開放平臺」。
    • 相較於傳統虛擬化技術 VMware/Xen 是針對作業系統虛擬化,而 Docker 則是以軟體為基礎的虛擬化,這不但實現了軟體快速佈署、轉移、開發協同合作等特性。
    • Docker是一個Client-Server架構的應用程式,安裝Docker之後,會提供了一個命令列的用戶端程式來和在背景執行的Docker伺服器溝通,Docker也完整支援RESTful API,可讓開發人員透過API執行所有Docker指令。甚至Docker還提供了一個腳本語法描述的Dockerfile設定檔,可以用來紀錄和描述建立Docker映象檔的每一個指令。不用複製Docker映象檔,只憑Dockerfile也可以自動建立一個和原來一模一樣的Container的映象檔。甚至可以從Registry服務下載一個映象檔,再依此來建立下一個映象檔,例如從ubuntu的映象檔中,加入MySQL程式,來建立一個內有ubuntu和MySQL的映象檔,用來啟用Container。

     

    官方網站:https://www.docker.com/

    介紹影片:

    更多介紹文:

    更多站內文章:

    傳統虛擬化的 Virtual machine 虛擬機器與 Docker 有何不同?

    Virtual Machines

    虛擬化通常都是透過在 Host OS 上安裝 hypervisor ,由 hypervisor 來管理不同虛擬主機,每個虛擬主機都需要安裝不同的作業系統。

    Docker

    Docker 提供應用程式在獨立的 container 中執行,這些 container 並不需要像虛擬化一樣額外依附在 hypervisor 或 guest OS 上,是透過 Docker Engine 來進行管理。

    Virtual Machines v.s Docker

    VM-vs-Docker.png

    基本操作

    線上求助
    man docker <command>
    man docker build
    man docker rmi 
    
    管理 images
    // 搜尋 Docker Hub 上的 image name
    docker search lamp
    
    // 顯示已下載所有 image name
    docker images
    
    // 檢視既有 image 的詳細資訊
    docker inspect <image-name>
    
    // 網路下載 image
    docker pull ubuntu:13.10
    
    // 刪除已下載的 image
    docker rmi <image-name>
    
    // 刪除所有 images
    docker rmi $(docker images -q)
    
    // 刪除所有 images,除了 my-images 以外
    docker rmi $(docker images | grep -v 'ubuntu\|my-image' | awk {'print $3'})
    

    TIPs:

    搜尋 Docker Hub 有哪些 images 可下載,https://registry.hub.docker.com/

    image 不用刻意下載,當開啟 container 時,如果 image 不存在,系統會自動下載。

    Image Name 格式 <REPOSITORY>:<TAG> 例如 buntu:13.10

    管理 Container
    // 開啟並進入 container 的 console
    docker run -i -t <image-name> /bin/bash
    
    // 以 daemon 方式啟動 container
    docker run -d -p 11180:80 <image-name>
    
    // 檢查目前已經啟動的 containers
    docker ps
    docker ps -a
    
    // 檢視開啟中 container 的詳細資訊,包含 Volumes、IP、Hostname 等等
    docker inspect <container-id>
    
    // 刪除指定的 container
    docker rm <container-id> 
    
    // 刪除所有的 containers
    NOTE: 小心,這也會刪除正在執行的 container
    docker ps -a -q | xargs -n 1 docker rm 
    
    // 刪除所有已經終止的 container
    docker ps -a | grep "Exited" | awk '{print $1}' | xargs docker rm
    NOTE: 這常用於在重新啟動 container 或 rebuild image 時遇到錯誤訊息的解決方法。
    
    // 停止 container
    docker stop <container-id>
    
    // 匯出 container
    docker export <container-id>  > ubuntu-mysql.tar 
    
    // 匯入 container
    cat ubuntu-mysql.tar | docker import - <image-name>
    
    // 跳離目前開啟中的 container
    按下 Ctrl P 後再按 Ctrl Q
    
    // 重新進入開啟中的 container
    docker attach <container-id>
    或
    docker attach <container-name>
    
    // 儲存開啟中 container 內容
    docker commit <container-id> <image-name> 
    
    // 顯示指定 container 的 IP
    docker inspect <container-id> | grep IPAddress | cut -d '"' -f 4 
    

    TIP:

    執行 exit 可以離開目前的 container,回到原先的 Linux

    一旦離開 container,所有之前做過的變更,將全部失效,如果要保留做過的變更,必須使用 commit 產生一個新的 image。

    -p 將 Host 的 port 11180 轉送至 container 的 port 80

    Docker 管理
    // 檢查 Docker 版本
    docker version
    
    // Docker 更多資訊
    docker info
    
    Powered by MindTouch Core