思考
前面我們使用 Docker 的時候,定義 Dockerfile 文件,然后使用 docker build、docker run 等命令操作容器颁独。然而微服務架構(gòu)的應用系統(tǒng)一般包含若干個微服務,每個微服務一般都會部署多個實例,如果每個微服務都要手動啟停,那么效率之低,維護量之大可想而知
使用 Docker Compose 可以輕松、高效的管理容器,它是一個用于定義和運行多容器 Docker 的應用程序工具
什么是Docker Compose
Docker Compose 是 Docker 官方編排(Orchestration)項目之一,負責快速的部署分布式應用抗俄。
Docker Compose 簡介
Compose 項目是 Docker 官方的開源項目,負責實現(xiàn)對 Docker 容器集群的快速編排裹刮。從功能上看,跟 OpenStack 中的 Heat 十分類似盏混。
其代碼目前在 https://github.com/docker/compose 上開源蔚鸥。
Compose 定位是 「定義和運行多個 Docker 容器的應用(Defining and running multi-container Docker applications)」,其前身是開源項目 Fig。
通過第一部分中的介紹,我們知道使用一個 Dockerfile 模板文件,可以讓用戶很方便的定義一個單獨的應用容器许赃。然而,在日常工作中,經(jīng)常會碰到需要多個容器相互配合來完成某項任務的情況止喷。例如要實現(xiàn)一個 Web 項目,除了 Web 服務容器本身,往往還需要再加上后端的數(shù)據(jù)庫服務容器,甚至還包括負載均衡容器等。
Compose 恰好滿足了這樣的需求混聊。它允許用戶通過一個單獨的 docker-compose.yml 模板文件(YAML 格式)來定義一組相關(guān)聯(lián)的應用容器為一個項目(project)弹谁。
Compose 中有兩個重要的概念:
服務 (service):一個應用的容器,實際上可以包括若干運行相同鏡像的容器實例。
項目 (project):由一組關(guān)聯(lián)的應用容器組成的一個完整業(yè)務單元,在 docker-compose.yml 文件中定義句喜。
Compose 的默認管理對象是項目,通過子命令對項目中的一組容器進行便捷地生命周期管理预愤。
Compose 項目由 Python 編寫,實現(xiàn)上調(diào)用了 Docker 服務提供的 API 來對容器進行管理。因此,只要所操作的平臺支持 Docker API,就可以在其上利用 Compose 來進行編排管理咳胃。
Docker Compose 安裝與卸載
Compose 支持 Linux植康、macOS、Windows 10 三大平臺展懈。
Compose 可以通過 Python 的包管理工具 pip 進行安裝,也可以直接下載編譯好的二進制文件使用,甚至能夠直接在 Docker 容器中運行销睁。
Docker for Mac 供璧、Docker for Windows 自帶 docker-compose 二進制文件,安裝 Docker 之后可以直接使用。
Linux 系統(tǒng)安裝
二進制安裝(官方推薦)
從 官方 GitHub Release 處直接下載編譯好的二進制文件
Linux 64 位系統(tǒng)上直接下載對應的二進制包
curl -L https://github.com/docker/compose/releases/download/1.24.0-rc1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
卸載:rm /usr/local/bin/docker-compose
可能產(chǎn)生問題:
可以通過嘗試域名解析方式:
ping github-production-release-asset-2e65be.s3.amazonaws.com
得到ip 52.216.101.115
在linux的/etc/hosts上添加上以下一句,問題解決
52.216.101.115 github-production-release-asset-2e65be.s3.amazonaws.com
PIP 安裝(推薦此安裝)
#查看docker compose版本
docker-compose version
#查看pip版本
pip -v
#上一條語句沒有顯示版本信息則運行下面語句安裝 python-pip
yum -y install epel-release
yum -y install python-pip
#查看pip版本
pip -v
#pip進行升級
pip install --upgrade pip
如果不成功,因為源問題,請嘗試更改其它源進行下載(設置yum源)冻记。
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
#進行安裝compose 第一條語句報錯執(zhí)行第二條,執(zhí)行成功則跳過第二條
pip install docker-compose
pip install docker-compose --ignore-installed requests
#查看版本
docker-compose -version
默認會安裝到此目錄: /usr/local/bin/docker-compose
卸載
如果是二進制包方式安裝的,刪除二進制文件即可
sudo rm /usr/local/bin/docker-compose
如果是通過 pip 安裝的,則執(zhí)行如下命令即可刪除睡毒。
sudo pip uninstall docker-compose
Docker Compose 使用
術(shù)語
首先介紹幾個術(shù)語。
服務 (service):一個應用容器,實際上可以運行多個相同鏡像的實例冗栗。
項目 (project):由一組關(guān)聯(lián)的應用容器組成的一個完整業(yè)務單元演顾。
可見,一個項目可以由多個服務(容器)關(guān)聯(lián)而成,Compose 面向項目進行管理。
Docker-compose創(chuàng)建容器
通過一個單獨的 docker-compose.yml 模板文件(YAML 格式)來定義一組相關(guān)聯(lián)的應用容器為一個項目(project)贞瞒。
管理文件夾(創(chuàng)建相應目錄)
mkdir -p /usr/local/docker/tomcat
創(chuàng)建一個docker-compose.yml文件
version: '3'
services:
tomcat:
restart: always
image: tomcat
container_name: tomcat_qfjy
ports:
- 8080:8080
編寫 docker-compose.yml 文件,這個是 Compose 使用的主模板文件偶房。
啟動(執(zhí)行命令 創(chuàng)建容器)
docker-compose up -d
默認執(zhí)行的文件名:docker-compose.yml(且需要在當前上下文路徑中) 。如果說文件名不是默認的需要使用下面的指令:
docker-compose -f 文件名.后綴名 up –d
訪問tomcat服務主頁即可
Docker-Compse可以用來定義或運行復雜的容器
docker-compose 常用命令
build 構(gòu)建或重建服務
help 命令幫助
kill 殺掉容器
logs 顯示容器的輸出內(nèi)容
port 打印綁定的開放端口
ps 顯示容器
pull 拉取服務鏡像
restart 重啟服務
rm 刪除停止的容器
run 運行一個一次性命令
scale 設置服務的容器數(shù)目
start 開啟服務
stop 停止服務
up 創(chuàng)建并啟動容器
down
常用命令示例:
docker-compose up -d nginx 構(gòu)建啟動nignx容器
docker-compose exec nginx bash 登錄到nginx容器中
docker-compose down 刪除所有nginx容器,鏡像
docker-compose ps 顯示所有容器
docker-compose restart nginx 重新啟動nginx容器
docker-compose run --no-deps --rm php-fpm php -v 在php-fpm中不啟動關(guān)聯(lián)容器,并容器執(zhí)行php -v 執(zhí)行完成后刪除容器
docker-compose build nginx 構(gòu)建鏡像 军浆。
docker-compose build --no-cache nginx 不帶緩存的構(gòu)建。
docker-compose logs nginx 查看nginx的日志
docker-compose logs -f nginx 查看nginx的實時日志
docker-compose config -q 驗證(docker-compose.yml)文件配置,當配置正確時,不輸出任何內(nèi)容,當文件配置錯誤,輸出錯誤信息挡闰。
docker-compose events --json nginx 以json的形式輸出nginx的docker日志
docker-compose pause nginx 暫停nignx容器
docker-compose unpause nginx 恢復ningx容器
docker-compose rm nginx 刪除容器(刪除前必須關(guān)閉容器)
docker-compose stop nginx 停止nignx容器
docker-compose start nginx 啟動nignx容器
Docker Compose 部署
tomcat
創(chuàng)建項目目錄
mkdir –p /usr/local/docker/qfjy_exam
該當目錄下創(chuàng)建docker-compose.yml
vim docker-compose.yml
Mysql參考:https://www.cnblogs.com/mmry/p/8812599.html
分別查看安裝tomcat和mysql的數(shù)據(jù)卷信息乒融。
version: '3'
services:
tomcat:
restart: always
image: tomcat
container_name: exam_tomcat
ports:
- 8080:8080
volumes:
- /usr/local/docker/qfjy_exam/ROOT:/usr/local/tomcat/webapps/ROOT
mysql
創(chuàng)建項目目錄
mkdir –p /usr/local/docker/mysql
數(shù)據(jù)庫
/var/lib/docker/volumes
version: '3'
services:
mysql:
restart: always
image: mysql:5.6
container_name: mysql5.6
ports:
- 3306:3306
environment:
TZ: Asia/Shanghai
MYSQL_ROOT_PASSWORD: 密碼
volumes:
- mysql-data:/var/lib/mysql
volumes:
mysql-data: