前言
第一篇: Docker折騰記: (1)構建yapi容器,從構建釋出到可用
這篇主要是用docker-compose
來編排我們第一篇的內容,順便談談docekr-compose
的好處
docker-compose
是什麼? 簡言之就是一個容器編排工具;
前置基礎
在第一篇的基礎上,你還要懂得yaml
的寫法,比如陣列的寫法,物件的寫法等等
寫法大體和json
差不多,但是可表達的東西更多
一般用pip
(python的一個包管理工具)就可以安裝最新的docker-compose
版本,
喜歡折騰的也可以自行編譯維護
compose.yml
注意事項
- yaml對縮排非常嚴格,一個空格都能造成錯誤
docker-compose
內- 冒號後面需要跟隨空格,除了卷或者埠的對映
- 獨立的區域,比如
volume
,networks
這種待對映的值不能以陣列的形式,必須為mapping(對映,就是跟隨冒號) - 直接拼接對映的
port
和volume
需要用雙引號包括
# 使用版本號為3.6
version: '3.6'
services:
# 宣告yapi服務
yapi:
# 選擇的映象
image: crper/yapi:latest
# 容器的自定義名字,也就是命令列的--name
container_name: yapi
# 不用: 則只是暴露內部埠,用了就是對映外部訪問的介面 , -p
ports:
- "3000:3000"
# 單個主機上用bridge(橋接)居多,Swarm(叢集)上的overlay, 還有幾個模式,比如host
networks:
- yapi
# 啟動的時候依賴哪個映象
depends_on:
- yapi-mongo
# 設定容器的DNS服務
dns:
- 114.114.114.114
- 8.8.8.8
# 容器重啟策略,這裡是開啟了任何錯誤都會預設重啟
restart: always
# mongo服務
yapi-mongo:
restart: always
image: mongo:latest
networks:
- yapi
container_name: yapi-mongo
ports:
- "27017:27017"
# 對映卷
volumes:
- "yapi-mongo:/data/db"
# 自定義的網路名
networks:
yapi:
# 待對映的volume
volumes:
yapi-mongo:
# 配置還有很多,比如什麼子網,傳參,日誌輸出,dns,臨時資料夾,網路模式,資源分配等等
# 還能直接在裡面構建映象,而不用去用現有的
# 引數很多,所以要熟悉的配置也是比較麻煩的,這種東西只能一點點的去總結經驗
# 具體看官方網站對compose的介紹 : https: //docs.docker.com/compose/compose-file/
複製程式碼
命令列操作
docker-compose
只是個編排工具!!!!要記住這個;核心還是依賴docker;
因為你啟動後,docker
的相關命令還是可以檢視,停止乃至刪除容器;
編排工具裡面的封裝的停止這些,可以理解為"佇列",就是批量幫你處理你編排檔案的容器
docker-compose
的命令列用起來和docker
差不多,compose
針對的是編排,而docker
是單一容器
- 建立容器例項並啟動
docker-compose up
: 這個命令會執行docker-compose.yml
,根據規則全部執行完畢(沒有錯誤的情況下)
若是不想卡在終端一直展示輸出,(用-d
)守護程式的模式來啟動即可
當然,你若是配置檔案不是這個名字,需要用-f
來指定compose
的啟動檔案
- 停止且刪除容器
docker-compose down
: 這個會把當前配置檔案啟動的服務依次幹掉,並移除
- 暫停某個服務:
docker-compose stop [options] services
- 刪除已經停止的容器:
docker-compose rm
build Build or rebuild services
bundle Generate a Docker bundle from the Compose file
config Validate and view the Compose file
create Create services
down Stop and remove containers, networks, images, and volumes
events Receive real time events from containers
exec Execute a command in a running container
help Get help on a command
images List images
kill Kill containers
logs View output from containers
pause Pause services
port Print the public port for a port binding
ps List containers
pull Pull service images
push Push service images
restart Restart services
rm Remove stopped containers
run Run a one-off command
scale Set number of containers for a service
start Start services
stop Stop services
top Display the running processes
unpause Unpause services
up Create and start containers
version Show the Docker-Compose version information
複製程式碼
看這些描述就能大體知道做什麼的了..可以看到例項的狀態,日誌,進入容器等等
比如docker-compose ps
(檢視服務的狀態,執行,停止!)
Name Command State Ports
-----------------------------------------------------------
yapi entrypoint.sh Exit 137
yapi-mongo docker-entrypoint.sh mongod Exit 0
複製程式碼
比如docker-compose.yml
用到了哪些映象, docker-compose images
Container Repository Tag Image Id Size
--------------------------------------------------------
yapi crper/yapi latest ae69ea846d69 472 MB
yapi-mongo mongo latest 91a642e82a2a 361 MB
複製程式碼
比如刪除停止的服務,docKer-compose rm
,不帶引數會有互動式
By default, anonymous volumes attached to containers will not be removed. You
can override this with `-v`. To list all volumes, use `docker volume ls`.
Any data which is not in a volume will be lost.
Usage: rm [options] [SERVICE...]
Options:
-f, --force Don't ask to confirm removal(強制刪除,不互動)
-s, --stop Stop the containers, if required, before removing(停止容器,如果需要可以在此之前刪除)
-v Remove any anonymous volumes attached to containers(刪除任何連結到容器的匿名卷)
-a, --all Deprecated - no effect.(已經廢除,無效)
複製程式碼
總結
docker-compose
可以把多伺服器的編排集中式的宣告到一個配置檔案,而免去了我們傳入大量的引數到啟動命令列;
管理也是非常方便,可以理解為佇列管理,可以統一性的處理.大大提高了維護的效率
所以,熟練的使用compose
和能自己封裝docker
容器,會讓我們的開發更好的維護,
不管是線上還是線下,容器對於多環境的處理是很讚的;
比如內部伺服器的各種服務,測試環境,開發環境之間的資訊隔離;
有不對之處請留言,會及時修正..謝謝閱讀