美文网首页
Docker compose(五)

Docker compose(五)

作者: 强某某 | 来源:发表于2019-08-12 14:37 被阅读0次

    Docker compose

    Docker compose是一种docker容器的任务编排工具官方地址:
    https://docs.docker.com/compose/

    compose简介

    任务编排介绍场景:
    我们在工作中为了完成业务目标,首先把业务拆分成多个子任务,然后对这些子任务进行顺序组合,当子任务按照 方案执行完毕后,就完成了业务目标。
    任务编排,就是对多个子任务执行顺序进行确定的过程。

    常见的任务编排工具:

    单机版: docker compose

    集群版:

    Docker swarm Docker

    Mesos Apache

    Kubernetes(k8s) Google

    docker compose的特点;

    • 本质:docker
    • 工具对象:应用服务
    • 配置:YAML 格式配置文件
    • 命令:简单
    • 执行:定义和运行容器

    docker compose的配置文件

    • docker-compose.yml
    • 文件后缀是yml
    • 文件内容遵循 ymal格式

    docker 和 Docker compose

    Compose file format Docker Engine release Compose file format Docker Engine release
    3.4 17.09.0+ 2.3 17.06.0+
    3.3 17.06.0+ 2.2 1.13.0+
    3.2 17.04.0+ 2.1 1.12.0+
    3.1 1.13.1+ 2.0 1.10.0+
    3.0 1.13.0+ 1.0 1.9.1.+

    3.3.2compose 快速入门

    docker compose 安装

    linux需要单独安装Windows和macos安装对应客户端之后默认集成

    #安装依赖工具
    sudo  apt-get  install  python-pip  -y
    #安装编排工具
    sudo  pip  install  docker-compose
    #查看编排工具版本
    sudo  docker-compose  version
    #查看命令帮助
    docker-compose  --help
    

    PIP 源问题

    #用pip安装依赖包时默认访问https://pypi.python.org/simple/,
    #但是经常出现不稳定以及访问速度非常慢的情况,国内厂商提供的pipy镜像目前可用的有
    
    #在当前用户目录下创建.pip文件夹
    mkdir  ~/.pip
    #然后在该目录下创建pip.conf文件填写: [global]
    trusted-host=mirrors.aliyun.com
    index-url=http://mirrors.aliyun.com/pypi/simple/
    

    compose简单配置文件

    #创建compose文件夹
    :~$  mkdir  -p  ./docker/compose
    #进入到文件夹
    :~$  cd  ./docker/compose
    #创建yml文件
    :~$  vim  docker-compose.yml
    

    docker-compose.yml 文件内容

    version:  '2'
    services:
    web1:
    image:  nginx
    ports:
        -  "9999:80"
    container_name:  nginx-web1
    web2:
    image:  nginx
    ports:
        -  "8888:80"
        container_name:  nginx-web2
    

    运行一个容器

    #后台启动:
    docker-compose  up  -d 
        #注意:
    #如果不加-d,那么界面就会卡在前台
    #查看运行效果
    docker-compose  ps
    

    compose命令详解

    注意:

    所有命令尽量都在docker

    compose项目目录下面进行操作项目目录:docker-compose.yml所在目录

    ==compose服务启动、关闭、查看==

    #后台启动:
    docker-compose  up  -d
    #删除服务
    docker-compose  down
    #查看正在运行的服务
    docker-compose  ps
    

    容器开启、关闭、删除

    #启动一个服务
    docker-compose  start  <服务名>    
    #注意:
        #如果后面不加服务名,会停止所有的服务
    #停止一个服务
    docker-compose  stop  <服务名>
    #注意:
        #如果后面不加服务名,会停止所有的服务
    #删除服务
    docker-compose  rm
    #注意:
        #这个docker-compose rm不会删除应用的网络和数据卷。工作中尽量不要用rm进行删除
    

    其他信息查看

    #查看运行的服务
    docker-compose  ps
    #查看服务运行的日志
    docker-compose  logs  -f 
    #注意:
        #加上-f 选项,可以持续跟踪服务产生的日志
    #查看服务依赖的镜像
    docke-compose   images
    #进入服务容器
    docker-compose  exec  <服务名>  <执行命令>
    #查看服务网络
    docker  network  ls
    

    compose文件详解

    compose文件样例:

    version:  '2' # compose 版本号
    services:  # 服 务 标 识 符
        web1: # 子服务命名
        image:  nginx  # 服务依赖镜像属性
        ports: # 服务端口属性
            -  "9999:80" # 宿主机端口:容器端口
    container_name:  nginx-web1 # 容器命名
    

    格式详解:

    compose版本号、服务标识符必须顶格写
    属性名和属性值是以': '(冒号+空格) 隔开
    层级使用'   '(两个空格)表示
    服务属性使用' - '(空格空格-空格)来表示
    

    compose属性介绍

    #镜像
        格式:
            image:  镜像名称:版本号
        举例:
            image:  nginx:latest
    #容器命名:
        格式:
            container_name:  自定义容器命名
        举例:
            container_name:  nginx-web1
    #数据卷:
        格式:
            volumes:
                -宿主机文件:容器文件
        举例:
            volumes:
                -./linshi.conf:/nihao/haha.sh
    
    #端口:
        格式:
            ports:
                -"宿主机端口:容器端口"
        举例:
            ports:
                -  "9999:80"
    
    #镜像构建:
        格式:
            build:  Dockerfile  的路径
        举例:
            build:  .
            build:  ./dockerfile_dir/ 
            build:  /root/dockerfile_dir/
    #镜像依赖:
        格式:
            depends_on:
                -本镜像依赖于哪个服务
        举例:
            depends_on:
            -web1
    

    3.3.5go项目实践

    1.png
    需求:
    自动部署一个集群,使用nginx代理两个go项目流程分析:
    1、go项目部署
    2、nginx代理部署
    3、docker 环境
    4、docker compose任务编排
    
    技术点分析:
    1、go项目部署go项目基础环境
    go项目配置
    2、nginx代理部署
    nginx的配置文件
    3、docker 环境
    docker基础镜像
    go镜像
    nginx镜像
    4、docker compose任务编排
    4个任务:1个镜像构建任务、2个go任务、1个nginx任务
    任务依赖关系:go任务执行依赖于nginx任务镜像依赖:go镜像依赖于nginx镜像完毕
    实施方案:
    1、基础环境
    1.1compose基础目录
    1.2环境依赖文件:
    sources.list、test.go、test1.go、test2.go、nginx-beego.conf
    1.3dockerfile文件
    go项目环境的Dockerfile文件
    2、任务编排文件
    2.1nginx任务
    基于nginx镜像,增加一个nginx的代理配置即可
    2.2go基础镜像任务
    基于ubuntu镜像,构建go基础环境镜像,参考3.2.4内容该任务依赖于2.1 nginx任务
    2.3go项目任务
    基于go基础镜像,增加测试文件即可该任务依赖于2.2 go基础镜像任务
    3、测试
    3.1 集群测试
    

    方案实施

    • 基础环境
      • compose基础

    目录创建compose基础

    目录

    :~$  mkdir  /docker/compose/
    :~$  cd  /docker/compose/
    

    环境依赖文件:

    nginx配置文件

    创建nginx专用目录
    :~$  mkdir  nginx
    :~$  cd  nginx
    创建nginx负载均衡配置nginx-beego.conf
    :~$  vim  nginx-beego.conf
    

    文件内容

    upstream  beegos  {
    #upstream模块
        server  192.168.8.14:10086;
        server  192.168.8.14:10087;
        }
    server {
        listen  80;
        #提供服务的端口
        server_name  _;
        #服务名称
        location  /  {
            proxy_pass  http://beegos;
            #反选代理  upstream模块   beegos
            index  index.html  index.htm;
            #默认首页
        }
    }
    

    go基础镜像依赖文件

    #创建go基础镜像目录:
    :~$  mkdir  go-base
    :~$  cd  go-base
    #创建source.lise
    :~$  vim  sources.list
    

    文件内容

    deb  http://mirrors.aliyun.com/ubuntu/  xenial  main  restricted
    deb  http://mirrors.aliyun.com/ubuntu/  xenial-updates  main  restricted
    deb  http://mirrors.aliyun.com/ubuntu/  xenial  universe
    deb  http://mirrors.aliyun.com/ubuntu/  xenial-updates  universe
    deb  http://mirrors.aliyun.com/ubuntu/  xenial  multiverse
    deb  http://mirrors.aliyun.com/ubuntu/  xenial-updates  multiverse
    deb  http://mirrors.aliyun.com/ubuntu/  xenial-backports  main  restricted  universe multiverse
    deb  http://mirrors.aliyun.com/ubuntu/  xenial-security  main  restricted
    deb  http://mirrors.aliyun.com/ubuntu/  xenial-security  universe
    deb  http://mirrors.aliyun.com/ubuntu/  xenial-security  multiverse
    

    或者

    RUN  sed  -i  's/archive.ubuntu.com/mirrors.ustc.edu.cn/g'  /etc/apt/sources.list
    RUN  sed  -i  's/security.ubuntu.com/mirrors.ustc.edu.cn/g'  /etc/apt/sources.list
    

    test.go配置文件

    package  main
    import  (
    "github.com/astaxie/beego"
    )
    type  MainController  struct  {
    beego.Controller
    }
    
    func  (this MainController)  Get(){ this.Ctx.WriteString("hello  world\n")
    }
    
    func  main()  {
    beego.Router("/",  &MainController{}) beego.Run()
    

    go任务依赖文件: beego1/test.go配置文件

    package  main
    import  ( "github.com/astaxie/beego"
    type  MainController  struct  {
    beego.Controller
    }
    func  (this MainController)  Get(){
    this.Ctx.WriteString("<h1>hello  beego1</h1>\n")
    }
    func  main()  {
    beego.Router("/",  &MainController{}) beego.Run()
    }
    

    Beego2/test.go配置文件

    package  main
    import  (
    "github.com/astaxie/beego"
    )
    type  MainController  struct  {
    beego.Controller
    }
    
    func  (this MainController)  Get(){ this.Ctx.WriteString("<h1>hello  beego2</h1>\n")
    }
    
    func  main()  {
    beego.Router("/",  &MainController{}) beego.Run()
    

    dockerfile文件

    go项目环境的Dockerfile文件

    创建Dockerfile文件

    :~$  vim  dockerfile
    

    文件内容

    #  构建一个基于ubuntu  的docker  定制镜像
    # 基础镜像
    FROM  ubuntu
    # 镜像作者
    MAINTAINER  panda  kstwoak47@163.com
    # 增加国内源
    #COPY  sources.list  /etc/apt/ 
    
    RUN  sed  -i  's/archive.ubuntu.com/mirrors.ustc.edu.cn/g'  /etc/apt/sources.list
    RUN  sed  -i  's/security.ubuntu.com/mirrors.ustc.edu.cn/g'  /etc/apt/sources.list
    
    # 执行命令
    RUN  apt-get  update
    RUN  apt-get  install  gcc  libc6-dev  git  lrzsz  -y
    #将go复制解压到容器中
    ADD  go1.10.linux-amd64.tar.gz  /usr/local/
    # 定制环境变量
    ENV  GOROOT=/usr/local/go
    ENV  PATH=$PATH:/usr/local/go/bin ENV  GOPATH=/root/go
    ENV  PATH=$GOPATH/bin/:$PATH
    # 下载项目
    #RUN  go  get  github.com/astaxie/beego
    ADD  astaxie.tar.xz /root/go/src/github.com
    # 增加文件
    COPY  test.go  /root/go/src/myTest/
    # 定制工作目录
    WORKDIR  /root/go/src/myTest/
    # 对外端口
    EXPOSE 8080
    # 运行项目
    ENTRYPOINT  ["go","run","test.go"]
    

    最终的文件目录结构


    2.png

    任务编排文件

    docker-compose.yml文件内容

    version:  '2'
        services: 
            web1:
                image:  nginx 
            ports:
                -  "9999:80"
            volumes:
                -  ./nginx/nginx-beego.conf:/etc/nginx/conf.d/default.conf
            #将配置文件映射到nginx的配置文件位置 
            container_name:  nginx-web1
    go-base:
        build:  ./go-base/ 
        image:  go-base:v0.1
    
    beego-web1:
        image:  go-base:v0.1 
        volumes:
            -  ./beego1/test.go:/root/go/src/myTest/test.go 
        ports:
            -  "10086:8080"
        container_name:  beego-web1 
        depends_on:
            -go-base
    
    beego-web2:
        image:  go-base:v0.1 
        volumes:
            -./beego2/test.go:/root/go/src/myTest/test.go 
        ports:
            -  "10087:8080"
        container_name:  beego-web2 
        depends_on:
            -go-base
    

    最后测试

    #构建镜像
    $docker-compose  build
    #启动任务
    $docker-compose  up  -d
    #查看效果
    $docker-compose  ps
    #浏览器访问
    192.168.110.5:9999
    

    相关文章

      网友评论

          本文标题:Docker compose(五)

          本文链接:https://www.haomeiwen.com/subject/oklujctx.html