1. 程式人生 > >容器編排 Docker Compose

容器編排 Docker Compose

docker compose

在我們啟動容器的時候經常要使用docker run 指定很多參數,當我們需要管理很多容器時,使用這樣的方式會給我們的運維人員帶來很大的負擔,docker compose容器編排工具無疑是解決這個一問題的利器。

Docker Compose是用來管理多容器應用的工具,我們可以使用compose file 文件來配置容器的應用和服務,編寫好compose file 文件以後,我們只需要使用一條簡單的命令就可以創建並啟動我們需要的應用。

使用compose一般有三個步驟:
1、編寫Dockerfile,定義鏡像的構建參數。

2、編寫docker-compose.yml文件,定義應用的掛載,環境變量,啟動參數等。

3、執行 docker-compose up 命令,自動執行構建鏡像並啟動容器和應用。


安裝Compose

這裏只介紹Linux環境下的安裝。

執行如下命令:

curl -L https://github.com/docker/compose/releases/download/1.14.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

可以根據的自己的需求安裝不同的版本,修改鏈接中的版本號即可。也可以直接去https://github.com/docker/compose/releases 上下載需要的版本。

對文件添加執行權限:

 chmod +x /usr/local/bin/docker-compose

安裝完成後,執行compose命令驗證是否安裝成功:

# docker-compose --version

docker-compose version 1.14.0, build c7bdf9e


Compose file 常用語法介紹

compose使用的是YAML格式的文件,我們可以使用它來定義服務、網絡和卷。compose file的固定命名為 docker-compose.yml。

這裏只列出常用的信息,具體用法參考:https://docs.docker.com/compose/compose-file/


build: 構建鏡像,指定構建的路徑,文件,源鏡像等信息。

build:
  context: .             # 指定Dockerfile的構建路徑,或者是一個url的git倉庫地址
  dockerfile: Dockerfile-abcd  #可以指定Dockerfile的名稱,如果不是默認名稱時。
  args:    #添加構建參數,環境變量參數只能在構建過程中訪問,使用時需要先在Dockerfile中定義。
    - buildno=1  #yaml語法,‘=’兩邊不能有空格
    - password=secret #也可以使用列表的方式  ‘password: secret‘

command: 用於重新覆蓋Dockerfile中的COMMAND命令。

command: COMMAND args

也可以使用列表的形式:

command: ["comand1", "command2"]

devices: 映射宿主機的設備到容器中。

devices:
  - "/dev/ttyUSB0:/dev/ttyUSB0"

depends_on: 執行此模塊的行為時,所依賴的其他模塊必須已經完成。

services:
  web:
    build: .
    depends_on:
      - db
      - redis
  redis:
    image: redis
  db:
    image: postgres

dns: 指定dns.

dns: 8.8.8.8

dns:
  - 8.8.8.8
  - 9.9.9.9

env_file: 從文件中添加環境變量參數。如果您使用docker-compose -f FILE指定了一個Compose文件,則env_file中的路徑與文件所在的目錄相關。

env_file: .env

env_file:
  - ./common.env
  - ./apps/web.env
  - /opt/secrets.env

expose:暴露端口而不將它們發布到主機 - 它們只能被鏈接服務訪問。 只能指定內部端口。

expose:
 - "3000"
 - "8000"

image: 指定要從中啟動容器的鏡像,可以是存儲庫/標簽或部分映像ID。

image: redis
image: ubuntu:14.04
image: tutum/influxdb
image: example-registry.com:4000/postgresql
image: a4bc65fd

links: 鏈接到另一個服務中的容器。 請同時指定服務名稱和鏈接別名(SERVICE:ALIAS),或僅指定服務名稱。

logging: 日誌服務。支持三種日誌驅動,json-file, syslog, none. 默認的為json-file.

logging:
  driver: syslog
  options:
    syslog-address: "tcp://192.168.0.42:123"
services:
  some-service:
    image: some-service
    logging:
      driver: "json-file"
      options:
        max-size: "200k"    # 日誌文件最大不超過200K
        max-file: "10"      # 日誌文件最多不超過10個

network_mode: 指定網絡模式。與使用docker 命令的-net參數一樣。

network_mode: "bridge"
network_mode: "host"
network_mode: "none"

networks: 指定所要加入的網絡。

IPV4_ADDRESS:指定加入這個網絡的IP地址。

services:
  some-service:
    networks:
     - some-network
     - other-network
services:
  app:
    image: busybox
    command: ifconfig
    networks:
      app_net:
        ipv4_address: 172.16.238.10
        ipv6_address: 2001:3984:3989::10
networks:
  app_net:
    driver: bridge
    enable_ipv6: true
    ipam:
      driver: default
      config:
      -
        subnet: 172.16.238.0/24
      -
        subnet: 2001:3984:3989::/64

ports: 對外開放的端口。

短語法模式:

ports:
 - "3000"
 - "3000-3005"
 - "8000:8000"
 - "9090-9091:8080-8081"
 - "49100:22"
 - "127.0.0.1:8001:8001"
 - "127.0.0.1:5000-5010:5000-5010"
 - "6060:6060/udp"

長語法模式(版本v3.2):

target:容器內部端口

published:對外暴露的端口

protocol:協議類型

mode: host 用於在每個節點上發布主機端口的主機,或將要進行負載均衡的群模式端口的入口。

ports:
  - target: 80
    published: 8080
    protocol: tcp
    mode: host

vlumes: 掛載宿主機目錄,或命名卷。

短語法:

volumes:
  # Just specify a path and let the Engine create a volume
  - /var/lib/mysql
  # Specify an absolute path mapping
  - /opt/data:/var/lib/mysql
  # Path on the host, relative to the Compose file
  - ./cache:/tmp/cache
  # User-relative path
  - ~/configs:/etc/configs/:ro
  # Named volume
  - datavolume:/var/lib/mysql

長語法(v3.2):

volumes:
  - type: volume
    source: mydata
    target: /data
    volume:
      nocopy: true
  - type: bind
    source: ./static
    target: /opt/app/static

restart: 定義自啟動。

restart: "no"
restart: always
restart: on-failure
restart: unless-stopped

domainname, hostname, ipc, mac_address, privileged, read_only, shm_size, stdin_open, tty, user, working_dir指定屬性。 與使用docker run 指定參數功能一樣。

user: postgresql
working_dir: /code
domainname: foo.com
hostname: foo
ipc: host
mac_address: 02:42:ac:11:65:43
privileged: true
read_only: true
shm_size: 64M
stdin_open: true
tty: true




本文出自 “Trying” 博客,請務必保留此出處http://tryingstuff.blog.51cto.com/4603492/1948706

容器編排 Docker Compose