docker学习笔记(六)docker-compose

目录

基本介绍

安装compose

二进制包安装

pip安装

容器安装

compose常用命令

Compose实战

其他

yaml模板补充

docker-compose常见操作


基本介绍

官网:https://docs.docker.com/compose/

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-compose

sudo chmod +x /usr/local/bin/docker-compose

pip安装

[node3] (local) [email protected] ~
$  pip install docker-compose
[node3] (local) [email protected] ~
$  ln -s /usr/bin/docker-compose /usr/local/bin/
[node3] (local) [email protected] ~
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 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)

创建requirements.txt文件

flask
redis

编写Dockerfile

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"]


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-net

networks:                  #定义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

​ 

发布了47 篇原创文章 · 获赞 12 · 访问量 5094

猜你喜欢

转载自blog.csdn.net/qq_35448165/article/details/103287633
今日推荐