Docker:Docker Compose 詳解

Docker Compose 概述與安裝?

  • 前面我們使用 Docker 的時候,定義 Dockerfile 文件暴心,然后使用 docker build妓盲、docker run 等命令操作容器。然而微服務架構的應用系統(tǒng)一般包含若干個微服務专普,每個微服務一般都會部署多個實例悯衬,如果每個微服務都要手動啟停,那么效率之低檀夹,維護量之大可想而知
  • 使用 Docker Compose 可以輕松筋粗、高效的管理容器,它是一個用于定義和運行多容器 Docker 的應用程序工具

安裝 Docker Compose

  • 安裝 Docker Compose 可以通過下面命令自動下載適應版本的 Compose炸渡,并為安裝腳本添加執(zhí)行權限
sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
  • 查看安裝是否成功
docker-compose -v

快速入門

  • 打包項目亏狰,獲得 jar 包 docker-demo-0.0.1-SNAPSHOT.jar
mvn clean package
  • 在 jar 包所在路徑創(chuàng)建 Dockerfile 文件,添加以下內(nèi)容
FROM java:8
VOLUME /tmp
ADD docker-demo-0.0.1-SNAPSHOT.jar app.jar
RUN bash -c 'touch /app.jar'
EXPOSE 9000
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","app.jar"]
  • 在 jar 包所在路徑創(chuàng)建文件 docker-compose.yml偶摔,添加以下內(nèi)容
version: '2' # 表示該 Docker-Compose 文件使用的是 Version 2 file
services:
  docker-demo:  # 指定服務名稱
    build: .  # 指定 Dockerfile 所在路徑
    ports:    # 指定端口映射
      - "9000:8761"
  • 在 docker-compose.yml 所在路徑下執(zhí)行該命令 Compose 就會自動構建鏡像并使用鏡像啟動容器
docker-compose up
docker-compose up -d  // 后臺啟動并運行容器

工程暇唾、服務、容器

  • Docker Compose 將所管理的容器分為三層辰斋,分別是工程(project)策州、服務(service)、容器(container)
  • Docker Compose 運行目錄下的所有文件(docker-compose.yml)組成一個工程,一個工程包含多個服務宫仗,每個服務中定義了容器運行的鏡像够挂、參數(shù)、依賴藕夫,一個服務可包括多個容器實例

Docker Compose 常用命令與配置

常見命令

  • ps:列出所有運行容器
docker-compose ps
  • logs:查看服務日志輸出
docker-compose logs
  • port:打印綁定的公共端口孽糖,下面命令可以輸出 eureka 服務 8761 端口所綁定的公共端口
docker-compose port eureka 8761
  • build:構建或者重新構建服務
docker-compose build
  • start:啟動指定服務已存在的容器
docker-compose start eureka
  • stop:停止已運行的服務的容器
docker-compose stop eureka
  • rm:刪除指定服務的容器
docker-compose rm eureka
  • up:構建、啟動容器
docker-compose up
  • kill:通過發(fā)送 SIGKILL 信號來停止指定服務的容器
docker-compose kill eureka
  • pull:下載服務鏡像
  • scale:設置指定服務運氣容器的個數(shù)毅贮,以 service=num 形式指定
docker-compose scale user=3 movie=3
  • run:在一個服務上執(zhí)行一個命令
docker-compose run web bash

docker-compose.yml 屬性

  • version:指定 docker-compose.yml 文件的寫法格式
  • services:多個容器集合
  • build:配置構建時办悟,Compose 會利用它自動構建鏡像,該值可以是一個路徑滩褥,也可以是一個對象病蛉,用于指定 Dockerfile 參數(shù)
build: ./dir
---------------
build:
    context: ./dir
    dockerfile: Dockerfile
    args:
        buildno: 1
  • command:覆蓋容器啟動后默認執(zhí)行的命令
command: bundle exec thin -p 3000
----------------------------------
command: [bundle,exec,thin,-p,3000]
  • dns:配置 dns 服務器,可以是一個值或列表
dns: 8.8.8.8
------------
dns:
    - 8.8.8.8
    - 9.9.9.9
  • dns_search:配置 DNS 搜索域瑰煎,可以是一個值或列表
dns_search: example.com
------------------------
dns_search:
    - dc1.example.com
    - dc2.example.com
  • environment:環(huán)境變量配置铺然,可以用數(shù)組或字典兩種方式
environment:
    RACK_ENV: development
    SHOW: 'ture'
-------------------------
environment:
    - RACK_ENV=development
    - SHOW=ture
  • env_file:從文件中獲取環(huán)境變量,可以指定一個文件路徑或路徑列表酒甸,其優(yōu)先級低于 environment 指定的環(huán)境變量
env_file: .env
---------------
env_file:
    - ./common.env
  • expose:暴露端口魄健,只將端口暴露給連接的服務,而不暴露給主機
expose:
    - "3000"
    - "8000"
  • image:指定服務所使用的鏡像
image: java
  • network_mode:設置網(wǎng)絡模式
network_mode: "bridge"
network_mode: "host"
network_mode: "none"
network_mode: "service:[service name]"
network_mode: "container:[container name/id]"
  • ports:對外暴露的端口定義插勤,和 expose 對應
ports:   # 暴露端口信息  - "宿主機端口:容器暴露端口"
- "8763:8763"
- "8763:8763"
  • links:將指定容器連接到當前連接沽瘦,可以設置別名革骨,避免ip方式導致的容器重啟動態(tài)改變的無法連接情況
links:    # 指定服務名稱:別名 
    - docker-compose-eureka-server:compose-eureka
  • volumes:卷掛載路徑
volumes:
  - /lib
  - /var
  • logs:日志輸出信息
--no-color          單色輸出,不顯示其他顏.
-f, --follow        跟蹤日志輸出其垄,就是可以實時查看日志
-t, --timestamps    顯示時間戳
--tail              從日志的結尾顯示苛蒲,--tail=200

Docker Compose 其它

更新容器

  • 當服務的配置發(fā)生更改時,可使用 docker-compose up 命令更新配置
  • 此時绿满,Compose 會刪除舊容器并創(chuàng)建新容器臂外,新容器會以不同的 IP 地址加入網(wǎng)絡,名稱保持不變喇颁,任何指向舊容起的連接都會被關閉漏健,重新找到新容器并連接上去

links

  • 服務之間可以使用服務名稱相互訪問,links 允許定義一個別名橘霎,從而使用該別名訪問其它服務
version: '2'
services:
    web:
        build: .
        links:
            - "db:database"
    db:
        image: postgres
  • 這樣 Web 服務就可以使用 db 或 database 作為 hostname 訪問 db 服務了
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蔫浆,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子姐叁,更是在濱河造成了極大的恐慌瓦盛,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,366評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件外潜,死亡現(xiàn)場離奇詭異原环,居然都是意外死亡,警方通過查閱死者的電腦和手機处窥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評論 3 395
  • 文/潘曉璐 我一進店門嘱吗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人滔驾,你說我怎么就攤上這事谒麦。” “怎么了哆致?”我有些...
    開封第一講書人閱讀 165,689評論 0 356
  • 文/不壞的土叔 我叫張陵绕德,是天一觀的道長。 經(jīng)常有香客問我沽瞭,道長迁匠,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,925評論 1 295
  • 正文 為了忘掉前任驹溃,我火速辦了婚禮,結果婚禮上延曙,老公的妹妹穿的比我還像新娘豌鹤。我一直安慰自己,他們只是感情好枝缔,可當我...
    茶點故事閱讀 67,942評論 6 392
  • 文/花漫 我一把揭開白布布疙。 她就那樣靜靜地躺著蚊惯,像睡著了一般。 火紅的嫁衣襯著肌膚如雪灵临。 梳的紋絲不亂的頭發(fā)上截型,一...
    開封第一講書人閱讀 51,727評論 1 305
  • 那天,我揣著相機與錄音儒溉,去河邊找鬼宦焦。 笑死,一個胖子當著我的面吹牛顿涣,可吹牛的內(nèi)容都是我干的波闹。 我是一名探鬼主播,決...
    沈念sama閱讀 40,447評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼涛碑,長吁一口氣:“原來是場噩夢啊……” “哼精堕!你這毒婦竟也來了?” 一聲冷哼從身側響起蒲障,我...
    開封第一講書人閱讀 39,349評論 0 276
  • 序言:老撾萬榮一對情侶失蹤歹篓,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后揉阎,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體庄撮,經(jīng)...
    沈念sama閱讀 45,820評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,990評論 3 337
  • 正文 我和宋清朗相戀三年余黎,在試婚紗的時候發(fā)現(xiàn)自己被綠了重窟。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,127評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡惧财,死狀恐怖巡扇,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情垮衷,我是刑警寧澤厅翔,帶...
    沈念sama閱讀 35,812評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站搀突,受9級特大地震影響刀闷,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜仰迁,卻給世界環(huán)境...
    茶點故事閱讀 41,471評論 3 331
  • 文/蒙蒙 一甸昏、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧徐许,春花似錦施蜜、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽缸沃。三九已至,卻和暖如春修械,著一層夾襖步出監(jiān)牢的瞬間趾牧,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評論 1 272
  • 我被黑心中介騙來泰國打工肯污, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留翘单,地道東北人。 一個月前我還...
    沈念sama閱讀 48,388評論 3 373
  • 正文 我出身青樓仇箱,卻偏偏與公主長得像县恕,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子剂桥,可洞房花燭夜當晚...
    茶點故事閱讀 45,066評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 《Docker從入門到實踐》閱讀筆記 原書地址: https://yeasy.gitbooks.io/docker...
    GuoYuebo閱讀 11,382評論 1 39
  • 一 忠烛、什么是 Docker Docker 最初是 dotCloud 公司創(chuàng)始人 Solomon Hykes 在法國...
    Blazzer閱讀 3,140評論 0 13
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn)权逗,斷路器美尸,智...
    卡卡羅2017閱讀 134,667評論 18 139
  • 一顆奉愛的心 連接了來自五湖四海的devotee 美國的、英國的斟薇、澳大利亞的 中國的师坎、印度的、新加坡的 大家這麼和...
    Sundari沁舒閱讀 273評論 0 2