溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Docker Compose方法怎么使用

發(fā)布時(shí)間:2021-12-13 11:44:45 來(lái)源:億速云 閱讀:140 作者:iii 欄目:云計(jì)算

這篇文章主要介紹“Docker Compose方法怎么使用”,在日常操作中,相信很多人在Docker Compose方法怎么使用問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”Docker Compose方法怎么使用”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

開發(fā)環(huán)境組件信息

  • nginx proxy
  • java1 server
  • java2 server
  • java3 server
  • a Postgres database

其實(shí)在一臺(tái)開發(fā)服務(wù)器上運(yùn)行這些服務(wù)沒什么大不了的,但是對(duì)于中小型公司,往往一臺(tái)高配置開發(fā)服務(wù)器經(jīng)常被多人占用,服務(wù)嗎?少不了對(duì)外提供端口,少不了其它人的數(shù)據(jù)修改;當(dāng)然這些問(wèn)題也都是小問(wèn)題,比如,我服務(wù)剛才還跑的好好的,怎么忽然不能用了呢?一頓操作猛如虎.....最后發(fā)現(xiàn)系統(tǒng)一個(gè)底層依賴被卸載了,這些環(huán)境問(wèn)題,看似簡(jiǎn)單,其實(shí)排查起來(lái)非常費(fèi)勁,因?yàn)殄e(cuò)誤信息大多不在你的認(rèn)知范圍之內(nèi),要不然怎么一直有運(yùn)維都是玄學(xué)的說(shuō)法呢?

另外生產(chǎn)環(huán)境已經(jīng)部署了Kubernetes平臺(tái),少不了提供鏡像,所以開發(fā)環(huán)境 docker-compose。

 

Docker-compose運(yùn)行一堆Docker容器

Docker Compose允許你在一個(gè)名為docker-compose.yml的文件中運(yùn)行一堆可以相互通信的Docker容器。編排文件如下所示:

version: "3.3"
services:
  db:
    image: postgres
    volumes:
      - ./tmp/db:/var/lib/postgresql/data
    environment:
      POSTGRES_PASSWORD: password
  java_server1:
    image: java1
    volumes:
      - .:/app/
  java_server2:
    image: java2
    volumes:
      - .:/app/
java_server3:
    image: java
    volumes:
      - .:/app/
  web:
    image: nginx
    ports:
      - "8777:80"
 
  • 配置已經(jīng)包含在鏡像里面,有時(shí)我可能因?yàn)樾枰R時(shí)修改配置,這樣的話,我會(huì)通過(guò)進(jìn)入到容器或者把容器內(nèi)部配置掛載到宿主機(jī)上修改。

  • 其中服務(wù)之間交互的部分我通過(guò)服務(wù)名稱調(diào)用。

  • 通過(guò)使用docker-compose,網(wǎng)絡(luò)配置也變得非常簡(jiǎn)單,例如我的nginx部分配置如下所示:

location ~ /java1* {
    proxy_pass http://java_server1:8080;
}
location java2 {
    proxy_pass http://java_server2:8081;
}
 
  • 公司太小以至于連個(gè)horbour都沒有部署,鏡像沒有存放的位置,那你可以考慮使用數(shù)據(jù)卷掛載本地文件到鏡像內(nèi)部,而compose本身只是提供了一個(gè)編排和啟動(dòng)、以及枚舉你所有服務(wù)的框架。
 

啟動(dòng)方式

我一直在通過(guò)運(yùn)行docker-compose build來(lái)啟動(dòng)我的容器,然后運(yùn)行docker-compose up來(lái)運(yùn)行一切。

當(dāng)然有時(shí)可能只改動(dòng)了其中一個(gè)鏡像,你也可以通過(guò)使用docker-compose create java_server2docker-compose start java_server2單獨(dú)啟動(dòng)。

yaml文件中可以設(shè)置depends_on,以便更好地控制容器何時(shí)開始,但是對(duì)于我的服務(wù)開始順序并不重要,所以我沒有這樣做。

 

測(cè)試環(huán)境

對(duì)于功能測(cè)試環(huán)境,部署方式跟開發(fā)環(huán)境并沒有什么區(qū)別,但是對(duì)于測(cè)試人員來(lái)說(shuō),在接入了docker-compose之后變得更爽了;假設(shè)我們已經(jīng)有一套自動(dòng)化測(cè)試腳本,每次上線之前就可以實(shí)現(xiàn)在完全獨(dú)立的環(huán)境下進(jìn)行覆蓋測(cè)試,測(cè)試完成之后直接銷毀容器即可。不用考慮數(shù)據(jù)、環(huán)境、配置等影響。特別對(duì)于中小型公司,服務(wù)不多,發(fā)布頻繁,并且接入了CI/CD持續(xù)集成持續(xù)部署的企業(yè),建議采用此種方式。

 

生產(chǎn)環(huán)境

目前為止,我嘗試著用docker-compose在生產(chǎn)環(huán)境中使用這個(gè)東西。雖然我可以容忍它的啟動(dòng)速度慢的問(wèn)題,但是在使用過(guò)程仍然會(huì)碰到一些問(wèn)題,比如:多個(gè)容器之間啟動(dòng)的先后順序?qū)е耣ug,但是你可以采用https://github.com/vishnubob/wait-for-it腳本,控制一個(gè)容器必須在另外一個(gè)容器完全啟動(dòng)之后再啟動(dòng);另外沒有調(diào)度、保活等功能,改來(lái)改去發(fā)現(xiàn)還不如使用shell腳本啟動(dòng)。當(dāng)然如果你只是部署一個(gè)小型網(wǎng)站、一些簡(jiǎn)單的無(wú)狀態(tài)服務(wù),還可以考慮使用docker-compose。對(duì)于大量微服務(wù)(超過(guò)50個(gè)以上)還是建議采用Kubernetes。

到此,關(guān)于“Docker Compose方法怎么使用”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI