1. 程式人生 > >docker-compose.yml的使用

docker-compose.yml的使用

絕對路徑 oot 所有 dev dir password 參數 code exec

docker-compose.yml包含version、services、networks3大部分

services的書寫規則

1.iamge

services:
   web:                    # 服務名稱,用戶自定義
     image: busybox           # 鏡像名稱/鏡像ID,如果本地不存在compose會拉取鏡像  

# 以下格式都可
   images: redis
   images: mysql:latest
   images: example-registry.com:4000/postgresql        

2.build-------基於Dockerfile,指定Dockerfile所在路徑,Compose會利用它自動構建鏡像,然後啟動服務容器

# 絕對路徑
build: /path/build


# 相對路徑
build:./build

# 設定上下文跟目錄,以此目錄指定Dockerfile
build:
    context: ../
    dockerfile: path/Dockerfile

# 給Dockerfile構建的鏡像命名
build: ./dir
images: nginx:latest

# 構建過程中指定環境變量,構建成功後取消
build:
   context: .
   args:
      buildno: 1
      password: secret

or build: context: . args: - buildno=1 - password=secret ##與ENV不同,ARG允許空值

3.command-------覆蓋容器啟動後默認執行的命令

command: bundle exec thin -p 3000

or  寫成dockerfile的格式

command: [bundle, exec, thin, -p, 3000]

4.container_name-----容器名稱

container_name: app

5.depends_on-------容器依賴

# 基於redis和db服務啟動web服務
version: 2
services:
   web:
   build: .
   depends_on:
       - db
       - redis
   redis:
      image: redis
   db:
      image: postgres

6.dns --------

dns: 8.8.8.8

or

dns:
    - 8.8.8.8
    - 9.9.9.9

dns_search: example.com
dns_search:
    - xxxx
    - xxxx

7. tmpfs--------掛在臨時目錄到容器內部,與run參數效果一致

tmpfs: /run
tmpfs:
   - /run
   - /tmp

8.entrypoint--------覆蓋Dockerfile中ENTRYPOINTmingling

entrypoint: /code/entrypoint.sh

#
entrypoint:
- php
- -d

9.env_file--------指定配置文件,設置compose的變量(可通過docker-compose -f FILE指定配置文件)

env_file: .env
# 若與environment指令沖突,以後者為準

# 可設置多個
env_file:
- ./xx.env
- xx.env

# 此變量不對build構建過程生效

10.environment--------設置鏡像變量,啟動後的容器會包含這些變量設置

environment:
   RACK_ENV: development
   SHOW: true
   SESSION_SECRET:
 
environment:
   - RACK_ENV=development
   - SHOW=true
   - SESSION_SECRE

11.external_links-------------讓compose項目裏面的容器鏈接到項目配置外部的容器(外部容器中必須至少有一個容器鏈接到項目內服務的同一個網絡裏)

external_links:
   - redis_1
   - project_db_1:mysql
   - project_db_1:postgresql

12.exra_hosts-----------添加主機名標簽(向/etc/hosts文件中添加紀錄)

extra_hosts:
   - "mysql:ip"
   - "nginx:ip"


# 啟動容器後查看內部hosts
 ip mysql
 ip nginx

13.links-----------鏈接到其它服務器中的容器

links:
  - db
  - db:mysql
  - redis
# 使用的別名會自動在容器的/etc/hosts裏創建
ip db
ip mysql
ip redis

14.logging--------配置日誌服務

logging:
  driver: syslog
  options:
      syslog-address: "tcp://ip"

# 默認的dirver是json-file,可通過docker-compose logs顯示日誌

15.ports---------映射端口(HOST:CONTAINER)

ports:
   - "3000"
   - "8000:80"
   - "2222:22"
   - "127.0.0.1:8080:8080"

16.volumes-------掛載一個目錄或者已經存在的數據卷容器(HOST:CONTAINER/HOST:CONTAINER:ro,後者設定數據卷只讀,可保護宿主機器的文件系統)

volumes:
  // 只是指定一個路徑,Docker 會自動在創建一個數據卷(這個路徑是容器內部的)。
  - /var/lib/mysql
 
  // 使用絕對路徑掛載數據卷
  - /opt/data:/var/lib/mysql
 
  // 以 Compose 配置文件為中心的相對路徑作為數據卷掛載到容器。
  - ./cache:/tmp/cache
 
  // 使用用戶的相對路徑(~/ 表示的目錄是 /home/<用戶目錄>/ 或者 /root/)。
  - ~/configs:/etc/configs/:ro
 
  // 已經存在的命名的數據卷。
  - datavolume:/var/lib/mysql

# 從其他容器或者服務掛在數據卷
volumes_from:
- service_name
- service_name: ro
- container: container_name
- container: container_name:rw

17.network_mode-------網絡模式:

network_mode: "bridge"
network_mode: "host"
network_mode: "none"
network_mode: "service:[service name]"
network_mode: "container:[container name/id]"

18.networks----------加入指定網絡

services:
  some-service:
    networks:
     - some-network
     - other-network

docker compose常用命令

docker-compose up -d # 在後臺啟動服務

docker-compose ps # 查看啟動的服務

docker-compose stop #停止服務

#查看幫助
docker-compose -h

# -f  指定使用的 Compose 模板文件,默認為 docker-compose.yml,可以多次指定。
docker-compose -f docker-compose.yml up -d 

#啟動所有容器,-d 將會在後臺啟動並運行所有的容器
docker-compose up -d

#停用移除所有容器以及網絡相關
docker-compose down

#查看服務容器的輸出
docker-compose logs

#列出項目中目前的所有容器
docker-compose ps

#構建(重新構建)項目中的服務容器。服務容器一旦構建後,將會帶上一個標記名,例如對於 web 項目中的一個 db 容器,可能是 web_db。可以隨時在項目目錄下運行 docker-compose build 來重新構建服務
docker-compose build

#拉取服務依賴的鏡像
docker-compose pull

#重啟項目中的服務
docker-compose restart

#刪除所有(停止狀態的)服務容器。推薦先執行 docker-compose stop 命令來停止容器。
docker-compose rm 

#在指定服務上執行一個命令。
docker-compose run ubuntu ping docker.com

#設置指定服務運行的容器個數。通過 service=num 的參數來設置數量
docker-compose scale web=3 db=2

#啟動已經存在的服務容器。
docker-compose start

#停止已經處於運行狀態的容器,但不刪除它。通過 docker-compose start 可以再次啟動這些容器。
docker-compose stop

docker-compose.yml的使用