docker-compose简单使用

1,下载安装docker-compose

# http://get.daocloud.io/
curl -L https://get.daocloud.io/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

2,官网案例

#1
$ mkdir composetest
$ cd composetest

#2 Create a file called app.py in your project directory and paste this in

import time

import redis
from flask import Flask

app = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)


def get_hit_count():
    retries = 5
    while True:
        try:
            return cache.incr('hits')
        except redis.exceptions.ConnectionError as exc:
            if retries == 0:
                raise exc
            retries -= 1
            time.sleep(0.5)


@app.route('/')
def hello():
    count = get_hit_count()
    return 'Hello World! I have been seen {} times.\n'.format(count)



#3Create another file called requirements.txt in your project directory and paste this in:
flask
redis



#4create a file named Dockerfile and paste the following
FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP app.py
ENV FLASK_RUN_HOST 0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
CMD ["flask", "run"]


#5Create a file called docker-compose.yml

version: '3'
services:
  web:
    build: .
    ports:
      - "5000:5000"
  redis:
    image: "redis:alpine"

#6启动
$ docker-compose up

#7修改docker-compose.yml
version: '3'
services:
  web:
    build: .
    ports:
      - "5000:5000"
    volumes:
      - .:/code
    environment:
      FLASK_ENV: development
  redis:
    image: "redis:alpine"


#7 查看变量
$ docker-compose run web env


## 
停止服务
$ docker-compose stop

删除所有数据
$ docker-compose down --volumes


docker-compose 配置文件 v3

1,构建方式

1) 指定构建dockerfile在当前目录下

version: '3'
services:
  web:
    build: .
    ports:
      - "5000:5000"
  redis:
    image: "redis:alpine"

2) 指定构建上下文 ,构建镜像时的必须文件都要在该目录下 ./dir

version: "3.7"
services:
  webapp:
    build: ./dir
    image: webapp:tag1  
#指定镜像名称

3)指定dockerfile名称及变量

version: "3.7"
services:
  webapp:
    build:
      context: ./dir
      dockerfile: Dockerfile-alternate
      args:
        buildno: 1

注意:不指定 dockerfile: 时默认的dockerfile为 Dockerfile

参数格式

#1
build:
  context: .
  args:
    buildno: 1
    gitcommithash: cdc3b19

#2

build:
  context: .
  args:
    - buildno=1
    - gitcommithash=cdc3b19


为镜像添加标签 docker-compose 版本为3.3

version: '3.3'
services:
  web:
    build: 
      context: ./dir
      labels:
         - "com.example.description=Accounting webapp"
    ports:
      - "5000:5000"
    volumes:
      - .:/code
    environment:
      FLASK_ENV: development
  redis:
    image: "redis:alpine"


查看标签:
docker  inspect composetest_web | grep  -i  -A  3  labels 

命令

Override the default command.   重写dockerfile 内的命令

command: bundle exec thin -p 3000
或
command: ["bundle", "exec", "thin", "-p", "3000"]

配置configs

depends_on

官网介绍
Express dependency between services, Service dependencies cause the following behaviors:

    docker-compose up starts services in dependency order. In the following example, db and redis are started before web.

    docker-compose up SERVICE automatically includes SERVICE’s dependencies. In the following example, docker-compose up web also creates and starts db and redis.

    docker-compose stop stops services in dependency order. In the following example, web is stopped before db and redis.
version: "3.7"
services:
  web:
    build: .
    depends_on:
      - db
      - redis
  redis:
    image: redis
  db:
    image: postgres

deploy

Specify configuration related to the deployment and running of services. This only takes effect when deploying to a swarm with docker stack deploy, and is ignored by docker-compose up and docker-compose run.

version: "3.7"
services:
  redis:
    image: redis:alpine
    deploy:
      replicas: 6
      update_config:
        parallelism: 2
        delay: 10s
      restart_policy:
        condition: on-failure

ENDPOINT_MODE

为连接到群集的外部客户端指定服务发现方法

endpoint_mode: vip - Docker assigns the service a virtual IP (VIP) that acts as the front end for clients to reach the service on a network. Docker routes requests between the client and available worker nodes for the service, without client knowledge of how many nodes are participating in the service or their IP addresses or ports. (This is the default.)

endpoint_mode: dnsrr - DNS round-robin (DNSRR) service discovery does not use a single virtual IP. Docker sets up DNS entries for the service such that a DNS query for the service name returns a list of IP addresses, and the client connects directly to one of these. DNS round-robin is useful in cases where you want to use your own load balancer, or for Hybrid Windows and Linux applications.

endpoint_mode:vip-Docker为服务分配虚拟IP(VIP),该IP作为客户端访问网络上服务的前端。 Docker在客户端和服务的可用工作节点之间路由请求,而无需客户端知道有多少节点正在参与服务或其IP地址或端口。 (这是默认设置。)
endpoint_mode:dnsrr-DNS轮询(DNSRR)服务发现不使用单个虚拟IP。 Docker设置服务的DNS条目,以便对服务名称的DNS查询返回IP地址列表,并且客户端直接连接到其中之一。在想要使用自己的负载平衡器或混合Windows和Linux应用程序的情况下,DNS轮询很有用。

version: "3.7"

services:
  wordpress:
    image: wordpress
    ports:
      - "8080:80"
    networks:
      - overlay
    deploy:
      mode: replicated
      replicas: 2
      endpoint_mode: vip

  mysql:
    image: mysql
    volumes:
       - db-data:/var/lib/mysql/data
    networks:
       - overlay
    deploy:
      mode: replicated
      replicas: 2
      endpoint_mode: dnsrr

volumes:
  db-data:

networks:
  overlay:

猜你喜欢

转载自www.cnblogs.com/g2thend/p/11704276.html