docker-compose命令及yaml文件


Docker-compose常用命令

docker-compose up -d nginx                     構建建啟動nignx容器

docker-compose exec nginx bash            登錄到nginx容器中

docker-compose down                              刪除所有nginx容器,鏡像

docker-compose ps                                   顯示所有容器

docker-compose restart nginx                   重新啟動nginx容器

docker-compose run --no-deps --rm php-fpm php -v  在php-fpm中不啟動關聯容器,並容器執行php -v 執行完成后刪除容器

docker-compose build nginx                     構建鏡像 。        

docker-compose build --no-cache nginx   不帶緩存的構建。

docker-compose logs  nginx                     查看nginx的日志 

docker-compose logs -f nginx                   查看nginx的實時日志

 

docker-compose config  -q                      驗證(docker-compose.yml)文件配置,當配置正確時,不輸出任何內容,當文件配置錯誤,輸出錯誤信息。 

docker-compose events --json nginx       以json的形式輸出nginx的docker日志

docker-compose pause nginx                 暫停nignx容器

docker-compose unpause nginx             恢復ningx容器

docker-compose rm nginx                       刪除容器(刪除前必須關閉容器)

docker-compose stop nginx                    停止nignx容器

docker-compose start nginx                    啟動nignx容器

docker-compose.ymal

官網示例:

version: "3.7"
services:

  redis:
    image: redis:alpine
    ports:
      - "6379"
    networks:
      - frontend
    deploy:
      replicas: 2
      update_config:
        parallelism: 2
        delay: 10s
      restart_policy:
        condition: on-failure

  db:
    image: postgres:9.4
    volumes:
      - db-data:/var/lib/postgresql/data
    networks:
      - backend
    deploy:
      placement:
        constraints: [node.role == manager]

  vote:
    image: dockersamples/examplevotingapp_vote:before
    ports:
      - "5000:80"
    networks:
      - frontend
    depends_on:
      - redis
    deploy:
      replicas: 2
      update_config:
        parallelism: 2
      restart_policy:
        condition: on-failure

  result:
    image: dockersamples/examplevotingapp_result:before
    ports:
      - "5001:80"
    networks:
      - backend
    depends_on:
      - db
    deploy:
      replicas: 1
      update_config:
        parallelism: 2
        delay: 10s
      restart_policy:
        condition: on-failure

  worker:
    image: dockersamples/examplevotingapp_worker
    networks:
      - frontend
      - backend
    deploy:
      mode: replicated
      replicas: 1
      labels: [APP=VOTING]
      restart_policy:
        condition: on-failure
        delay: 10s
        max_attempts: 3
        window: 120s
      placement:
        constraints: [node.role == manager]

  visualizer:
    image: dockersamples/visualizer:stable
    ports:
      - "8080:8080"
    stop_grace_period: 1m30s
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
    deploy:
      placement:
        constraints: [node.role == manager]

networks:
  frontend:
  backend:

volumes:
  db-data:

部分分解

##服務基於已經存在的鏡像
services:
  web:
    image: hello-world


##服務基於dockerfile 
build: /path/to/build/dir
build: ./dir
build:
  context: ../
  dockerfile: path/of/Dockerfile

build: ./dir
image: webapp:tag


##command 
command命令可以覆蓋容器啟動后默認執行的命令
command: bundle exec thin -p 3000
command: [bundle, exec, thin, -p, 3000]

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

##depends_on
depends_on解決了容器的依賴、啟動先后的問題
version: '2'
services:
  web:
    build: .
    depends_on:
      - db
      - redis
  redis:
    image: redis
  db:


##dns
dns: 8.8.8.8
dns:
  - 8.8.8.8
  - 9.9.9.9

dns_search: example.com
dns_search:
  - dc1.example.com
  - dc2.example.com

##tmfs
掛載臨時目錄到容器內部,與run的參數一樣效果
tmpfs: /run
tmpfs:
  - /run
  - /tmp

##environment
設置鏡像變量,它可以保存變量到鏡像里,也就是說啟動的容器也會包含這些變量設置
environment:
  RACK_ENV: development
  SHOW: 'true'
  SESSION_SECRET:
 
environment:
  - RACK_ENV=development
  - SHOW=true
  - SESSION_SECRET
 
##expose
用於指定暴露的端口,但是只是作為參考,端口映射的話還得ports標簽
expose:
 - "3000"
 - "8000"

##external_links
在使用Docker的過程中,我們會有許多單獨使用docker run啟動的容器,為了使Compose能夠連接這些不在docker-compose.yml中定義的容器,我們需要一個特殊的標簽,就是external_links,它可以讓Compose項目里面的容器連接到那些項目配置外部的容器(前提是外部容器中必須至少有一個容器是連接到與項目內的服務的同一個網絡里面)
 
external_links:
 - redis_1
 - project_db_1:mysql
 - project_db_1:postgresql

##extra_hosts
添加主機名的標簽,就是往容器內部/etc/hosts文件中添加一些記錄
extra_hosts:
 - "somehost:162.242.195.82"
 - "otherhost:50.31.209.229"

##labels
向容器添加元數據,和Dockerfile的lable指令一個意思

labels:
  com.example.description: "Accounting webapp"
  com.example.department: "Finance"
  com.example.label-with-empty-value: ""
labels:
  - "com.example.description=Accounting webapp"
  - "com.example.department=Finance"
  - "com.example.label-with-empty-value"
 
##links
解決容器連接問題,與docker的–link一樣的效果,會連接到其他服務中的容器,使用的別名將會自動在服務容器中的/etc/hosts里創建
links:
 - db
 - db:database
 - redis


##ports
用作端口映射
使用HOST:CONTAINER格式或者只是指定容器的端口,宿主機會隨機映射端口
ports:
 - "3000"
 - "8000:8000"
 - "49100:22"
 - "127.0.0.1:8001:8001"
當使用HOST:CONTAINER格式來映射端口時,如果你使用的容器端口小於60你可能會得到錯誤得結果,因為YAML將會解析xx:yy這種數字格式為60進制。所以建議采用字符串格式

##security_opt
為每個容器覆蓋默認的標簽。簡單說來就是管理全部服務的標簽,比如設置全部服務的user標簽值為USER
security_opt:
  - label:user:USER
  - label:role:ROLE

##volumes
掛載一個目錄或者一個已經存在的數據卷容器,可以直接使用[HOST:CONTAINER]這樣的格式,或者使用[HOST:CONTAINER:ro]這樣的格式,或者對於容器來說,數據卷是只讀的,這樣可以有效保護宿主機的文件系統。
compose的數據卷指定路徑可以是相對路徑,使用 . 或者 … 來指定性對目錄
 
volumes:
  // 只是指定一個路徑,Docker 會自動在創建一個數據卷(這個路徑是容器內部的)。
  - /var/lib/mysql
 
  // 使用絕對路徑掛載數據卷
  - /opt/data:/var/lib/mysql
 
  // 以 Compose 配置文件為中心的相對路徑作為數據卷掛載到容器。
  - ./cache:/tmp/cache
 
  // 使用用戶的相對路徑(~/ 表示的目錄是 /home/<用戶目錄>/ 或者 /root/)。
  - ~/configs:/etc/configs/:ro
 
  // 已經存在的命名的數據卷。
  - datavolume:/var/lib/mysql
 
如果你不使用宿主機的路徑,你可以指定一個volume_driver。
volume_driver: mydriver

##volumes_from
從其它容器或者服務掛載數據卷,可選的參數是:ro或者:rw,前者表示容器只讀,后者表示容器對數據卷是可讀可寫的,默認是可讀可寫的

volumes_from:
  - service_name
  - service_name:ro
  - container:container_name
  - container:container_name:rw

##network_mode
網絡模式,與docker client的–net參數類似,只是相對多了一個service:[sevice name]的格式
network_mode: "bridge"
network_mode: "host"
network_mode: "none"
network_mode: "service:[service name]"
network_mode: "container:[container name/id]"
 
##networks
加入指定網絡
services:
  some-service:
    networks:
     - some-network
     - other-network


免責聲明!

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



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