十一、Docker入門系列--Docker-Compose模板命令
十一、Docker入門系列--Docker-Compose模板命令
一、Docker入門系列--Docker 簡介
二、Docker入門系列--Docker安裝
三、Docker入門系列--Docker常用命令
四、Docker入門系列--Docker映象
五、Docker入門系列--Docker容器資料卷
六、Docker入門系列--DockerFlie解析
七、Docker入門系列--使用DockerFlie自定義Tomcat映象
八、Docker入門系列--Docker常用安裝
九、Docker入門系列--本地映象釋出到阿里雲
十、Docker入門系列--Docker-Compose簡介和安裝
十一、Docker入門系列--Docker-Compose模板命令
十二、Docker入門系列--Docker-Compose常用命令
十三、Docker入門系列--Portainer視覺化Docker
十四、Docker入門系列--Docker搭建部署SpringCloud微服務專案Demo
docker-compose.yml檔案模版介紹
模板檔案是使用 Compose
的核心,涉及到的指令關鍵字也比較多。預設的模板檔名稱為 docker-compose.yml
,格式為 YAML 格式。
version: "3" services: webapp: image: mysql ports: - "80:80" volumes: - "/data"
YAML檔案中的image代表使用Docker倉庫中已經存在的映象,我們之前使用都需要先構建一個映象,然後在檔案裡面指定這個映象才可以執行。
這樣比較麻煩,有一個命令比較方便
Build
表示:通過Docker-compose在啟動容器之前根據dockerfile構建映象,然後根據映象啟動容器
version: '3'
services:
webapp:
build: ./dir
使用 context
指令指定 Dockerfile
所在資料夾的路徑
使用 dockerfile
指令指定 Dockerfile
檔名,如果不指定檔名預設就是尋找Dockerfile
command
覆蓋容器啟動後預設執行的命令
command: echo "hello world"
container_name
指定容器名稱。預設將會使用 專案名稱_服務名稱_序號
這樣的格式
container_name: mysqltest
不推薦使用
depends_on
解決容器的依賴、啟動先後的問題。以下例子中會先啟動 mysql再啟動 tomcat
version: '3'
services:
web:
build: ./
depends_on:
- mysql
- tomcat
tomcat:
image: tomcat01
mysql:
image: mysql01
web服務會等待mysql、tomcat服務啟動的差不多了再啟動,不會等到被依賴服務完全啟動再啟動
environment
設定環境變數。可以使用陣列或字典兩種格式
env_file
跟environment作用類似,也是設定環境變數,不過這個是指定檔案的形式
env_file: .env
env_file:
- ./common.env #檔案的路徑
- ./apps/web.env
- /opt/secrets.env
相比environment把環境比阿里直接寫在yaml中安全一點
expose
暴露埠
本來在Dockerfile中暴露埠,這個命令意思可以不用在Dockerfile中填寫埠,一般不用
image
指定為映象名稱或映象 ID。如果映象在本地不存在,Compose 將會嘗試拉取這個映象,相當於docker run images(映象名)
networks
用來指定啟動的容器使用的網橋(網路),相當於docker run --network
每個容器指定同一個網橋,那麼只要進入一個容器的內部,使用另外一個容器的ip就可以訪問到
docker network ls #檢視Docker中的網橋
檢視網橋的詳細資訊
ports
暴露宿主埠:容器埠的資訊,相當於docker run -p
volumes
暴露宿主路徑:容器路徑的資訊,相當於docker run -v
restart
指定容器退出後的重啟策略為始終重啟。該命令對保持服務始終執行十分有效,在生產環境中推薦配置為 always
或者 unless-stopped
相當於docker run --restart=always
總結
掌握以上命令之後,如果需要在檔案中跑一個es服務,自己寫命令可能一點頭緒都沒有,可以按照這種執行命令改編
docker run -p 6379:6379 -v /mydata/redis/data:/data -v /mydata/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf -d redis redis-server /usr/local/etc/redis/redis.conf --appendonly yes
改編之後YAML檔案
redis:
image: redis:5.6
ports:
-3306:3306
volumes:
- /mydata/redis/data:/data
- /mydata/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf
environment:
- /usr/local/etc/redis/redis.conf --appendonly yes