Docker Compose 概述與安裝?
- 前面我們使用 Docker 的時候,定義 Dockerfile 文件,然后使用 docker build、docker run 等命令操作容器。然而微服務架構的應用系統一般包含若干個微服務,每個微服務一般都會部署多個實例,如果每個微服務都要手動啟停,那么效率之低,維護量之大可想而知
- 使用 Docker Compose 可以輕松、高效的管理容器,它是一個用於定義和運行多容器 Docker 的應用程序工具
安裝 Docker Compose
- 安裝 Docker Compose 可以通過下面命令自動下載適應版本的 Compose,並為安裝腳本添加執行權限
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 包所在路徑創建 Dockerfile 文件,添加以下內容
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 包所在路徑創建文件 docker-compose.yml,添加以下內容
version: '2' # 表示該 Docker-Compose 文件使用的是 Version 2 file services: docker-demo: # 指定服務名稱 build: . # 指定 Dockerfile 所在路徑 ports: # 指定端口映射 - "9000:8761"
- 在 docker-compose.yml 所在路徑下執行該命令 Compose 就會自動構建鏡像並使用鏡像啟動容器
docker-compose up docker-compose up -d // 后台啟動並運行容器
- 訪問 http://localhost:9000/hello 即可訪問微服務接口
工程、服務、容器
- Docker Compose 將所管理的容器分為三層,分別是工程(project)、服務(service)、容器(container)
- Docker Compose 運行目錄下的所有文件(docker-compose.yml)組成一個工程,一個工程包含多個服務,每個服務中定義了容器運行的鏡像、參數、依賴,一個服務可包括多個容器實例
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:通過發送 SIGKILL 信號來停止指定服務的容器
docker-compose kill eureka
- pull:下載服務鏡像
- scale:設置指定服務運氣容器的個數,以 service=num 形式指定
docker-compose scale user=3 movie=3
- run:在一個服務上執行一個命令
docker-compose run web bash
docker-compose.yml 屬性
- version:指定 docker-compose.yml 文件的寫法格式
- services:多個容器集合
- build:配置構建時,Compose 會利用它自動構建鏡像,該值可以是一個路徑,也可以是一個對象,用於指定 Dockerfile 參數
build: ./dir --------------- build: context: ./dir dockerfile: Dockerfile args: buildno: 1
- command:覆蓋容器啟動后默認執行的命令
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:環境變量配置,可以用數組或字典兩種方式
environment:
RACK_ENV: development
SHOW: 'ture' ------------------------- environment: - RACK_ENV=development - SHOW=ture
- env_file:從文件中獲取環境變量,可以指定一個文件路徑或路徑列表,其優先級低於 environment 指定的環境變量
env_file: .env
---------------
env_file:
- ./common.env
- expose:暴露端口,只將端口暴露給連接的服務,而不暴露給主機
expose:
- "3000" - "8000"
- image:指定服務所使用的鏡像
image: java
- network_mode:設置網絡模式
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方式導致的容器重啟動態改變的無法連接情況
links: # 指定服務名稱:別名 - docker-compose-eureka-server:compose-eureka
- volumes:卷掛載路徑
volumes:
- /lib
- /var
- logs:日志輸出信息
--no-color 單色輸出,不顯示其他顏.
-f, --follow 跟蹤日志輸出,就是可以實時查看日志
-t, --timestamps 顯示時間戳
--tail 從日志的結尾顯示,--tail=200
Docker Compose 其它
更新容器
- 當服務的配置發生更改時,可使用 docker-compose up 命令更新配置
- 此時,Compose 會刪除舊容器並創建新容器,新容器會以不同的 IP 地址加入網絡,名稱保持不變,任何指向舊容起的連接都會被關閉,重新找到新容器並連接上去
links
- 服務之間可以使用服務名稱相互訪問,links 允許定義一個別名,從而使用該別名訪問其它服務
version: '2' services: web: build: . links: - "db:database" db: image: postgres
- 這樣 Web 服務就可以使用 db 或 database 作為 hostname 訪問 db 服務了
鏈接:https://www.jianshu.com/p/658911a8cff3