Build a Service with Docker
Ubuntu: 18.04
Docker: 18.09
在 Getting Started with Docker 瞭解了 Docker
的運作之後,接著就可以根據自己的需求透過 Docker
建置自己的服務了。
Download Ubuntu Image
在開始操作之前,可以先到 Docker Hub 抓取現成的 Image
下來使用。
下載 Image 可以使用 docker pull 指令。
; docker pull [OPTIONS] NAME[:TAG|@DIGEST]
; 下載 Ubuntu 19.04 的 image
docker pull ubuntu:19.04
; 完成以後可以查看 images 清單
docker images
; 不需要的 image 也可以透過 docker rmi 指令刪除
docker rmi ubuntu:latest
Build Container
當 Image
準備好之後,就可以用 Image
當 base 來建立 Container
。
建立 Container
有兩種指令,一種是 docker create,另一種則是 docker run。
兩者的差別是 docker create
在建立 Container
後但 不會啟動
,必須再手動啟動,比較會常用來 build 一些服務類型的 Container
;而 docker run
則是建立 Container
後並 啟動
,較常用來執行一些一次性的操作,例如透過 docker 運算資料等等,算完就可以關閉。
docker create 範例:
; docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
; 建立 Container(建立但未啟動)
docker create -it --name MyService ubuntu:19.04
加入 -it
的用意是讓 Container
支援從外部傳入指令。
Option | Description |
---|---|
-i | 讓 Container 的 STDIN 保持打開 |
-t | 讓 Docker 分配一個虛擬終端(pseudo-tty)並綁定到 Container 的 STDIN 上 |
建立完成以後,就可以操作 Container
。
Container 基本操作
; 查看所有 Container 清單(包含未啟動)
docker ps -a
; 啟動 Container
docker start MyService
; 查看運作中的 Container 清單
docker ps
; 進入 Container 中(docker attach)
; 可以使用 Ctrl + P and Q 離開 Container(Container 持續在背景執行)
docker attach MyService
; 進入 Container 中(docker exec)
; 可以直接使用 exit 指令離開 Container(Container 持續在背景執行)
docker exec -it MyService bash
; 刪除 Container
; docker rm [OPTIONS] CONTAINER [CONTAINER...]
docker rm MyService
docker run 範例
; docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]
; 建立 Container 並啟動,在結束指令後會關閉
docker run --rm ubuntu:19.04 /bin/echo 'Hello World'
; 同時建立啟動並進入 Container
; 可以使用 Ctrl + P and Q 離開 Container(Container 持續在背景執行)
docker run -it --name MyService ubuntu:19.04 /bin/bash
; 使用 -d(Detached) 讓 docker 在背景執行
docker run -d --name echo_hello_world ubuntu:19.04 /bin/bash -c "while true; do echo hello world; sleep 1; done"
docker run 參數
Option | Description |
---|---|
--rm | 當 Container 結束時,刪除 Container |
-i | 讓 Container 的 STDIN 保持打開 |
-t | 讓 Docker 分配一個虛擬終端(pseudo-tty)並綁定到 Container 的 STDIN 上 |
Container Logs
當 Container
在背景執行時,可以透過 docker logs 查看 Container
輸出的訊息。
查看 Docker 內輸出的資訊
; docker logs [OPTIONS] CONTAINER
docker logs -ft echo_hello_world
參數資訊: Option |
Description |
---|---|
-f | 持續輸出 output 訊息 |
-t | 顯示 timestamps |
Build a Service
這裡就用 Docker 建立一個 Apache httd
Service 來當範例。
; 下載 httpd image
docker pull httpd:2.4.41
; 執行 httpd image
; 將本機的 8080 port 綁定到 Container 的 80 port
docker run -d --name apache -p 8080:80 httpd:2.4.41
Notice: Docker 網路設定的部份可以參考 Container networking
成功以後,只要是連線到 URL:8080
的話,Request
就會進到 Container
中。
Create new Image
如果你在你的 Container
中又加入一些東西,可以透過 docker commit 將修改後的 Container
再 create 出一個新的 Image
。
建立一個 Ubuntu Container,並進入 Container
docker create -it --name MyService ubuntu:19.04
docker start MyService
docker exec -it MyService bash
安裝 vim
apt install vim
exit
建立新的 Image
docker commit -m "install vim" -a "JohnsonLu" MyService ubuntu:test
參數資訊: Option |
Description |
---|---|
-a | 作者資訊 |
-m | Commit 訊息 |