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

前言

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

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

前置基礎

在第一篇的基礎上,你還要懂得yaml的寫法,好比數組的寫法,對象的寫法等等json

寫法大致和json差很少,可是可表達的東西更多api

通常用pip(python的一個包管理工具)就能夠安裝最新的docker-compose版本,數組

喜歡折騰的也能夠自行編譯維護bash

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的相關命令仍是能夠查看,中止乃至刪除容器;app

編排工具裏面的封裝的中止這些,能夠理解爲"隊列",就是批量幫你處理你編排文件的容器ide

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

無論是線上仍是線下,容器對於多環境的處理是很讚的;

好比內部服務器的各類服務,測試環境,開發環境之間的信息隔離;

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

相關文章
相關標籤/搜索