【docker專題(7)】docker-compose

Docker Compose 是 Docker 容器進行編排的工具,定義和運行多容器的應用,可以一條命令啓動多個容器。

使用Compose 基本上分爲三步:

  1. Dockerfile 定義應用的運行環境
  2. docker-compose.yml 定義組成應用的各服務
  3. docker-compose up 啓動整個應用

安裝Compose

Compose網站:https://docs.docker.com/compose/

curl -L https://github.com/docker/compose/releases/download/1.8.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose -v

編寫示例

version: "3"
services:
  nginx:
    # docker鏡像
    image: nginx:${NGINX_VERSION}
    # 端口映射
    ports:
      - "${NGINX_HTTP_HOST_PORT}:80"
    # 數據掛載 宿主機:docker 此處可以寫相對路徑
    volumes:
      - ${SOURCE_DIR}:/var/www/html/:rw
    # 重啓策略
    # no是默認的重啓策略,在任何情況下都不會重啓容器。 
    # 指定爲always時,容器總是重新啓動。 
    restart: always
    # 注意:如果服務之間是在同個networks之下的話就可以通過 服務名:port 來訪問鏈接
    networks:
      - default

  php72:
    # build用context指定的dockerfile創建
    build:
      context: .
      # 傳入dockerfile裏面的參數
      args:
        PHP_VERSION: ${PHP72_VERSION}

    # 鏈接到另一個服務中的容器 SERVICE:ALIAS
    # 在當前的web服務的容器中可以通過鏈接的db服務的別名database訪問db容器中的數據庫應用
    # 如果沒有指定別名,則可直接使用服務名訪問。
    links:
      - db:database

    # 鏈接到docker-compose.yml 外部的容器
    external_links:
      - redis_1
      - project_db_1:mysql
      - project_db_1:postgresq

    # 使用該參數,container內的root擁有真正的root權限。
    # 否則,container內的root只是外部的一個普通用戶權限。
    privileged: true
    # 容器名稱
    container_name: php72
    # 啓動時必須等mysql服務啓動好
    depends_on:
      - mysql
    cap_add:
      - SYS_PTRACE
    networks:
      - default


  mysql:
    image: mysql:${MYSQL_VERSION}
    ports:
      - "${MYSQL_HOST_PORT}:3306"
    volumes:
      - ${MYSQL_CONF_FILE}:/etc/mysql/conf.d/mysql.cnf:ro
      - ${MYSQL_DATA_DIR}:/var/lib/mysql/:rw
    restart: always
    networks:
      - default
    # 環境變量傳入dockerfile裏面的變量
    environment:
      MYSQL_ROOT_PASSWORD: "${MYSQL_ROOT_PASSWORD}"

  redis:
    image: redis:${REDIS_VERSION}
    ports:
      - "${REDIS_HOST_PORT}:6379"
    volumes:
      - ${REDIS_CONF_FILE}:/etc/redis.conf:ro
    restart: always
    entrypoint: ["redis-server", "/etc/redis.conf"]
    networks:
      - default

# 指定其爲同個docker網絡
# docker network ls來查看
networks:
  default:
  • 變量來自同目錄下的.env文件
  • php通過統計目錄的dockerfile來構建

常用命令

  • ps:列出所有運行容器
docker-compose ps
  • logs:查看服務日誌輸出
docker-compose logs
  • port:打印綁定的公共端口,下面命令可以輸出 eureka 服務 8761 端口所綁定的公共端口
docker-compose port eureka 8761
  • build:構建或者重新構建服務
docker-compose build
  • start:啓動指定服務已存在的容器
docker-compose start eureka
  • stop:停止已運行的服務的容器
docker-compose stop eureka
  • rm:刪除指定服務的容器
docker-compose rm eureka
  • up:構建、啓動容器
docker-compose up
  • kill:通過發送 SIGKILL 信號來停止指定服務的容器
docker-compose kill eureka
  • pull:下載服務鏡像
  • scale:設置指定服務運氣容器的個數,以 service=num 形式指定
docker-compose scale user=3 movie=3
  • run:在一個服務上執行一個命令
docker-compose run web bash
[info] 通過docker-compose編排的的容器是沒有容器自己的ip,因爲他們共用一個或多個network,可以通過docker network ls來查看,可以通過服務名
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章