博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
docker学习笔记(六)docker-compose
阅读量:635 次
发布时间:2019-03-14

本文共 6087 字,大约阅读时间需要 20 分钟。

目录


基本介绍

官网:

Compose is a tool for defining and running multi-container Docker applications. With Compose, you use a YAML file to configure your application’s services. Then, with a single command, you create and start all the services from your configuration.

docker-compose主要是针对Docker容器集群的快速编排。通过compose,用户可以定义和运行多容器的docker.通过自定义的yaml文件去配置自己的应用服务,然后通过一个启动命令,就可以创建和运行所有的服务。就不需要像上面docker实战里一样,每次去拉取镜像,创建network,创建多个容器(springboot,mysql,nginx等容器),命令多并且容易混淆和遗漏

Compose 中有两个重要的概念:

       服务(service):一个应用的容器,一个yaml文件可以包括若干容器实例(可以是相同镜像,也能是不同镜像)
       项目(project):由一组相互关联的容器组成的一个完整业务单元,一个yaml文件定义的就是一个project

Using Compose is basically a three-step process:

  1. Define your app’s environment with a Dockerfile so it can be reproduced anywhere.

  2. Define the services that make up your app in docker-compose.yml so they can be run together in an isolated environment.

  3. Run docker-compose up and Compose starts and runs your entire app.

使用compose分为三步:

1.编写Dockerfile用于打包镜像(如果你的镜像都来自官方,就省略这步)
2.在docker-compose.yml里定义自己想要的服务(包括容器,网络等)
3.通过docker-compose up 命令启动服务

安装compose

因为compose依赖于docker运行,所以需要先安装docker , 前面都讲过,这里就不多讲了

二进制包安装

sudo curl -L "https://github.com/docker/compose/releases/download/1.25.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-composesudo chmod +x /usr/local/bin/docker-compose

pip安装

[node3] (local) root@192.168.0.6 ~

$  pip install docker-compose
[node3] (local) root@192.168.0.6 ~
$  ln -s /usr/bin/docker-compose /usr/local/bin/
[node3] (local) root@192.168.0.6 ~
docker-compose version
docker-compose version 1.23.2, build 1110ad0
docker-py version: 3.7.3
CPython version: 2.7.16
OpenSSL version: OpenSSL 1.1.1d  10 Sep 2019

容器安装

$ sudo curl -L --fail https://github.com/docker/compose/releases/download/1.25.0/run.sh -o /usr/local/bin/docker-compose$ sudo chmod +x /usr/local/bin/docker-compose

我尝试了三种,最后只有通过pip在play-with-docker安装成功了

compose常用命令

通过执行docker-compose --help来查看Compose基本命令用法。

 

Compose实战

1.准备工作

  创建目录/tmp/test-compose

  进入目录,编写app.py代码

import timeimport redisfrom flask import Flaskapp = 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)

创建requirements.txt文件

flaskredis

编写Dockerfile

FROM python:3.7-alpineWORKDIR /codeENV FLASK_APP app.pyENV FLASK_RUN_HOST 0.0.0.0RUN apk add --no-cache gcc musl-dev linux-headersCOPY requirements.txt requirements.txtRUN pip install -r requirements.txtCOPY . .CMD ["flask", "run"]

2.编写yaml文件

version: '3'            #指定docker-compose的版本services:               #定义项目里所有的service信息, services下的第一级别的key就是serviceName  web:                  #server name    build: .            #指定该service通过当前目录的Dockerfile构建    ports:      - "5000:5000"     #容器的5000端口和宿主机的5000端口建立映射关系    networks:           #将容器加入指定网络(等同于docker network connect命令)      - app-net         #网络名称  redis:    image: "redis:alpine"  #指定docker镜像,可以是远程仓库镜像、本地镜像    networks:      - app-netnetworks:                  #定义networks信息  app-net:                 #网络名称    driver: bridge         #指定网络模式, bridge,none,host,overlay;docker下默认使用bridge

启动项目:

docker-compose up -d

  

从启动的日志可以看到compose帮我们完成了build image,pull image,create container等一系列操作,还帮我们创建了自定义的bridge网络

启动完成后就可以通过映射的端口访问了

其他

yaml模板补充

ports参数用法ports                 # 建立宿主机和容器之间的端口映射关系, ports 支持两种语法格式            SHORT 语法格式示例:                - "3000"                            # 暴露容器的 3000 端口, 宿主机的端口由 docker 随机映射一个没有被占用的端口                - "3000-3005"                       # 暴露容器的 3000 到 3005 端口, 宿主机的端口由 docker 随机映射没有被占用的端口                - "8000:8000"                       # 容器的 8000 端口和宿主机的 8000 端口建立映射关系                - "9090-9091:8080-8081"                - "127.0.0.1:8001:8001"             # 指定映射宿主机的指定地址的                - "127.0.0.1:5000-5010:5000-5010"                  - "6060:6060/udp"                   # 指定协议             LONG 语法格式示例:(v3.2 新增的语法格式)                ports:                    - target: 80                    # 容器端口                      published: 8080               # 宿主机端口                      protocol: tcp                 # 协议类型                      mode: host                    # host 在每个节点上发布主机端口,  ingress 对于集群模式端口进行负载均衡
volumes         # 定义容器和宿主机的数据卷映射关系            SHORT 语法格式示例:                volumes:                    - /var/lib/mysql                # 映射容器内的 /var/lib/mysql 到宿主机的一个随机目录中                    - /opt/data:/var/lib/mysql      # 映射容器内的 /var/lib/mysql 到宿主机的 /opt/data                    - ./cache:/tmp/cache            # 映射容器内的 /var/lib/mysql 到宿主机 compose 文件所在的位置                    - ~/configs:/etc/configs/:ro    # 映射宿主机的目录到容器中去, 权限只读                    - datavolume:/var/lib/mysql     # 为 volumes 命名                         LONG 语法格式示例:(v3.2 新增的语法格式)                version: "3.2"                services:                    web:                        image: nginx:alpine                        ports:                            - "80:80"                        volumes:                            - type: volume                  # mount 的类型, 必须是 bind、volume 或 tmpfs                                source: mydata              # 宿主机目录                                target: /data               # 容器目录                                volume:                     # 配置扩展项, 其 key 必须和 type 的值相同                                    nocopy: true                # volume 扩展的选项, 在创建volume时禁止用从容器复制数据

docker-compose常见操作

(1)查看版本

    docker-compose version
(2)根据yml创建service
    docker-compose up
    指定yaml:docker-compose  up -f xxx.yaml
    后台运行:docker-compose up -d
(3)查看启动成功的service
    docker-compose ps
(4)查看images 也可以使用docker命令
 ​   docker-compose images
(5)停止/启动service
    docker-compose stop/start 
(6)删除service[同时会删除掉network和volume]
    docker-compose down
(7)进入到某个service
    docker-compose exec <serviceName> sh
(8)scale扩缩容
   
修改web的port映射,并启动
  docker-compose up --scale web=5 -d
  docker-compose ps
  docker-compose logs web

 

 

​ 

 

 

 

转载地址:http://wiooz.baihongyu.com/

你可能感兴趣的文章