使用現有的docker進行部署存在問題
我們之前在Docker容器中安裝了nginx、mysql、es、redis等等一些容器,然后每次我需要先啟動redis、mysql、es、nginx之后才能啟動我們的項目,因為容器之間可能存在某種依賴,需要按一定的順序啟動,比如Kibana容器依賴於es容器,es容器需要先啟動。當容器啟動完畢我們才能運行起來項目。如果容器數量特別多的話啟動更加麻煩。
假如需要將這些服務部署到另一個服務器,但是不知道到底用到了Docker里面具體的哪一些容器,沒有辦法只能把容器全部復制過去,沒法對一個項目的容器進行管理。
Docker-Compose簡介
Compose項目是Docker官方的開源項目。負責實現對Docker容器集群的快速編排,對多個容器進行編排,將一組相關聯的容器放在一起,可以理解為它將你項目用到的所有容器按照你指定的啟動順序設置成一個文件,然后一次就可以啟動。
與Dockerfile不同的是,Dockerfile模版文件是讓用戶定義一個單獨運行的容器,而Compose是多個容器相互配合完成某一個任務的情況。比如要實現一個Web項目,里面除了Web容器本身之外還有數據庫、負載均衡容器等等。
定義方式
允許用戶通過一個單獨的docker-compose.yml模版文件來定義一組相關聯的應用容器為一個項目。
里面有兩個重要概念:
- 項目:一組相關聯的應用容器組成的一個完整的業務單元。可以理解為你項目中的多個容器組成了一個項目
- 服務:一個應用容器里面可以包含若干運行相同鏡像的容器實例。可以理解項目中的每一個容器都稱之為服務,多個容器就是多個服務,只是這里面的叫法名稱變了而已。
只要操作平台支持Docker就可以用Compose來進行編排管理。
安裝卸載
1、登入官方地址下載指定版本,官方地址為:https://github.com/docker/compose/releases
下載完之后上傳到服務器的/usr/local/bin目錄下
給它一個執行權限
sudo chmod +x /usr/local/bin/docker-compose
2、直接從服務器下載
curl -L https://github.com/docker/compose/releases/download/2.2.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
后續步驟同上
docker-compose -v #查看是否安裝成功
案例
1、創建一個目錄
mkdir ems
2、在ems目錄創建一個docker-compose.yml 模版文件
3、編寫docker-compose.yml
#docker-compose項目版本號
version: "3.8"
services:
centos01: #自定義的服務的名稱
image: tomcat:latest #代表使用哪一個鏡像 latest表示版本號
ports: #代表主機和容器中的端口映射
- 8082:8080
version:docker-compose和docker版本對應,先查看docker版本
docker版本20.10.+,所以對應docker-compose的3.8版本
4、啟動docker-compose一組服務
docker-compose up
表示啟動成功
5、還可以在里面繼續增加容器redis,指定
#docker-compose項目版本號
version: "3.8"
services:
centos01: #自定義的服務的名稱
image: tomcat:latest #代表使用哪一個鏡像
ports: #代表主機和容器中的端口映射
- 8082:8080
redis01:
image: redis:latest #指定了redis的鏡像
ports:
- 6379:6379
兩個都啟動成功
更多配置
environment:代表給當前容器啟動指定環境,類似於docker run -e MYSQL_ROOT_PASSWORD=root
Volumes:代表給當前容器和主機指定數據卷,類似於 docker run -v 注意 這里數據卷的路徑必須先創建
#docker-compose項目版本號
version: "3.8"
services:
centos01: #自定義的服務的名稱
image: tomcat:latest #代表使用哪一個鏡像
ports: #代表主機和容器中的端口映射
- 8082:8080
redis01:
image: redis:latest
ports:
- 6379:6379
mysql01:
image: mysql:latest
ports:
- 3306:3306
environment:
- "MYSQL_ROOT_PASSWORD=root"
volumes:
- /root/mysqldata:/var/lib/mysql
啟動之后服務運行狀態
這里的Names是自動取的別名,可以在里面增加container_name給容器指定別名
以及mysql掛載的數據卷都有顯示