Docker折騰記: (2)基於docker-compose構建yapi容器

CRPER發表於2019-03-04

前言

第一篇: Docker折騰記: (1)構建yapi容器,從構建釋出到可用

這篇主要是用docker-compose來編排我們第一篇的內容,順便談談docekr-compose的好處

docker-compose是什麼? 簡言之就是一個容器編排工具;


前置基礎

在第一篇的基礎上,你還要懂得yaml的寫法,比如陣列的寫法,物件的寫法等等

寫法大體和json差不多,但是可表達的東西更多

一般用pip(python的一個包管理工具)就可以安裝最新的docker-compose版本,

喜歡折騰的也可以自行編譯維護


compose.yml

注意事項

  • yaml對縮排非常嚴格,一個空格都能造成錯誤
  • docker-compose
    • 冒號後面需要跟隨空格,除了卷或者埠的對映
    • 獨立的區域,比如volume,networks這種待對映的值不能以陣列的形式,必須為mapping(對映,就是跟隨冒號)
    • 直接拼接對映的portvolume需要用雙引號包括

# 使用版本號為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,不帶引數會有互動式

Docker折騰記: (2)基於docker-compose構建yapi容器

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容器,會讓我們的開發更好的維護,

不管是線上還是線下,容器對於多環境的處理是很讚的;

比如內部伺服器的各種服務,測試環境,開發環境之間的資訊隔離;

有不對之處請留言,會及時修正..謝謝閱讀

相關文章