docker-compose(Docker服務編排)
docker 服務編排
docker 服務編排也叫docker compose,它的出現是應來解決使用docker部署大型應用的業務場景的問題。通常在生產環境中,使用docker部署一個應用需要使用多個容器,例如部署前端、後端、依賴服務、資料庫等。如果每個容器都需要手工使用shell來啟動則效率過於低下,所以在這樣的場景中,我們可以採用docker compose來進行docker容器的編排工作。
docker-compose.yml檔案的編寫
在docker-compose.yml檔案中可以編寫相關的配置屬性,用來管理compose的構建過程,主要的屬性包括:
1)version 代表compose檔案格式版本,按照官網的例項,建議目前採用‘3.9’版本
2)services 該屬性是compose檔案中的核心屬性,在該屬性之下,可以配置compose啟動的各種服務。主要是需要compose啟動的各種容器資訊。也是compose檔案中主要的開發內容。
常用屬性:
屬性名稱 說明
image 當前服務使用什麼映象檔案
ports 當前容器需要對映的埠資訊 - ”8080:80“
enviroments 當前映象需要傳遞的引數
volumes 當前映象的掛在點
tty:true 代表使用-it模式啟動服務
build 指定dockerfile所在的路徑,當使用docker compose編排一個容器,而且該容器需要構建的時候需要使用該引數
container_name 指定編排容器的名稱
restart:always 在docker服務重啟後,該容器是否自動重啟
depends_on: 服務名 設定服務依賴關係,通過該配置可以決定服務的啟動順序
env_file 指定配置檔案
context 指定上下文
dockerfile 指定需要使用的dockerfile檔案
docker-compose命令
docker-compose up命令來啟動一個容器編排,接下來,我們詳細瞭解一下,在docker-compose中常用的命令以及引數使用
docker-compose命令
常用引數:
-f 預設docker-compose會在當前資料夾下詢招Dockercompose.yml檔案,如果需要自定義檔名,可以使用-f 檔名 形式來指定
-p 指定專案名稱 指定專案後,通過compoose建立的所有容器都會自動新增專案名稱字首
-v 檢視當前docker-compose的版本資訊
docker-compose 環境變數
docker compose 預設的環境變數為.env,在其中我們可以使用對應的鍵值對模式給compose傳遞值 --env-file 引數可以動態制動compose需要使用的配置檔案位置
docker-compose up 啟動一個容器編排
常用引數: `
引數名稱 說明
-d 後臺執行
–force-recreate 強制更新已經存在的容器
–remove-orphans 刪除在compose檔案中沒有定義的容器,通常使用在修改了compose檔案的場景下使用服務名 單獨啟動compose中的某一個服務,如果服務存在依賴,則被依賴的服務也會被啟動
docker-compose down 刪除對應的容器,網路服務
docker-compose stop 停止compose對應的所有服務
docker-compose start 啟動所有的服務容器
docker-compose ps 檢視與當前compse相關的服務容器
-q 只列出id值,其他值不顯示
docker-compose logs 讀取日誌資訊
docker-compose pull 拉取服務對應的映象
docker-compose build 構建compose中的所有映象、
docker-compose images 檢視所有的映象資訊
docker-compose config 檢視配置檔案資訊
docker-compose restart 重啟服務
docker-compose exec 服務名 進行指定服務的容器
docker-compose rm 刪除所有已經停止的服務容器
以上命令涉及到某個服務的時候均可以通過:命令:服務名對相應的服務進行操作 看左面
docker compose 網路管理
1. 預設場景下,使用docker compose編排服務,會自動建立對應的網路。可以使用docker network ls
2. 以及docker inspect 網路id 進行相關的查詢。
可以在compose檔案中,使用networks
定義一個網路,並在服務中使用networks屬性加入一個自定義網路。這時候有三種結果,如果所有的服務都加入到了自定義網路,則docker,會建立自定義網路,並將所有的服務容器新增到對應的網路中,如果沒有任何服務宣告加入自定義網路,則docker會建立預設網路,然後將容器新增到預設網路,而不會建立自定義網路,如果有的服務宣告新增到自定義網路,而有的服務沒有宣告,則docker會建立兩個網路,一個是自定義網路,而另一個是預設網路,並將對應的容器新增到對應的網路中。
3. 使用固定ip策略
version: '3.3' services: cslcp_web: image: "cslcp_web_image:v01" ports: - "19090:8080" build: context: "../web/" dockerfile: "Dockerfile" networks: - "cslcp_net" cslcp_mysql: image: "mysql" networks: cslcp_net: ipv4_address: 192.168.13.100 ports: - "13306:3306" environment: MYSQL_ROOT_PASSWORD: 'root' cslcp_centos: container_name: 'test_centos' image: "centos" tty: true networks: cslcp_net: ipv4_address: 192.168.13.11 networks: cslcp_net: ipam: config: - subnet: "192.168.13.0/24" gateway: "192.168.13.1"
- 使用服務策略
當compose啟動成功後可以直接使用ping 訪問服務名 - 使用網路別名策略
networks: cslcp_net: ipam: config: - gateway: 192.168.13.1 subnet: 192.168.13.0/24 services: cslcp_centos: container_name: test_centos depends_on: cslcp_web: condition: service_started image: centos links: - cslcp_web:cw networks: cslcp_net: ipv4_address: 192.168.13.11 tty: true cslcp_mysql: environment: MYSQL_ROOT_PASSWORD: root image: mysql networks: cslcp_net: ipv4_address: 192.168.13.100 ports: - published: 13306 target: 33064 cslcp_web: build: context: /root/docker/dockercompose/cslcp/web dockerfile: Dockerfile image: cslcp_web_image:v01 networks: cslcp_net: null ports: - published: 19090 target: 8080 version: '3.3'
- 使用container 策略
version: '3.3' services: cslcp_web: image: "cslcp_web_image:v01" build: context: "../web/" dockerfile: "Dockerfile" depends_on: - "cslcp_centos" network_mode: "service:cslcp_centos" cslcp_mysql: image: "mysql" environment: MYSQL_ROOT_PASSWORD: 'root' depends_on: - "cslcp_centos" network_mode: "service:cslcp_centos" cslcp_centos: container_name: 'test_centos' image: "centos" tty: true ports: - "17070:8080" - "13306:3306" networks: cslcp_net: ipv4_address: 192.168.13.11 networks: cslcp_net: ipam: config: - subnet: "192.168.13.0/24" gateway: "192.168.13.1"
鳴謝:
https://blog.csdn.net/ayhg1/article/details/118066576
https://www.cnblogs.com/cwsheng/p/13944281.html