Docker 三劍客之 Docker Compose
Docker Compose 專案是 Docker 官方的開源專案,負責實現對 Docker 容器叢集的快速編排,開源地址:https://github.com/docker/compose
Docker Compose 中的兩個重要概念:
- 服務 (service):一個應用容器,實際上可以執行多個相同映象的例項。
- 專案 (project):由一組關聯的應用容器組成的一個完整業務單元。
一個專案可以由多個服務關聯(容器)而成,並使用docker-compose.yml
進行管理。
安裝命令:
$ curl -L https://github.com/docker/compose/releases/download/1.17.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose $ chmod +x /usr/local/bin/docker-compose
這種方式安裝巨慢無比,我們可以使用 PIP 安裝,如果沒有 PIP 環境,需要手動安裝下:
$ apt-get update
$ apt-get -y install python-pip
或
$ curl "https://bootstrap.pypa.io/get-pip.py" -o "get-pip.py"
$ python get-pip.py
$ pip --help
$ pip -V
PIP 安裝命令:
$ sudo pip install -U docker-compose
PIP 安裝之後,執行 Docker Compose 命令的時候,會出現下面錯誤:
$ docker-compose up Cannot open self /usr/local/bin/docker-compose or archive /usr/local/bin/docker-compose.pkg
解決方式,從官方源中手動下載安裝包,然後移動到制定目錄賦予許可權,命令如下:
$ cp -i docker-compose-Linux-x86_64 /usr/local/bin
$ mv docker-compose-Linux-x86_64 docker-compose
$ chmod +x /usr/local/bin/docker-compose
安裝好之後,我們就可以使用 Docker Compose 進行容器編排了,我們就拿之前做的 HelloDocker.Sample 專案做為示例。
我們在HelloDocker.Sample.Web
專案目錄下,建立docker-compose.yml
配置檔案,示例:
consul:
command: agent -bind=10.9.10.89 -client=0.0.0.0 -node=vagrant-ubuntu-xishuai -retry-join=10.9.2.236
image: consul:latest
ports:
- 8300:8300
- 8400:8400
- 8500:8500
- 8600:53/udp
net: host
fabio:
image: magiconair/fabio:latest
ports:
- 9999:9999
- 9998:9998
net: host
volumes:
- /etc/fabio/fabio.properties:/etc/fabio/fabio.properties
environment:
- SERVICE_9998_TAGS=urlprefix-/fabio
hello-docker:
ports:
- 54917:54917
build: .
net: host
其實看配置就明瞭了,一個專案中包含三個服務(consul
, fabio
和hell-docker
容器),Docker Compose 對這三個服務進行編排部署,我們執行docker-compose up
命令,啟動專案:
$ docker-compose up -d
Creating hellodockerweb_fabio_1 ...
Creating hellodockerweb_hello-docker_1 ...
Creating hellodockerweb_consul_1 ...
Creating hellodockerweb_fabio_1
Creating hellodockerweb_hello-docker_1
Creating hellodockerweb_consul_1 ... done
我們可以執行docker-compose ps
, 檢視執行的服務(容器):
$ docker-compose ps
Name Command State Ports
------------------------------------------------------------------------------
hellodockerweb_consul_1 docker-entrypoint.sh agent ... Up
hellodockerweb_fabio_1 /fabio -cfg /etc/fabio/fab ... Up
hellodockerweb_hello-docker_1 dotnet HelloDocker.Web.dll Up
或者執行docker-compose logs
,檢視日誌:
docker-compose logs
Attaching to hellodockerweb_consul_1, hellodockerweb_hello-docker_1, hellodockerweb_fabio_1
consul_1 | ==> Starting Consul agent...
consul_1 | ==> Consul agent running!
consul_1 | Version: 'v1.0.0'
consul_1 | Node ID: '521358bc-efc0-1a69-4a58-a9bfc8a9b09c'
consul_1 | Node name: 'vagrant-ubuntu-xishuai'
consul_1 | Datacenter: 'dc1' (Segment: '')
consul_1 | Server: false (Bootstrap: false)
consul_1 | Client Addr: [0.0.0.0] (HTTP: 8500, HTTPS: -1, DNS: 8600)
consul_1 | Cluster Addr: 10.9.10.89 (LAN: 8301, WAN: 8302)
consul_1 | Encrypt: Gossip: false, TLS-Outgoing: false, TLS-Incoming: false
consul_1 |
consul_1 | ==> Log data will now stream in as it occurs:
consul_1 |
consul_1 | 2017/11/21 04:41:25 [INFO] serf: EventMemberJoin: vagrant-ubuntu-xishuai 10.9.10.89
consul_1 | 2017/11/21 04:41:25 [INFO] agent: Started DNS server 0.0.0.0:8600 (tcp)
consul_1 | 2017/11/21 04:41:25 [INFO] agent: Started DNS server 0.0.0.0:8600 (udp)
consul_1 | 2017/11/21 04:41:25 [INFO] agent: Started HTTP server on [::]:8500 (tcp)
consul_1 | 2017/11/21 04:41:25 [INFO] agent: Retry join LAN is supported for: aws azure gce softlayer
consul_1 | 2017/11/21 04:41:25 [INFO] agent: Joining LAN cluster...
consul_1 | 2017/11/21 04:41:25 [INFO] agent: (LAN) joining: [10.9.2.236]
consul_1 | 2017/11/21 04:41:25 [WARN] manager: No servers available
consul_1 | 2017/11/21 04:41:25 [ERR] agent: failed to sync remote state: No known Consul servers
consul_1 | 2017/11/21 04:41:25 [INFO] serf: EventMemberJoin: agent_1 10.9.2.236
consul_1 | 2017/11/21 04:41:25 [INFO] serf: EventMemberJoin: windows64-xishuai 10.9.10.187
consul_1 | 2017/11/21 04:41:25 [INFO] agent: (LAN) joined: 1 Err: <nil>
consul_1 | 2017/11/21 04:41:25 [INFO] agent: Join LAN completed. Synced with 1 initial agents
consul_1 | 2017/11/21 04:41:25 [INFO] consul: adding server agent_1 (Addr: tcp/10.9.2.236:8300) (DC: dc1)
consul_1 | 2017/11/21 04:41:34 [INFO] agent: Synced service 'fabio-vagrant-ubuntu-trusty-9998'
hello-docker_1 | warn: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[35]
hello-docker_1 | No XML encryptor configured. Key {3d8c2a18-ed43-4df9-980f-8573175ebecf} may be persisted to storage in unencrypted form.
hello-docker_1 | Hosting environment: Production
hello-docker_1 | Content root path: /app
hello-docker_1 | Now listening on: http://[::]:54917
hello-docker_1 | Application started. Press Ctrl+C to shut down.
fabio_1 | 2017/11/21 04:41:25 [INFO] Setting log level to INFO
fabio_1 | 2017/11/21 04:41:25 [INFO] Runtime config
fabio_1 | {
fabio_1 | "Proxy": {
fabio_1 | "Strategy": "rnd",
fabio_1 | "Matcher": "prefix",
fabio_1 | "NoRouteStatus": 404,
fabio_1 | "MaxConn": 10000,
fabio_1 | "ShutdownWait": 0,
fabio_1 | "DialTimeout": 30000000000,
fabio_1 | "ResponseHeaderTimeout": 0,
fabio_1 | "KeepAliveTimeout": 0,
fabio_1 | "FlushInterval": 1000000000,
fabio_1 | "LocalIP": "10.0.2.15",
fabio_1 | "ClientIPHeader": "",
fabio_1 | "TLSHeader": "",
fabio_1 | "TLSHeaderValue": "",
fabio_1 | "GZIPContentTypes": null,
fabio_1 | "RequestID": ""
fabio_1 | },
fabio_1 | "Registry": {
fabio_1 | "Backend": "consul",
fabio_1 | "Static": {
fabio_1 | "Routes": ""
fabio_1 | },
fabio_1 | "File": {
fabio_1 | "Path": ""
fabio_1 | },
consul_1 | 2017/11/21 04:41:34 [WARN] agent: check 'service:8a600176-4c58-4edc-95af-71fc27345954' has deregister interval below minimum of 1m0s
consul_1 | 2017/11/21 04:41:34 [INFO] agent: Synced service '8a600176-4c58-4edc-95af-71fc27345954'
consul_1 | 2017/11/21 04:41:34 [INFO] agent: Synced service 'fabio-vagrant-ubuntu-trusty-9998'
consul_1 | 2017/11/21 04:41:35 [INFO] agent: Synced check 'service:fabio-vagrant-ubuntu-trusty-9998'
consul_1 | 2017/11/21 04:41:40 [INFO] agent: Synced check 'service:8a600176-4c58-4edc-95af-71fc27345954'
consul_1 | ==> Newer Consul version available: 1.0.1 (currently running: 1.0.0)
consul_1 | 2017/11/21 04:41:57 [WARN] memberlist: Refuting a suspect message (from: agent_1)
fabio_1 | "Consul": {
fabio_1 | "Addr": "10.9.10.89:8500",
fabio_1 | "Scheme": "http",
fabio_1 | "Token": "",
fabio_1 | "KVPath": "/fabio/config",
fabio_1 | "TagPrefix": "urlprefix-",
fabio_1 | "Register": true,
fabio_1 | "ServiceAddr": "10.9.10.89:9998",
fabio_1 | "ServiceName": "fabio",
fabio_1 | "ServiceTags": null,
fabio_1 | "ServiceStatus": [
fabio_1 | "passing"
fabio_1 | ],
fabio_1 | "CheckInterval": 1000000000,
fabio_1 | "CheckTimeout": 3000000000,
fabio_1 | "CheckScheme": "http",
fabio_1 | "CheckTLSSkipVerify": false
fabio_1 | },
fabio_1 | "Timeout": 10000000000,
fabio_1 | "Retry": 500000000
fabio_1 | },
fabio_1 | "Listen": [
fabio_1 | {
fabio_1 | "Addr": ":9999",
fabio_1 | "Proto": "http",
fabio_1 | "ReadTimeout": 0,
fabio_1 | "WriteTimeout": 0,
fabio_1 | "CertSource": {
fabio_1 | "Name": "",
fabio_1 | "Type": "",
fabio_1 | "CertPath": "",
fabio_1 | "KeyPath": "",
fabio_1 | "ClientCAPath": "",
fabio_1 | "CAUpgradeCN": "",
fabio_1 | "Refresh": 0,
fabio_1 | "Header": null
fabio_1 | },
fabio_1 | "StrictMatch": false,
fabio_1 | "TLSMinVersion": 0,
fabio_1 | "TLSMaxVersion": 0,
fabio_1 | "TLSCiphers": null
fabio_1 | }
fabio_1 | ],
fabio_1 | "Log": {
fabio_1 | "AccessFormat": "common",
fabio_1 | "AccessTarget": "",
fabio_1 | "RoutesFormat": "delta",
fabio_1 | "Level": "INFO"
fabio_1 | },
fabio_1 | "Metrics": {
fabio_1 | "Target": "",
fabio_1 | "Prefix": "{{clean .Hostname}}.{{clean .Exec}}",
fabio_1 | "Names": "{{clean .Service}}.{{clean .Host}}.{{clean .Path}}.{{clean .TargetURL.Host}}",
fabio_1 | "Interval": 30000000000,
fabio_1 | "Timeout": 10000000000,
fabio_1 | "Retry": 500000000,
fabio_1 | "GraphiteAddr": "",
fabio_1 | "StatsDAddr": "",
fabio_1 | "Circonus": {
fabio_1 | "APIKey": "",
fabio_1 | "APIApp": "fabio",
fabio_1 | "APIURL": "",
fabio_1 | "CheckID": "",
fabio_1 | "BrokerID": ""
fabio_1 | }
fabio_1 | },
fabio_1 | "UI": {
fabio_1 | "Listen": {
fabio_1 | "Addr": ":9998",
fabio_1 | "Proto": "http",
fabio_1 | "ReadTimeout": 0,
fabio_1 | "WriteTimeout": 0,
fabio_1 | "CertSource": {
fabio_1 | "Name": "",
fabio_1 | "Type": "",
fabio_1 | "CertPath": "",
fabio_1 | "KeyPath": "",
fabio_1 | "ClientCAPath": "",
fabio_1 | "CAUpgradeCN": "",
fabio_1 | "Refresh": 0,
fabio_1 | "Header": null
fabio_1 | },
fabio_1 | "StrictMatch": false,
fabio_1 | "TLSMinVersion": 0,
fabio_1 | "TLSMaxVersion": 0,
fabio_1 | "TLSCiphers": null
fabio_1 | },
fabio_1 | "Color": "light-green",
fabio_1 | "Title": "",
fabio_1 | "Access": "rw"
fabio_1 | },
fabio_1 | "Runtime": {
fabio_1 | "GOGC": 800,
fabio_1 | "GOMAXPROCS": 1
fabio_1 | },
fabio_1 | "ProfileMode": "",
fabio_1 | "ProfilePath": "/tmp"
fabio_1 | }
fabio_1 | 2017/11/21 04:41:25 [INFO] Version 1.5.3 starting
fabio_1 | 2017/11/21 04:41:25 [INFO] Go runtime is go1.9.2
fabio_1 | 2017/11/21 04:41:25 [INFO] Metrics disabled
fabio_1 | 2017/11/21 04:41:25 [INFO] Setting GOGC=800
fabio_1 | 2017/11/21 04:41:25 [INFO] Setting GOMAXPROCS=1
fabio_1 | 2017/11/21 04:41:25 [WARN] Error initializing backend. Get http://10.9.10.89:8500/v1/agent/self: dial tcp 10.9.10.89:8500: getsockopt: connection refused
fabio_1 | 2017/11/21 04:41:25 [INFO] consul: Connecting to "10.9.10.89:8500" in datacenter "dc1"
fabio_1 | 2017/11/21 04:41:25 [INFO] Admin server access mode "rw"
fabio_1 | 2017/11/21 04:41:25 [INFO] Admin server listening on ":9998"
fabio_1 | 2017/11/21 04:41:25 [INFO] Waiting for first routing table
fabio_1 | 2017/11/21 04:41:25 [INFO] consul: Using dynamic routes
fabio_1 | 2017/11/21 04:41:25 [INFO] consul: Using tag prefix "urlprefix-"
fabio_1 | 2017/11/21 04:41:25 [INFO] consul: Watching KV path "/fabio/config"
fabio_1 | 2017/11/21 04:41:34 [INFO] consul: Manual config changed to #3821244
fabio_1 | 2017/11/21 04:41:34 [INFO] HTTP proxy listening on :9999
fabio_1 | 2017/11/21 04:41:34 [INFO] Access logging disabled
fabio_1 | 2017/11/21 04:41:34 [INFO] Using routing strategy "rnd"
fabio_1 | 2017/11/21 04:41:34 [INFO] Using route matching "prefix"
fabio_1 | 2017/11/21 04:41:34 [INFO] consul: Health changed to #3821756
fabio_1 | 2017/11/21 04:41:34 [INFO] consul: Registered fabio with id "fabio-vagrant-ubuntu-trusty-9998"
fabio_1 | 2017/11/21 04:41:34 [INFO] consul: Registered fabio with address "10.9.10.89"
fabio_1 | 2017/11/21 04:41:34 [INFO] consul: Registered fabio with tags ""
fabio_1 | 2017/11/21 04:41:34 [INFO] consul: Registered fabio with health check to "http://[10.9.10.89]:9998/health"
fabio_1 | 2017/11/21 04:41:35 [INFO] Config updates
fabio_1 | + route add test /test http://10.9.2.236:23421/
fabio_1 | 2017/11/21 04:41:35 [INFO] consul: Health changed to #3821762
fabio_1 | 2017/11/21 04:41:40 [INFO] consul: Health changed to #3821765
fabio_1 | 2017/11/21 04:41:42 [INFO] Config updates
fabio_1 | + hello-docker /hello-docker http://10.9.10.89:54917/
fabio_1 | + route add
我們可以檢視 Consul UI 中的服務是否執行正常:
或者檢視 Fabio UI 中的服務是否存在(通過健康檢查後會出現):
YAML 配置命令
配置 | 說明 |
---|---|
build | 指定 Dockerfile 所在的目錄地址,用於構建映象,並使用此映象建立容器,比如上面配置的build: . |
command | 容器的執行命令 |
dns | 自定義 dns 伺服器 |
expose | 暴露埠配置,但不對映到宿主機,只被連線的服務訪問 |
extends | 對docker-compose.yml 的擴充套件,配置在服務中 |
image | 使用的映象名稱或映象 ID |
links | 連結到其它服務中的容器(一般橋接網路模式使用) |
net | 設定容器的網路模式(四種:bridge , none , container:[name or id] 和host ) |
ports | 暴露埠資訊,主機和容器的埠對映 |
volumes | 資料卷所掛載路徑設定 |
Docker Compose 常用命令
命令 | 說明 |
---|---|
docker-compose build | 構建專案中的映象,--force-rm :刪除構建過程中的臨時容器;--no-cache :不使用快取構建;--pull :獲取最新版本的映象 |
docker-compose up -d | 構建映象、建立服務和啟動專案,-d 表示後臺執行 |
docker-compose run ubuntu ls -d | 指定服務上執行一個命令,-d 表示後臺執行 |
docker-compose logs | 檢視服務容器輸出日誌 |
docker-compose ps | 列出專案中所有的容器 |
docker-compose pause [service_name] | 暫停一個服務容器 |
docker-compose unpause [service_name] | 恢復已暫停的一個服務容器 |
docker-compose restart | 重啟專案中的所有服務容器(也可以指定具體的服務) |
docker-compose stop | 停止執行專案中的所有服務容器(也可以指定具體的服務) |
docker-compose start | 啟動已經停止專案中的所有服務容器(也可以指定具體的服務) |
docker-compose rm | 刪除專案中的所有服務容器(也可以指定具體的服務),-f :強制刪除(包含執行的) |
docker-compose kill | 強制停止專案中的所有服務容器(也可以指定具體的服務) |
參考資料:
相關推薦
容器技術|Docker三劍客之docker-compose
stopped fig gecko osi epo 項目 tor html gen 三劍客簡介 docker-machine docker技術是基於Linux內核的cgroup技術實現的,那麽問題來了,在非Linux平臺上是否就不能使用docker技術了呢?答案是可以的,不
docker——三劍客之Docker Compose
編排(Orchestration)功能是複雜系統實現靈活可操作性的關鍵。特別是在Docker應用場景中,編排意味著使用者可以靈活的對各種容器資源實現定義和管理。作為Docker官方編排工具,Compose的重要性不言而喻,它可以讓使用者通過編寫一個簡單模板檔案,快速地建立和管理基於Docker容器地應用叢集。
Docker(四):Docker 三劍客之 Docker Compose
前兩篇文章我們介紹了 Dockerfile 的使用Docker(二):Dockerfile 使用介紹,我們知道使用一個 Dockerfile 模板檔案可以定義一個單獨的應用容器,如果需要定義多個容器就需要服務編排。服務編排有很多種技術方案,今天給大家介紹 Docker 官方產品 Docker Compose
docker三劍客之docker-compose(記官方案例)
簡介 Compose專案來源於之前的fig專案,使用python語言編寫,與docker/swarm配合度很高。 Compose 是 Docker 容器進行編排的工具,定義和執行多容器的應
Docker 三劍客之 Docker Compose
Docker Compose 專案是 Docker 官方的開源專案,負責實現對 Docker 容器叢集的快速編排,開源地址:https://github.com/docker/compose Docker Compose 中的兩個重要概念: 服務 (service):一個應用容器,實際上可以執行多個相同映象
docker三劍客之docker-machine
eval source grub info mod machine directory document driver #安裝docker-machine [email protected]/* */:~$ pwd /home/cupid [email
docker三劍客之docker swarm
sock war unix 發現 p地址 replica 機制 工作 behavior Swarm是什麽 Swarm這個項目名稱特別貼切。在Wiki的解釋中,Swarm behavior是指動物的群集行為。比如我們常見的蜂群,魚群,秋天往南飛的雁群都可以稱作Swarm b
Docker(六):Docker 三劍客之 Docker Swarm
lib ini 節點數 box 流量 虛擬 .html 刪除 解釋 實踐中會發現,生產環境中使用單個 Docker 節點是遠遠不夠的,搭建 Docker 集群勢在必行。然而,面對 Kubernetes, Mesos 以及 Swarm 等眾多容器集群系統,我們該如何選擇呢?它
Docker 三劍客之Docker Swarm
ons type src cati word rpm man mtp break Docker Swarm 介紹創建Docker Swarm集群1、使用docker machine ssh連接到想要成為manager node的那臺docker宿主機上。$ docker-m
docker——三劍客之Docker Machine
Docker Machine是Docker官方三劍客專案之一,負責使用Docker的第一步,在多種平臺上快速安裝Docker環境。它支援多種平臺,讓使用者在很短時間內搭建一套Docker主機叢集。Machine專案是Docker官方的開源專案,負責實現對Docker主機本身進行管理。Machine專案主要由G
Docker(五):Docker 三劍客之 Docker Machine
Docker Machine 介紹 Docker Machine 是 Docker 官方編排(Orchestration)專案之一,負責在多種平臺上快速安裝 Docker 環境。 Docker Machine 是一個工具,它允許你在虛擬宿主機上安裝 Docker Engine ,並使用 docker-mac
Docker 三劍客之 Docker Swarm(基於 overlay 組網通訊)
這一篇主要是對 Docker Swarm 的完善,增加基於 overlay 組網通訊,以便 Docker 容器可以跨主機訪問。 不同主機間的容器之間通訊方式,大概有三種: 使用埠對映:直接把容器的服務埠對映到主機上,主機直接通過映射出來的埠通訊。 把容器放到主機所在的網段:修改 docker 的 ip 分
Docker 三劍客之 Docker Swarm
閱讀目錄: Docker Machine 建立 Docker 主機 Docker Swarm 配置叢集節點 Docker Service 部署單個叢集服務 Docker Stack 部署多個叢集服務,以及 GUI 管理頁面 docker-machine、docker swarm、docker node、d
docker三劍客之一docker compose
http 定義 mpat com dir 服務 stopped start 包括 compose有兩個重要的概念: 服務(service):一個應用的容器,實際上可以包括若幹運行相同鏡像的容器實例 項目(project):由一組關聯的應用容器組成的一個完整業務單元,在d
Docker $ Docker 三劍客:Docker-Compose
一.Docker-Compose 簡介 簡介 1.Docker官方三劍客專案之一。 2.負責快速部署分散式應用。 3.定義和執行多個Docker容器應用。 4.微服務一般有多個例項,為了提高效率,使用Compose管理容器,無需每個微服務都要手動啟停。 功能
Docker $ Docker三劍客:Docker-Compose
一.Docker-Compose 簡介 簡介 1.Docker官方三劍客專案之一。 2.負責快速部署分散式應用。 3.定義和執行多個Docker容器應用。 功能 1.有時候,我們的一個專案由多個服
Docker學習之docker-compose
img 查看 直接 uname chm 存在 copy vol 最新 docker-compose 安裝 1.Mac/Windows: 安裝docker的時候附帶安裝了。 2.Linux: curl https://github.com/docker/compose Lin
Docker學習之Docker容器基本使用
rest 刪除 圖片 -c 容器 run bcd user git Docker學習之Docker容器基本使用 新建容器並啟動 命令格式:docker run --options repository:tag 後臺運行 命令格式:-d 已存在的容器相關操作 啟動:docke
docker 系列之 docker安裝
fss color 目前 ram 依賴包 san attribute -i 後臺服務 Docker支持以下的CentOS版本 CentOS 7 (64-bit) CentOS 6.5 (64-bit) 或更高的版本 前提條件 目前,CentOS 僅發行版本中的內核支持
Docker入門之docker的安裝
Docker初體驗 Docker 簡介 Docker有兩個版本: 社群版(CE) 企業版(EE) Docker Community Edition(CE)非常適合希望開始使用Docker並嘗試使用基於容器的應用程式的個人開發人員和小型團隊。 Docker企業版(EE)專為企業