Docker:Docker Compose 詳解
Docker Compose 概述與安裝?
前面我們使用 Docker 的時候,定義 Dockerfile 檔案,然後使用 docker build、docker run 等命令操作容器。然而微服務架構的應用系統一般包含若干個微服務,每個微服務一般都會部署多個例項,如果每個微服務都要手動啟停,那麼效率之低,維護量之大可想而知
使用 Docker Compose 可以輕鬆、高效的管理容器,它是一個用於定義和執行多容器 Docker 的應用程式工具
安裝 Docker Compose
安裝 Docker Compose 可以透過下面命令自動下載適應版本的 Compose,併為安裝指令碼新增執行許可權
curl -L `uname -s`-`uname -m` > /usr/local/bin/docker-compose 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 fileservices: docker-demo: # 指定服務名稱 build: . # 指定 Dockerfile 所在路徑 ports: # 指定埠對映 - "9000:8761"
在 docker-compose.yml 所在路徑下執行該命令 Compose 就會自動構建映象並使用映象啟動容器
docker-compose up docker-compose up -d // 後臺啟動並執行容器
訪問 即可訪問微服務介面
工程、服務、容器
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 服務了
作者:林塬
連結:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1343/viewspace-2809596/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Docker之Docker Compose技術詳解。Docker
- docker-compose.yml配置詳解Docker
- Apache Dolphin Scheduler - Docker Compose 詳解ApacheDocker
- Docker Compose 配置檔案詳解Docker
- Docker 和 Docker ComposeDocker
- docker composeDocker
- Sentry 監控 - 私有 Docker Compose 部署與故障排除詳解Docker
- docker compose 用法Docker
- Docker Compose fileDocker
- Docker Compose 案例Docker
- docker compose 指令Docker
- Docker(四):Docker 三劍客之 Docker ComposeDocker
- Docker 容器編排利器 Docker ComposeDocker
- docker-compose vs docker-stackDocker
- linux中利用docker和docker-compose搭建lnmp環境詳解10分鐘快速完成LinuxDockerLNMP
- 自用 docker-composeDocker
- Docker compose的使用Docker
- Docker學習—ComposeDocker
- Docker Compose簡介Docker
- docker-compose教程Docker
- Docker Compose 安裝Docker
- Docker Compose部署GitLabDockerGitlab
- docker compose 語法Docker
- Docker & ASP.NET Core (5):Docker ComposeDockerASP.NET
- mac搭建docker、docker-compose環境MacDocker
- docker、docker-compose 常用命令Docker
- Ubuntu 安裝最新 docker docker-composeUbuntuDocker
- Centos 7 安裝 Docker 與 Docker ComposeCentOSDocker
- Ubuntu安裝Docker及Docker-composeUbuntuDocker
- Docker, Dockerfile, 和Docker Compose區別 | BaeldungDocker
- 如何使用RubyMine中的Docker / Docker Compose?Docker
- 容器Docker詳解Docker
- Docker詳解(上)Docker
- Linux CentOS 安裝 docker 和 docker-composeLinuxCentOSDocker
- Centos7.9安裝Docker和Docker composeCentOSDocker
- 使用Docker安裝Odoo 17(非Docker Compose)DockerOdoo
- Docker從入門到精通(八)——Docker ComposeDocker
- docker-compose部署ELKDocker