使用docker-compose管理docker容器


一、作用

個人理解:使用容器編排工具可以批量的管理容器、或容器組。比如有依賴關系的幾個容器共通組成的服務,典型的有dockerhub。比如在單個服務啟動后需要留啟動腳本記錄容器啟動命令的情況。
官方文檔

二、安裝

yum -y install epel-release
yum -y install python-pip
pip install docker-compose
docker-compose version

三、使用

注意:使用docker-compose需要編寫docker-compose.yml文件,並在文件的同級目錄下執行。

1.docker-compose.yaml

version: '3'
services:
  socket5:
    image: hub.ict.ac.cn/local_proxy/local_proxy:v3
    container_name: socket5
    restart: always
    ports:
      - '7012:7012'
    stdin_open: true
    tty: true

  busybox:
    image: docker.io/busybox
    container_name: busybox
    stdin_open: true
    tty: true

2.指令

  • version 指定了 compose file 的版本,最新的版本為 3.4
  • services 下定義服務,這里定義了一個爬蟲服務 spider
  • build 指定構建鏡像上下文、Dockerfile 文件和 ARGS 等
  • volumes 用於創建卷並掛載,這里掛載了源碼目錄和數據存儲目錄
  • command 指定服務啟動時執行的命令,參考 Dockerfile COMMAND
image: 指定容器啟動的鏡像
build: 服務除了可以基於指定的鏡像
command: 使用 command 可以覆蓋容器啟動后默認執行的命令
**container_name**: 指定運行時容器名稱,而不使用默認格式(<項目名稱><服務名稱><序號>)
**restart**:重啟策略
**depends_on**: 指明服務之間依賴,解決了容器的依賴、啟動先后的問題
dns: 指定 DNS 服務器。
tmpfs: 掛載臨時目錄到容器內部,與 run 的參數一樣
entrypoint: 在 Dockerfile 中有一個指令叫做 ENTRYPOINT 指令
env_file: 專門存放變量的文件。如果通過 docker-compose -f FILE 指定了配置文件,則 env_file 中路徑會使用配置文件路徑。如果有變量名稱與 environment 指令沖突,則以后者為准
environment: 與上面的 env_file 設置鏡像變量,它可以保存變量到鏡像里面,也就是說啟動的容器也會包含這些變量設置
expose: 這個標簽與 Dockerfile 中的 EXPOSE 指令一樣,用於指定暴露的端口
external_links:讓 Compose 項目里面的容器連接到那些項目配置外部的容器
extra_hosts: 添加主機名的標簽,就是往 /etc/hosts 文件中添加一些記錄
labels: 向容器添加元數據,和 Dockerfile 的 LABEL 指令一個意思
**links**: 上面的 depends_on 標簽解決的是啟動順序問題,這個標簽解決的是容器連接問題,與 Docker client 的 –link 一樣效果,會連接到其它服務中的容器。
logging: 用於配置日志服務。默認的 driver 是 json-file
pid: 將 PID 模式設置為主機 PID 模式,跟主機系統共享進程命名空間。容器使用這個標簽將能夠訪問和操縱其他容器和宿主機的名稱空間。
ports: 映射端口的標簽。使用 HOST:CONTAINER 格式或者只是指定容器的端口,宿主機會隨機映射端口。
security_opt: 為每個容器覆蓋默認的標簽。簡單說來就是管理全部服務的標簽。
stop_signal: 設置另一個信號來停止容器。在默認情況下使用的是 SIGTERM 停止容器。設置另一個信號可以使用 stop_signal 標簽。
volumes: 掛載一個目錄或者一個已存在的數據卷容器
cap_add, cap_drop: 添加或刪除容器的內核功能
devices: 設備映射列表
extends: 這個標簽可以擴展另一個服務,擴展內容可以是來自在當前文件,也可以是來自其他文件,相同服務的情況下,后來者會有選擇地覆蓋原有配置。

3.啟動、關閉

啟動
docker-compose up 

如果啟動時指定-d標志,則以守護進程模式運行服務
docker-compose up -d

如果要批量啟動服務(如啟動 8 個 Scrapy),則在--scale選項指定服務的個數:
docker-compose up -d --scale spider=8

列出本地 docker-compose.yml 文件里定義的正在運行的所有服務
docker-compose ps

logs: 查看服務的日志,這個命令會追蹤服務的日志文件,類似tail -f命令,使用Ctrl+C退出
docker-compose logs

stop: 停止所有服務,如果服務沒有停止,可以使用docker-compose kill強制殺死服務
docker-compose stop

rm: 刪除所有服務
docker-compose rm

4、官方示例

version: "3"
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:


免責聲明!

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



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