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 常用命令與配置
常見命令
docker-compose ps
docker-compose logs
-
port:打印綁定的公共端口孽糖,下面命令可以輸出 eureka 服務 8761 端口所綁定的公共端口
docker-compose port eureka 8761
docker-compose build
docker-compose start eureka
docker-compose stop eureka
docker-compose rm eureka
docker-compose up
-
kill:通過發(fā)送 SIGKILL 信號來停止指定服務的容器
docker-compose kill eureka
-
pull:下載服務鏡像
-
scale:設置指定服務運氣容器的個數(shù)毅贮,以 service=num 形式指定
docker-compose scale user=3 movie=3
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: 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: 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:
- /lib
- /var
--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 服務了