docker?compose快速開始超詳細教程
docker compose快速開始
一、什么是docker compose
官方:https://docs.docker.com/compose/
docker-compose是基于docker的開源項目,托管于github上,由python實現(xiàn),調(diào)用 docker服務(wù)的API負責實現(xiàn)對docker容器集群的快速編排,即通過一個單獨的yaml文件,來定義一組相關(guān)的容器來為一個項目服務(wù)。
Compose 項目是 Docker 官方的開源項目,負責實現(xiàn)對 Docker 容器集群的快速編排。從功能上看,跟 OpenStack 中的 Heat 十分類似。
快速編排:站在項目角度將一組相關(guān)聯(lián)容器整合在一起,對這組容器按照指定順序進行啟動。
Compose 允許用戶通過一個單獨的 docker-compose.yml 模板文件(YAML格式)來定義一組相關(guān)聯(lián)的應(yīng)用容器為一個項目(project)。
這里涉及2個重要的概念:
- 服務(wù)(service):一個應(yīng)用的容器,實際上可以包括若干運行相同鏡像的容器實例。
- 項目(project):由一組關(guān)聯(lián)的應(yīng)用容器組成的一個完整業(yè)務(wù)單元,在docker-compose.yml文件中定義。
Compose 的默認管理對象是項目,通過子命令對項目中的一組容器進行便捷地生命周期管理。
Compose 項目由 Python編寫,實現(xiàn)上調(diào)用了Docker服務(wù)提供的API來對容器進行管理。因此,只要所操作的平臺支持 Docker APl,就可以在其上利用Compose來進行編排管理。
1. Compose 特性
在單獨的主機上提供多個相互隔離的環(huán)境
Compose 用項目名稱來隔離不同的環(huán)境,在沒有設(shè)置項目名稱的情況下,Compose 會用 docker-compose.yml 文件所在根目錄名稱做為項目名稱。
每個項目有自己的 Docker network,不同項目的 Docker network 彼此不通。
在單個主機上建立多個隔離環(huán)境,Compose 使用項目名稱將環(huán)境彼此隔離。您可以在多個不同的上下文中使用此項目名稱。默認項目名稱是項目目錄的基本名稱。您可以使用-p 命令行選項或 COMPOSE_PROJECT_NAME 環(huán)境變量設(shè)置自定義項目名稱 。默認項目目錄是 Compose 文件的基本目錄??梢允褂?ndash;project-directory 命令行選項自定義項目目錄。
在創(chuàng)建容器時,自動保存 volume 數(shù)據(jù)
Compose 在啟動容器時,會自動保存 volume。當我們用 docker-compose down 刪掉容器后,再用 docker-compose up 啟動時,之前 volume 會自動掛載到新建的容器中。
只重建有改動的容器
當 docker-compose.yml 中的某個容器有改動時,用 Compose 重啟項目,改動的容器會重新生成,沒有改動的容器則保持不變。
僅重新創(chuàng)建已更改的容器,當您重新啟動未更改的服務(wù)時,Compose 會使用現(xiàn)有容器。
可以使用變量
變量在環(huán)境之間組合重復使用.
Compose 支持在 docker-compose.yml 中使用變量,可以通過設(shè)置變量來配合不同的使用環(huán)境。
2. 使用 Compose 步驟和思路
- 使用 Dockerfile 定義您的應(yīng)用程序的環(huán)境
- 使用 docker-compose.yml 定義組成您的應(yīng)用程序的服務(wù)
- 使用 docker-compose.yml 定義構(gòu)成應(yīng)用程序的服務(wù),這樣它們可以在隔離環(huán)境中一起運行。
- 運行docker compose up啟動并運行程序
- 最后,執(zhí)行 docker-compose up 命令來啟動并運行整個應(yīng)用程序。
Compose 允許用戶通過一個單獨的 docker-compose.yml 模板文件(YAML格式)來定義一組相關(guān)聯(lián)的應(yīng)用容器為一個項目(project)。
二、docker-compose常用命令
docker-compose # 拉取鏡像
docker-compose up -d nginx # 運行nginx容器
docker-compose up -d # 運行所有容器
docker-compose ps # 查看容器運行狀態(tài)
docker-compose down # 停止容器和容器網(wǎng)絡(luò)
docker-compose rm nginx # 刪除nginx容器
docker-compose run yaml中定義的服務(wù)名 命令 #在指定服務(wù)上運行一個命令
默認情況下,docker-compose up啟動的容器都在前臺,控制臺將會同時打印所有容器的輸出信息,可以很方便進行調(diào)試。當通過Ctrl+c停止命令時,所有容器將會停止。
如果希望在后臺啟動并運行所有的容器,使用docker-compose up -d
。
總結(jié): 批量啟動時, docker-compose up -d 比較常用!
三、docker compose 安裝
只有 Linux 平臺上在安裝docker時沒有安裝docker-compose,windows、macos平臺安裝docker時會自動安裝docker-compose。
apt install python3-pip sudo pip install -U docker-compose
四、docker-compose.yml 基礎(chǔ)
【推薦】詳解docker-compose.yml文件常用模版命令
參考URL:http://www.dbjr.com.cn/article/229685.htm
Docker Compose配置文件docker-compose.yml
是Docker Compose的核心,用于定義服務(wù)、網(wǎng)絡(luò)和數(shù)據(jù)卷。格式為YAML,默認路徑為./docker-compose.yml,可以使用.yml或.yaml擴展名,目前Compose配置文件格式的最新版本為V3。Compose配置文件中涉及的配置項也比較多,但大部分配置項的含義跟docker run命令相關(guān)選項是類似的。
- services
一個service代表一個container,這個container可以從dockerhub的image來創(chuàng)建,或者從本地的Dockerfile build出來的image來創(chuàng)建。
service的啟動類似docker run,我們可以給其指定network和volme,所以可以給service指定network和volume的引用
- networks
- volumes
官方示例:https://docs.docker.com/compose/compose-file/
(External user) --> 443 [frontend network] | +--------------------+ | frontend service |...ro...<HTTP configuration> | "webapp" |...ro...<server certificate> #secured +--------------------+ | [backend network] | +--------------------+ | backend service | r+w ___________________ | "database" |=======( persistent volume ) +--------------------+ \_________________/
示例應(yīng)用程序由以下部分組成:
- 2 個服務(wù),由 Docker 鏡像支持:webapp和database
- 1 個密鑰(HTTPS 證書),注入前端
- 1個配置(HTTP),注入前端
- 1 個持久卷,附加到后端
- 2 個網(wǎng)絡(luò)
services: frontend: image: awesome/webapp ports: - "443:8043" networks: - front-tier - back-tier configs: - httpd-config secrets: - server-certificate backend: image: awesome/database volumes: - db-data:/etc/data networks: - back-tier volumes: db-data: driver: flocker driver_opts: size: "10GiB" configs: httpd-config: external: true secrets: server-certificate: external: true networks: # The presence of these objects is sufficient to define them front-tier: {} back-tier: {}
此示例說明了volumes
、configs
和secrets
之間的區(qū)別。雖然它們都作為掛載的文件或目錄暴露給服務(wù)容器,但只有一個卷可以配置為讀寫訪問。secrets
和configs
是只讀的。volumes
配置允許您選擇卷驅(qū)動程序并傳遞驅(qū)動程序選項以根據(jù)實際基礎(chǔ)架構(gòu)調(diào)整卷管理。Configs 和 Secrets 依賴于平臺服務(wù),并且被聲明external
為它們不作為應(yīng)用程序生命周期的一部分進行管理:Compose 實現(xiàn)將使用特定于平臺的查找機制來檢索運行時值。
五、工作常用技巧
docker-compose或docker run 啟動容器后就退出
問題背景:
啟動容器:docker-compose up -d
查看容器運行情況:docker-compose ps
結(jié)果容器并沒有運行,運行 docker-compose ps -a 命令發(fā)現(xiàn),容器在啟動后短時間內(nèi)又停止了
問題描述總結(jié):docker-compose 啟動容器后就退出,查看日志沒有報錯。
問題分析:
Docker容器后臺運行,就必須有一個前臺進程.容器運行的命令如果不是那些一直掛起的命令(比如運行top,tail),就是會自動退出的。
docker 容器的生命周期是同容器中的前臺進程相關(guān)的,如果容器內(nèi)沒有前臺進程,容器就會自動停止。
Docker Compose解決方案:
方案一:自己啟動一個前臺進程tail -F anything
Docker Compose保持容器運行
要使容器在啟動時保持運行docker-compose,請使用以下命令
command: tail -F anything
version: "3.8" services: web: image: "centos-test:v5" command: bash -c "/etc/init.d/xxx start && tail -f /var/log/meesage.log"
容器解決方案:
tail -F anything 或
docker run 加上這個開機重啟參數(shù):–restart always -d
方案二:在 docker-compose 中添加 tty: true 關(guān)鍵字
version: '3' services: web: container_name: node_web build: context: . volumes: - ./:/home/node/app ports: - 8888:8080 tty: true
tty: true 的作用是為容器分配一個偽終端,就相當于 docke run -t, 我的理解是這樣就是把 /bin/bash 當做前臺進程
docker-compose一個應(yīng)用啟動多個節(jié)點
我們目前的docker-compose 中的service容器中各自只有一個,通過scale可以去擴展service。
例如將web服務(wù)的數(shù)量變?yōu)槿齻€:
docker-compose up --scale web=3 -d
1.docker-compose.yml配置
version: “3”
services:
web:
image: nginx:1.19.9-alpine
restart: always
ports:
80-81:80
2.啟動服務(wù)
docker-compose up -d --scale web=2
3.查看應(yīng)用狀態(tài)
docker-compose ps
使用Docker-Compose,如何執(zhí)行多個命令
scale參數(shù)官方說明: https://docs.docker.com/compose/reference/scale/
實戰(zhàn)demo:
version: "3.8" services: web: image: "centos-test:v1" command: bash -c "/etc/init.d/xxx start && tail -f /var/log/message.log" init: true
到此這篇關(guān)于docker compose快速開始的文章就介紹到這了,更多相關(guān)docker compose開始內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Docker安裝阿里云服務(wù)器和在虛擬機安裝遇到的坑(問題小結(jié))
這篇文章主要介紹了Docker安裝阿里云服務(wù)器和在虛擬機安裝遇到的坑,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-03-03Docker安裝方法與Docker四種網(wǎng)絡(luò)模式詳解
今天小編就為大家分享一篇關(guān)于Docker安裝方法與Docker四種網(wǎng)絡(luò)模式的詳解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-09-09Docker安裝ELK并實現(xiàn)JSON格式日志分析的方法
這篇文章主要介紹了Docker安裝ELK并實現(xiàn)JSON格式日志分析的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-10-10harbor可視化私有鏡像倉庫環(huán)境及服務(wù)部署示例
這篇文章主要為大家介紹了harbor可視化私有鏡像倉庫環(huán)境及服務(wù)部署示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪2022-04-04Docker Swarm結(jié)合Docker Compose部署集群的實現(xiàn)
本文主要介紹了Docker Swarm結(jié)合Docker Compose部署集群的實現(xiàn),通過部署和配置幫助讀者更好地理解并應(yīng)用這些工具,感興趣的可以了解一下2023-12-12