本篇文章介紹執行 docker,參考官方文件

簡介

Container 是作業系統中一個普通的程序,預期這個程序有獨立的檔案管理系統,獨立的網路,獨立的程序樹,跟本機作業系統不相關。使用 docker run 去執行 image,執行以下命令以運行 python-docker

1
docker run python-docker

當你執行這個指令,你會發現這個指令並不會回傳,因為這是一個 REST Server,他會持續等待進來的請求直到 container 被關閉,我們可以開啟另一個 terminal 使用 GET Request 到伺服器,這個請求會被拒絕。這代表我們無法連到 localhost 的 port 5000,這是被預期的結果,因為 container 執行在獨立的網路環境

1
curl localhost:5000

要在 container 公開 port,要使用 --publish 選項或 -p--publish 的參數是 [host port]:[container port],所以當我們要從外部的 3000 port 轉到,內部的 5000 port,要設定 3000:5000--publish

flask 預設是 5000 port,我們要將外部的 8000 port 轉換過去

1
docker run --publish 8000:5000 python-docker

現在再執行一次請求將會成功

1
curl localhost:8000

在 detached 模式執行

Docker 可以在 detached 模式執行 container,我們使用 --detach-d 執行。Docker 會執行 container 但立刻就回傳,將程式運行於背景。

1
docker run -d -p 8000:5000 python-docker

執行請求將會成功

1
curl localhost:8000

容器列表

因為我們讓 container 執行於背景,所以我們要有方式觀看目前正在執行的 container。執行 docker ps 列出執行的 container。

1
docker ps

container 會列出一串資訊,其中包含 container name,通常沒有設定是隨機產生,所以我們先關閉 container

1
docker stop wonderful_kalam

暫停、啟動、命名

當我們暫停 container,他並沒有被移除,只是將狀態改為 stopped,和暫停 container 內部的程序。
先前使用的 docker ps 「只顯示正在執行的 container」。當我們傳遞 --all-a,可以看到不同狀態的 container

要重啟 container,執行以下指令

1
docker restart wonderful_kalam

要刪除 container,執行以下指令

1
docker rm wonderful_kalam

要給予 container 名稱,要在 docker run 啟動 image 成為 container 時,給予 --name 旗標,
底下指令將名稱命成 rest-server

1
docker run -d -p 8000:5000 --name rest-server python-docker