Docker Compose簡介
Docker Compose是什么
? Compose 是Docker公司推出的一個(gè)工具軟件,可以管理多個(gè)Dokcer容器組成一個(gè)應(yīng)用。你需要定義一個(gè)YAML格式的配置文件 docker-compose.yml
,寫好多個(gè)容器之間的調(diào)用關(guān)系。然后,只要一個(gè)命令,就能同時(shí)啟動(dòng)/關(guān)閉這些容器
簡單來說,Docker Compose 是Docker官方的開源項(xiàng)目,負(fù)責(zé)實(shí)現(xiàn)Docker容器集群的快速編排。
Docker Compose能干嘛
? Docker建議我們每一個(gè)容器實(shí)例只運(yùn)行一個(gè)服務(wù),業(yè)務(wù)docker容器本身占用資源極少,所以最好是將每個(gè)服務(wù)單獨(dú)的分隔開來,但是這樣我們又面臨了一個(gè)問題:
如果我們需要同時(shí)部署好多服務(wù),難道要每個(gè)服務(wù)單獨(dú)寫Dockerfile,然后構(gòu)建鏡像、構(gòu)建容器嗎?這樣豈不累死,所以Docker官方給我們提供了docker-compose多服務(wù)部署的工具
? Compose允許用戶通過一個(gè)單獨(dú)的 docker-compose.yml 模板(YAML格式)來定義一組相關(guān)聯(lián)的應(yīng)用容器為一個(gè)項(xiàng)目(project)
可以很容易地用一個(gè)配置文件定義一個(gè)多容器的應(yīng)用,然后使用一條指令安裝這個(gè)應(yīng)用所以的依賴,完成構(gòu)建。docker-compose 解決了容器與容器之間如何管理編排的問題
Docker Compose 下載安裝
Docker Compose 官方文檔 https://docs.docker.com/compose/compose-file/compose-file-v3/
Docker Compose 下載地址 https://docs.docker.com/compose/install/
安裝步驟
[root@nhk ~]# sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 或者
[root@nhk ~]# sudo wget https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m) -O /usr/local/bin/docker-compose
# 授予執(zhí)行權(quán)限
[root@nhk ~]# chmod +x /usr/local/bin/docker-compose
[root@nhk ~]#
驗(yàn)證安裝是否成功
[root@nhk ~]# docker-compose --version # 您應(yīng)該能夠看到 Docker Compose 的版本信息
Docker Compose version v2.19.1
?
卸載步驟
如果您無法成功下載 Docker Compose 或者想要卸載 Docker Compose,可以使用如下步驟:
如果你是使用 curl 安裝的,則使用下面命令卸載
1)刪除 Docker Compose 的二進(jìn)制文件
sudo rm /usr/local/bin/docker-compose
2)驗(yàn)證 Docker Compose 是否已成功卸載
docker-compose --version
如果您看到類似 “command not found” 的錯(cuò)誤消息,則表示 Docker Compose 已成功卸載。
Compose 核心概念
- 一文件
docker-compose.yml
- 兩要素
服務(wù)(service):一個(gè)個(gè)應(yīng)用容器實(shí)例,比如訂單微服務(wù)、庫存微服務(wù)、MySQL容器、nginx容器、redis容器等
工程(project):由一組關(guān)聯(lián)應(yīng)用容器組成的一個(gè)完整業(yè)務(wù)單元,在docker-compose.yml 文件中定義
Compose使用三步驟
- 編寫Dockerfile 定義各個(gè)微服務(wù)應(yīng)用并構(gòu)建出對(duì)應(yīng)的鏡像文件
- 使用 docker-compose.yml 定義一個(gè)完整業(yè)務(wù)單元,安排好整體應(yīng)用中的各個(gè)容器服務(wù)。
- 最后,執(zhí)行docker-compose.yml up 命令,啟動(dòng)并運(yùn)行整個(gè)應(yīng)用程序,完成一鍵部署上線
Compose 常用命令
查看幫助
docker-compose -h
啟動(dòng)所有docker-compose服務(wù)。啟動(dòng)容器。如果不存在,將會(huì)構(gòu)建鏡像
docker-compose up
啟動(dòng)所有docker-compose服務(wù)并后臺(tái)運(yùn)行
docker-compose up -d
停止并刪除容器、網(wǎng)絡(luò)、卷、鏡像
docker-compose down
進(jìn)入容器實(shí)例內(nèi)部 docker-compose exec docker-compose.yml 文件中寫的服務(wù)id /bin/bash
docker-compose exec yml里面的服務(wù)id
展示當(dāng)前docker-compose編排過的運(yùn)行的所有容器
docker-compose ps
展示當(dāng)前docker-compose編排過的容器進(jìn)程
docker-compose top
查看容器輸出日志
docker-compose logs yml里的服務(wù)id
檢查設(shè)置
docker-compose config
檢查設(shè)置,有問題才輸出(若無輸出,則證明docker compose文件基本編寫正確)
docker-compose config -q
重啟服務(wù)
docker-compose restart
啟動(dòng)服務(wù)
docker-compose start
停止服務(wù)
docker-compose stop
以下是一個(gè)簡單的 Docker Compose 示例文件 docker-compose.yml
,用于啟動(dòng)一個(gè)包含 Web 應(yīng)用和數(shù)據(jù)庫的容器:
version: '3'
services:
web:
build: .
ports:
- 8080:80
depends_on:
- db
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: myapp
? 在上面的示例中,定義了兩個(gè)服務(wù):web
和 db
。web
服務(wù)使用當(dāng)前目錄中的 Dockerfile 構(gòu)建鏡像,并將容器的 80 端口映射到主機(jī)的 8080 端口。web
服務(wù)還依賴于 db
服務(wù),即 web
服務(wù)會(huì)在 db
服務(wù)啟動(dòng)之后才啟動(dòng)。文章來源:http://www.zghlxwxcb.cn/news/detail-697547.html
? 要使用 Docker Compose 啟動(dòng)這個(gè)應(yīng)用程序,只需在包含 docker-compose.yml
文件的目錄中運(yùn)行 docker-compose up
命令即可。Docker Compose 將會(huì)自動(dòng)創(chuàng)建和啟動(dòng)這兩個(gè)容器,并將它們連接在一起。文章來源地址http://www.zghlxwxcb.cn/news/detail-697547.html
docker-compose.yml文件實(shí)例解讀
version: '3' # Docker Compose 文件格式的版本 3
services:
microService: # 服務(wù)名,可隨意定義
image: nhk_docker:1.6 # 鏡像名:TAG
container_name: ms01 # 容器名稱(相當(dāng)于命令 --name ms01)
ports:
- "6001:6001"
volumes: # 容器數(shù)據(jù)卷
- namenode:/hadoop/dfs/name
networks:
- clear_net
depends_on: # 定義服務(wù)之間的依賴關(guān)系,當(dāng)一個(gè)服務(wù)依賴于其他服務(wù)時(shí),Docker Compose 會(huì)按照 depends_on 中定義的順序來啟動(dòng)服務(wù)。只有在所依賴的服務(wù)都已經(jīng)啟動(dòng)并且健康時(shí),才會(huì)啟動(dòng)當(dāng)前的服務(wù),需要注意的是,depends_on 并不能保證依賴的服務(wù)一定會(huì)在當(dāng)前服務(wù)之前啟動(dòng)完成。它只是定義了啟動(dòng)順序,并不能檢查服務(wù)的健康狀態(tài)或等待服務(wù)完全啟動(dòng)。
- redis
- mysql
reids:
image: reids:6.0.8 # 鏡像名:TAG
container_name: redis01
ports:
- "6379:6379"
volumes: # 容器數(shù)據(jù)卷
- /app/redis/redis.conf:/etc/redis/redis.conf
- /app/redis/data:/data
networks:
- clear_net
command: redis-server /etc/redis/redis.conf
mysql:
image: mysql:5.7 # 鏡像名:TAG
container_name: ms01 # 容器名稱
environment:
MYSQL_ROOT_PASSWORD: '123456'
MYSQL_ALLOW_EMPTY_PASSWORD: 'on'
MYSQL_DATABASE: 'db01'
MYSQL_USER: 'nhk'
MYSQL_PASSWORD: '123456'
ports:
- "3306:3306"
volumes: # 容器數(shù)據(jù)卷
- /app/mysql/db:/var/lib/mysql
- /app/mysql/conf/my.cnf:/etc/my.cnf
- /app/mysql/init:/docker-entrypoint-initdb.d
networks:
- clear_net
command: --defalut-authentication-plugin=mysql_native_password # 解決外部無法訪問
networks:
clear_net:
到了這里,關(guān)于04-docker compose容器編排的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!