docker-compose.yml文件


version:指定 docker-compose.yml 的版本

執行docker-compose.yml文件之前先查看yml文件的版本信息version 和docker-compose的版本是否匹配一致

不一致要卸載docker-compose安裝適配的版本

  1. V1 版本的 docker-compose.yml 只被支持到 docker-compose 1.6.x。再往后的 docker-compose 版本就不再支持 V1 版本的 docker-compose.yml

V1 版本的 docker-compose.yml 文件格式主要區別就是: 

- 沒有開頭的 version 聲明 - 沒有 services 聲明 - 不支持 depends_on - 不支持命名的 volumes, networks, build arguments 聲明

  1. V2版本僅支持單機模式
  2. V3版本支持單機模式也支持多機模式
version: '2'
services:
  web:  #服務名,自定義的
    image: dockercloud/hello-world  #指定服務的鏡像名稱或鏡像 ID。如果鏡像在本地不存在,Compose 將會嘗試拉取這個鏡像。
    ports:
      - 8080
    networks:
      - front-tier
      - back-tier

  redis:
    image: redis
    links:
      - web
    networks:
      - back-tier

  lb:
    image: dockercloud/haproxy
    ports:
      - 80:80
    links:
      - web
    networks:
      - front-tier
      - back-tier
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock 

networks:
  front-tier:
    driver: bridge
  back-tier:
driver: bridge

 

version: '2'
services:
  c-chemical-mysql:  #服務名,自定義的
    build:
      context: ./
      dockerfile: ./doc/db/Dockerfile
    environment:
      MYSQL_ROOT_PASSWORD: root
    restart: always
    container_name: c-chemical-mysql
    image: c-chemical-mysql  #指定服務的鏡像名稱或鏡像 ID。如果鏡像在本地不存在,Compose 將會嘗試拉取這個鏡像。
    ports:
      - 13306:3306
    volumes:
      - ./doc/conf/mysql/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf
    privileged: true

  c-chemical-redis:
    image: redis:4.0.10
    restart: always
    container_name: c-chemical-redis
    volumes:
      - ./doc/conf/redis/redis.conf:/etc/redis/redis.conf
    command: redis-server /etc/redis/redis.conf

一份標准配置文件應該包含 version、services、networks 三大部分,其中最關鍵的就是 services 和 networks 兩個部分

2. build

服務可以基於鏡像Dockerfile兩種方式構建。build指定 Dockerfile 的路徑。Compose 根據Dockerfile構建鏡像,然后使用構建好的鏡像啟動服務容器。

Dockerfile的路徑可以是絕對路徑、相對路徑,或者設定上下文根目錄,然后以該目錄為准指定 Dockerfile。

build: /path/to/build/dir
build: ./dir
build:
  context: ../
  dockerfile: path/of/Dockerfile

注意 build 都是一個目錄,dockerfile 標簽指定Dockerfile 文件。
如果同時指定了 image 和 build 兩個標簽,那么 Compose 會構建鏡像並且把鏡像命名為 image 后面的那個名字。

command

command 容器啟動后默認執行命令

也可以寫成類似 Dockerfile 中的格式:

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

container_name

Compose 的容器名稱格式是:<項目名稱><服務名稱><序號>
雖然可以自定義項目名稱、服務名稱,但是如果你想完全控制容器的命名,可以使用這個標簽指定:

container_name: app

environment

環境變量設置,可使用數組或字典兩種方式。示例:

environment:
 RACK_ENV: development
 SHOW: 'true'
 SESSION_SECRET:

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

  

privileged: true

大約在0.6版,privileged被引入docker。
使用該參數,container內的root擁有真正的root權限。
否則,container內的root只是外部的一個普通用戶權限。
privileged啟動的容器,可以看到很多host上的設備,並且可以執行mount。
甚至允許你在docker容器中啟動docker容器。

開了可以掛載host上的硬盤或其它的設備, 如打印機, 攝像頭什么的都可以, volumes和這參數沒什么關系

 
創建容器時沒有添加參數   --restart=always ,導致的后果是:當 Docker 重啟時,容器未能自動啟動。

現在要添加該參數怎么辦呢,方法有二:

1、Docker 命令修改

docker container update --restart=always 容器名字
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM