Docker Compose 是 Docker 容器進行編排的工具,定義和運行多容器的應用,能夠一條命令啓動多個容器。php
使用Compose 基本上分爲三步:html
Compose網站:https://docs.docker.com/compose/mysql
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:
docker-compose ps
docker-compose logs
docker-compose port eureka 8761
docker-compose build
docker-compose start eureka
docker-compose stop eureka
docker-compose rm eureka
docker-compose up
docker-compose kill eureka
docker-compose scale user=3 movie=3
docker-compose run web bash
[info] 經過docker-compose編排的的容器是沒有容器本身的ip,由於他們共用一個或多個network,能夠經過
docker network ls
來查看,能夠經過服務名