zoukankan      html  css  js  c++  java
  • 12、docker compose

    Docker Compose 是Docker官方编排(Orchestration)项目之一,负责快速在集群中部署分布式应用。Compose定位是“defining and running complex applications with Docker”,前身是 Fig,兼容 Fig 的模板文件。

    1、docker-compose简介

      学了前面的章节内容,我们知道dockerfile可以让用户管理一个单独的应用容器,而今天即将学习的compose则是允许用户在一个模板(YAML格式)中定义一组相关联的应用容器(被称为一个project,即项目),例如:一台web服务容器关联后端的数据库服务容器等。

      docker-compose将所管理的容器分为三层,分别是工程(project),服务(service)以及容器(container)。docker-compose运行目录下的所有文件(docker-compose.yml,extends文件或环境变量文件等)组成一个工程,若无特殊指定工程名即为当前目录名。一个工程当中可包含多个服务,每个服务中定义了容器运行的镜像、参数、依赖。

      一个服务当中可包括多个容器实例,docker-compose并没有解决负载均衡的问题,因此需要借助其它工具实现服务发现及负载均衡。

      docker-compose的配置文件默认为docker-compose.yml,可通过环境变量COMPOSE_FILE或-f参数自定义配置文件,其定义了多个有依赖关系的服务及每个服务运行的容器

      使用dockerfile模板文件,可以让用户很方便的定义一个单独的应用容器。在工作中,经常会碰到需要多个容器相互配合来完成某项目任务的情况。例如要实现一个web项目,除了web服务容器本身,往往还需要再加上后端的数据库服务容器,甚至还包括负载均衡容器等。

      docker-compose允许用户通过单独的docker-compose.yml模板文件(YAML格式)来定义一组相关联的应用容器为一个项目(project)。

      docker-compose项目有Python编写,调用docker服务提供的API来对容器进行管理。因此,只要所操作的平台支持docker API ,就可以在其上利用compose来进行编排管理。

    2、docker-compose部署安装

    1、使用pip安装

    安装compose之前,需要先安装docker引擎服务,此处使用PIP安装compose项目,要求系统必须提前安装pip工具,然后执行如下命令:

    pip install --upgrade pip
    pip install -U docker-compose

    2、直接下载安装

    gitlab https://github.com/docker/compose/releases 上查询适合自己的版本

     

    我这里下载的是1.23.2 版本

     

    安装成功后,可以查看 docker-compose 命令的用法,执行如下指令:
    docker-compose -h

    curl -L https://github.com/docker/compose/releases/download/1.23.2/docker-compose-Linux-x86_64 -o /usr/local/bin/docker-compose

    添加执行权限

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

    安装完成查看版本

    docker-compose --version
    docker-compose version 1.23.2, build 1110ad01

    安装完成之后,可以添加 bash 补全命令。
    curl -L https://raw.githubusercontent.com/docker/compose/1.2.0/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose

     3、 Docker-Compose常见概念

    服务(service):一个应用容器,实际上可以运行多个相同镜像的实例。
    项目(project):由一组关联的应用容器组成的一个完整业务单元。
    一个项目可以由多个服务(容器)关联而成,Compose是 面向项目进行管理。

    4、Docker-Compose实战案例一

    基于docker-compose构建Nginx容器,并且实现发布目录映射,通过浏览器实现访问,操作步骤如下:

    Docker pull nginx
    
    Docker run -itd -v /data/webapps/www:/usr/share/nginx/html -p 80:80 nginx

    1)编写docker-compose.yml文件,内容如下:

    version: "3" 
    services: nginx: container_name: www
    -nginx image: nginx:latest restart: always ports: - 80:80 volumes: - /data/webapps/www/:/usr/share/nginx/html/

    2)创建发布目录:/data/webapps/www/,并且在发布目录新建index.html页面,命令如下:

    mkdir -p /data/webapps/www/
    echo "<h1>Nginx Test pages.</h1>" >>/data/webapps/www/index.html

    3)启动和运行docker-compose,启动Nginx容器,命令如下:

    [root@hackerlin src]# docker-compose up -d
    Creating www-nginx ... done

    4)通过浏览器访问宿主机80端口,即可访问Nginx容器,如图所示:

     

    5)docker-compose.yml内容剖析:

    version:版本号,通常写2和3版本;

    serviceDocker容器服务名称;

    container_name:容器的名称

    restart:设置为always,容器在停止的情况下总是重启;

    imagedocker官方镜像上找到最新版的镜像。

    ports:容器自己运行的端口号和需要暴露的端口号

    volumes:数据卷。表示数据、配置文件等存放的位置。(- . 这个表示docker-compose.yml当前目录)

     5、Docker-Compose实战案例二

    基于docker-compose构建Nginx容器和Tomcat容器,并且实现Nginx和Tomcat发布目录映射,同时实现nginx均衡tomcat服务,通过浏览器访问Nginx 80端口即访问Tomcat的8080端口,操作步骤如下:
    1)编写docker-compose.yml文件,内容如下:

    version: "3"
    services: tomcat01: container_name: tomcat01 image: tomcat:latest restart: always ports: - 8080 tomcat02: container_name: tomcat02 image: tomcat:latest restart: always ports: - 8080 nginx: container_name: www-nginx image: nginx:latest restart: always ports: - 80:80 volumes: - /data/webapps/www/:/usr/share/nginx/html/ - ./default.conf:/etc/nginx/conf.d/default.conf links: - tomcat01 - tomcat02

    2)创建发布目录:/data/webapps/www/,并且在发布目录新建index.html页面,命令如下:

    mkdir -p /data/webapps/www/
    echo "<h1>www.jfedu.net Nginx Test pages.</h1>" >>/data/webapps/www/index.html

    3)创建nginx默认配置文件:default.conf,内容如下:

    upstream tomcat_web {
            server tomcat01:8080 max_fails=2 fail_timeout=15;
            server tomcat02:8080 max_fails=2 fail_timeout=15;
    }
    server {
        listen       80;
        server_name  localhost;
        location / {
            root   /usr/share/nginx/html;
            index  index.html index.htm;
            proxy_pass http://tomcat_web;
            proxy_set_header host $host;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    }

    4)启动Docker-compose,命令&如图所示:
    docker-compose up -d

    [root@hackerlin src]# docker-compose up -d
    Pulling tomcat01 (tomcat:latest)...
    Trying to pull repository docker.io/library/tomcat ... 
    latest: Pulling from docker.io/library/tomcat
    f15005b0235f: Downloading
    f15005b0235f: Pull complete
    41ebfd3d2fd0: Pull complete
    b998346ba308: Pull complete
    f01ec562c947: Pull complete
    74c11ae3efe8: Pull complete
    3a7e595a3ef5: Pull complete
    8c8a4c437687: Pull complete
    866db09728a7: Pull complete
    e72e289c6e49: Pull complete
    05db22411525: Pull complete
    Creating tomcat02 ... done
    Creating tomcat01 ... done
    Recreating www-nginx ... done

    5)通过浏览器直接访问Nginx容器,默认访问宿主机的80端口即可,如图所示:

     

    6)查看运行的dockerS容器引用的状态和进程信息,命令如下:

    [root@hackerlin src]# docker-compose ps
      Name            Command          State            Ports         
    ------------------------------------------------------------------
    tomcat01    catalina.sh run        Up      0.0.0.0:32769->8080/tcp
    tomcat02    catalina.sh run        Up      0.0.0.0:32768->8080/tcp
    www-nginx   nginx -g daemon off;   Up      0.0.0.0:80->80/tcp     
    [root@hackerlin src]# docker-compose top
    tomcat01
    UID     PID    PPID    C   STIME   TTY     TIME                                                  CMD                                             
    -------------------------------------------------------------------------------------------------------------------------------------------------
    root   20793   20754   2   02:20   ?     00:00:03   /usr/local/openjdk-8/bin/java                                                                
                                                        -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties                    
                                                        -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager                            
                                                        -Djdk.tls.ephemeralDHKeySize=2048                                                            
                                                        -Djava.protocol.handler.pkgs=org.apache.catalina.webresources                                
                                                        -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath
                                                        /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar                    
                                                        -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat                          
                                                        -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start          
    
    tomcat02
    UID     PID    PPID    C   STIME   TTY     TIME                                                  CMD                                             
    -------------------------------------------------------------------------------------------------------------------------------------------------
    root   20786   20755   3   02:20   ?     00:00:03   /usr/local/openjdk-8/bin/java                                                                
                                                        -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties                    
                                                        -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager                            
                                                        -Djdk.tls.ephemeralDHKeySize=2048                                                            
                                                        -Djava.protocol.handler.pkgs=org.apache.catalina.webresources                                
                                                        -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath
                                                        /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar                    
                                                        -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat                          
                                                        -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start          
    
    www-nginx
    UID     PID    PPID    C   STIME   TTY     TIME                        CMD                    
    ----------------------------------------------------------------------------------------------
    root   20928   20911   0   02:20   ?     00:00:00   nginx: master process nginx -g daemon off;
    101    20971   20928   0   02:20   ?     00:00:00   nginx: worker process                     
  • 相关阅读:
    matlab 绘制条状图形
    细思恐极 天价房都被谁买去了?——如何操作?
    matlab中的containers.Map()
    林彪:怎样当好一个师长?
    matlab 怎么建立结构体数组?
    matlab中patch函数的用法
    Ubuntu 安装配置MySQL,并使用VS的Server Explorer UI界面远程管理MySQL
    CLIQUE 聚类算法以及Java实现+多线程
    R 中同步进行的多组比较的包:npmc
    基于D3JS绘制中国地图
  • 原文地址:https://www.cnblogs.com/hackerlin/p/12718302.html
Copyright © 2011-2022 走看看