docker-compose模板常用命令
一、network建立
1、docker-compose建立network
通過以下內容建立的network,名字為up_darklight
version: '2' networks: darklight: driver: bridge ipam: driver: default config: - subnet: 172.30.5.0/24 ip_range: 172.30.5.0/24 gateway: 172.30.5.1 services: web: name: xxx networks: darklight: ipv4_address: 172.30.5.10
2、docker-compose使用已存在的network
external: true
來指定使用已存在的network
version: '2'
networks:
darklight:
external: true
services:
web:
name: xxx
networks:
darklight:
ipv4_address: 172.30.5.10
二、模板常用的命令
注意:在編寫docker-compose.yml檔案時,所有的冒號(:)、短橫線(-)後面都需要加一個空格,不然會出錯。
1、build
指定Dockerfile所在資料夾的路徑(可以是絕對路徑,或者相對於docker-compose.yml檔案的路徑)。docker-compose將會利用它自動構建這個映象,然後使用這個映象。
使用 context 指定Dockerfile所在資料夾的路徑。
使用 dockerfile 指定Dockerfile檔名
使用 args 指定構建映象時的變數
version: '3'
services:
web:
build:
context: ./dir
dockerfile: Dockerfile
args:
timezone: 1
2、container_name
指定容器名稱,相當於docker run中的--name
。預設將會使用 專案名稱_服務名稱_序號
version: '3'
services:
web:
container_name: web-1
3、command
覆蓋容器啟動後預設執行的命令,覆蓋DockerFile中的CMD
或第三方映象的啟動命令
version: '3'
services:
web:
command: echo 'ok'
4、environment
設定環境變數,相當於docker run中的-e
。
可以使用陣列
或字典
兩種格式。只給定名稱的變數會自動獲取執行Compose主機上對應變數的值,可以用來防止洩露不必要的資料。
-e
中值部分需要使用引號包裹, docker-compose.ymal中不需要用引號
version: '3'
services:
mysql:
environment:
- MYSQL_ROOT_PASSWORD=12345678
- MYSQL_DATABASE=my-db
environment:
- MYSQL_ROOT_PASSWORD: 12345678
5、env_file
設定環境變數的檔案路徑,相當於docker run中的--env-file
,檔案必須是.env
,內容中key=value
version: '3'
services:
web:
env_file:
- envfile_path.env
# this is a environment file
NAME=kk yy
LENGHT=18.8
6、image
指定為映象名或映象ID,如果映象在本地不存在,Compose將會嘗試拉取這個映象。
version: '3'
services:
mysql:
image: mysql:5.7
7、network_mode
設定網路模式。使用和docker run的--network引數一樣的值
version: '3'
services:
mysql:
network_mode: 'host'
network_mode: 'none'
network_mode: 'bridge'
8、networks
services中指定容器連線的網路,配置/建立network
version: '3'
services:
web:
networks:
- network-demo
networks:
network-demo
version: '3'
services:
web:
networks:
network-demo:
ipv4_address: 172.30.5.70
networks:
network-demo
9、ports
暴露埠資訊,使用宿主埠:容器埠(HOST:CONTAINER)格式,或者僅僅指定容器的埠(宿主將會隨機選擇端),相當與docker run中的-p
version: '3'
services:
web:
posrts:
- "8000:80"
- "8080:8080"
- "3000"
10、volumes
資料卷所掛載路徑設定,可以設定宿主機路徑,同時支援相對路徑,相當於docker run中的-v
version: '3'
services:
web:
volumes:
-v ./config:/root/config
-v /home/xx/config:/root/config
11、entrypoint
指定服務容器啟動後執行的入口檔案
version: '3'
services:
web:
entrypoint: /root/start.sh
12、working_dir
指定容器中工作目錄, 也可在Dockerfile中指定
version: '3'
services:
web:
working_dir: /root/proj
13、hostname
指定容器主機名,相當於docker run中的-h
version: '3'
services:
web:
hostname: web-1
14、restart
指定重啟策略,相當於docker run中的--restart
version: '3'
services:
web:
restart: always
15、引用環境變數
Compose模板檔案支援動態讀取宿主機的系統環境變數和當前目錄下 .env 檔案中的變數。
例如,下面Compose檔案將從執行它的環境中讀取變數${MONGO_VERSION}
的值,並寫入執行的指令中
version: '3'
services:
db:
image: "mongo:${MONGO_VERSION}"
16、expose
暴露埠,但不對映到宿主機,只被連線的服務訪問。僅可以指定內部埠為引數。
version: '3'
services:
mysql:
expose:
- "3306"
17、extra_hosts
類似Docker中的--add-host引數,指定額外的host名稱對映資訊。會在啟動後的服務容器中/etc/hosts檔案中新增一個條目。如:8.8.8.8 googledns
version: '3'
services:
mysql:
extra_hosts:
- "baidu:8000"
18、healthcheck
通過命令檢查容器是否正常執行
version: '3'
services:
mysql:
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost"]
interval: 1m30s
timeout: 10s
retries: 3
19、links
連線到其他容器。注意:不推薦使用該指令。
應該使用docker network,建立網路,而docker run --network來連線特定網路。
或者使用version: '2' 和更高版本的docker-compose.yml直接定義自定義網路並使用。
20、ulimits
指定容器的ulimits限制值。
例如,指定最大程序數為65535,指定檔案控制代碼數為20000(軟限制,應用可以隨時修改,不能超過硬限制)和 40000(系統硬限制,只能root使用者提高)
version: '3'
services:
mysql:
ulimits:
nproc: 65535
nofile:
soft: 20000
hard: 40000
21、user
指定容器中執行應用的使用者名稱
version: '3'
services:
mysql:
user: ubuntu