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
来查看,能够经过服务名