Docker——Docker Compose
介紹
允許用戶通過一個單獨的 docker-compose.yml 模板文件(YAML 格式)來定義一組相關聯的應用容器為一個項目(project)。
兩個重要的概念:
- 服務 (service):一個應用容器,實際上可以運行多個相同鏡像的實例。
- 項目 (project):由一組關聯的應用容器組成的一個完整業務單元。
一個項目可以由多個服務(容器)關聯而成,Compose 面向項目進行管理。
compose 模版文件
默認的模板文件名稱為 docker-compose.yml,格式為 YAML 格式。
每個服務都必須通過 image 指令指定鏡像或 build 指令(需要 Dockerfile)等來自動構建生成鏡像。
如果使用 build 指令,在 Dockerfile 中設置的選項(例如:CMD, EXPOSE, VOLUME, ENV 等) 將會自動被獲取,無需在 docker-compose.yml 中再次設置。
version: '3' services:web:build: .ports:- "5000:5000"redis:image: "redis:alpine" 復制代碼build
指定 Dockerfile 所在文件夾的路徑(可以是絕對路徑,或者相對 docker-compose.yml 文件的路徑)。 Compose 將會利用它自動構建這個鏡像,然后使用這個鏡像。
build: docker/redis # 使用 context 指令指定 Dockerfile 所在文件夾的路徑 # 使用 dockerfile 指令指定 Dockerfile 文件名 # 使用 arg 指令指定構建鏡像時的變量。 # 使用 cache_from 指定構建鏡像的緩存 build:context: .dockerfile: docker/nginx-php7/Dockerfileargs:buildno: 1cache_from:- alpine:latest- corp/web_app:3.14復制代碼image
指定為鏡像名稱或鏡像 ID。如果鏡像在本地不存在,Compose 將會嘗試拉取這個鏡像。
image: ubuntu 復制代碼command
覆蓋容器啟動后默認執行的命令
command: echo "hello world" 復制代碼container_name
指定容器名稱。默認將會使用 項目名稱_服務名稱_序號 這樣的格式。
container_name: docker-web-container 復制代碼devices
指定設備映射關系
devices:- "/dev/ttyUSB1:/dev/ttyUSB0" 復制代碼depends_on
解決容器的依賴、啟動先后的問題。以下例子中會先啟動 redis db 再啟動 web
version: '3' services:web:build: .depends_on:- db- redisredis:image: redisdb:image: postgres 復制代碼dns
自定義 DNS 服務器??梢允且粋€值,也可以是一個列表。
dns: 8.8.8.8dns:- 8.8.8.8- 114.114.114.114 復制代碼env_file
從文件中獲取環境變量,可以為單獨的文件路徑或列表。
env_file: .envenv_file:- ./common.env- ./apps/web.env- /opt/secrets.env 復制代碼environment
設置環境變量。如果變量名稱或者值中用到 true|false,yes|no 等表達 布爾 含義的詞匯,最好放到引號里
environment:RACK_ENV: developmentSESSION_SECRET:environment:- RACK_ENV=development- SESSION_SECRET 復制代碼expose
暴露端口,但不映射到宿主機,只被連接的服務訪問,僅可以指定內部端口為參數
expose:- "3000"- "8000" 復制代碼ports
暴露端口信息。使用宿主端口:容器端口 (HOST:CONTAINER) 格式,或者僅僅指定容器的端口(宿主將會隨機選擇端口)都可以。
ports:- "3000"- "8000:8000"- "49100:22"- "127.0.0.1:8001:8001" 復制代碼labels
為容器添加 Docker 元數據(metadata)信息。例如可以為容器添加輔助說明信息。
labels:com.startupteam.description: "webapp for a startup team"com.startupteam.department: "devops department"com.startupteam.release: "rc3 for v1.0" 復制代碼networks
配置容器連接的網絡
networks:some-network:other-network: 復制代碼secrets
存儲敏感數據,例如 mysql 服務密碼。
mysql:image: mysqlenvironment:MYSQL_ROOT_PASSWORD_FILE: /run/secrets/db_root_passwordsecrets:- db_root_password- my_other_secret 復制代碼volumes
數據卷所掛載路徑設置??梢栽O置宿主機路徑 (HOST:CONTAINER) 或加上訪問模式 (HOST:CONTAINER:ro)。
該指令中路徑支持相對路徑。
volumes:- /var/lib/mysql- cache/:/tmp/cache- ~/configs:/etc/configs/:ro 復制代碼讀取變量
Compose 模板文件支持動態讀取主機的系統環境變量和當前目錄下的 .env 文件中的變量。通過${變量名}讀取
# ${MONGO_VERSION}會讀取env文件中的值 version: "3" services: db:image: "mongo:${MONGO_VERSION}" 復制代碼compose 命令
對于 Compose 來說,大部分命令的對象既可以是項目本身,也可以指定為項目中的服務或者容器。如果沒有特別的說明,命令對象將是項目,這意味著項目中所有的服務都會受到命令影響。
build
構建(重新構建)項目中的服務鏡像
up
運行 compose 項目
# 在后臺啟動并運行所有的容器 $ docker-compose up -d 復制代碼down
停止 up 命令所啟動的容器,并移除網絡
config
驗證 Compose 文件格式是否正確,若正確則顯示配置,若格式錯誤顯示錯誤原因。
exec
進入指定的容器
$ docker-compose exec <容器名(docker-compose.yml定義的名)> bash 復制代碼images
列出 Compose 文件中包含的鏡像
kill
強制停止服務容器
$ docker-compose kill [容器名(docker-compose.yml定義的名)] 復制代碼logs
$ docker-compose log [容器名(docker-compose.yml定義的名)] 復制代碼pause
暫停服務容器
$ docker-compose pause [容器名(docker-compose.yml定義的名)] 復制代碼ps
列出項目中目前的容器
$ docker-compose ps [容器名(docker-compose.yml定義的名)] # 只打印容器ID $ docker-compose ps -q [容器名(docker-compose.yml定義的名)] 復制代碼pull
拉取服務依賴的鏡像
$ docker-compose pull [容器名(docker-compose.yml定義的名)] 復制代碼restart
重啟項目中的服務
$ docker-compose restart [容器名(docker-compose.yml定義的名)] 復制代碼rm
刪除所有(停止狀態的)服務容器。
需要執行 docker-compose stop 命令來停止容器。
$ docker-compose rm [容器名(docker-compose.yml定義的名)] 復制代碼start
$ docker-compose start [容器名(docker-compose.yml定義的名)] 復制代碼stop
$ docker-compose stop [容器名(docker-compose.yml定義的名)] 復制代碼轉載于:https://juejin.im/post/5c98904ae51d4577ad7aa13d
總結
以上是生活随笔為你收集整理的Docker——Docker Compose的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Azure VNet介绍
- 下一篇: State状态模式