dockercompose容器编排

KeepMoving KeepMoving     2022-09-24     213

关键词:

Compose是Docker官方的开源项目,可以实现对Docker容器集群的快速编排。
Compose 中有两个重要的概念:
服务(service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。
项目(project):由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义。

一、安装Compose

Compose由python开发,因此可以使用pip方式进行安装。

# pip install -U docker-compose

安装成功后可以查看docker-compose的用法:

# docker-compose -h
Define and run multi-container applications with Docker.

Usage:
  docker-compose [-f=<arg>...] [options] [COMMAND] [ARGS...]
  docker-compose -h|--help

Options:
  -f, --file FILE             Specify an alternate compose file (default: docker-compose.yml)
  -p, --project-name NAME     Specify an alternate project name (default: directory name)
  --verbose                   Show more output
  -v, --version               Print version and exit
  -H, --host HOST             Daemon socket to connect to

  --tls                       Use TLS; implied by --tlsverify
  --tlscacert CA_PATH         Trust certs signed only by this CA
  --tlscert CLIENT_CERT_PATH  Path to TLS certificate file
  --tlskey TLS_KEY_PATH       Path to TLS key file
  --tlsverify                 Use TLS and verify the remote
  --skip-hostname-check       Don't check the daemon's hostname against the name specified
                              in the client certificate (for example if your docker host
                              is an IP address)

Commands:
  build              Build or rebuild services
  config             Validate and view the compose file
  create             Create services
  down               Stop and remove containers, networks, images, and volumes
  events             Receive real time events from containers
  exec               Execute a command in a running container
  help               Get help on a command
  kill               Kill containers
  logs               View output from containers
  pause              Pause services
  port               Print the public port for a port binding
  ps                 List containers
  pull               Pulls service images
  restart            Restart services
  rm                 Remove stopped containers
  run                Run a one-off command
  scale              Set number of containers for a service
  start              Start services
  stop               Stop services
  unpause            Unpause services
  up                 Create and start containers
  version            Show the Docker-Compose version information

添加bash补全命令:

# curl -L https://raw.githubusercontent.com/docker/compose/1.8.0/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose

其它安装方式:二进制包、容器中运行。

二、Compose命令说明

格式:
docker-compose [-f=<arg>...] [options] [COMMAND] [ARGS...]
选项:
-f, --file FILE 指定使用的 Compose 模板文件,默认为 docker-compose.yml,可以多次指定。
-p, --project-name NAME 指定项目名称,默认将使用所在目录名称作为项目名。
--x-networking 使用 Docker 的可拔插网络后端特性(需要 Docker 1.9 及以后版本)。
--x-network-driver DRIVER 指定网络后端的驱动,默认为 bridge(需要 Docker 1.9 及以后版本)。
--verbose 输出更多调试信息。
-v, --version 打印版本并退出
常用命令使用说明:

三、Compose模板文件
默认的模板文件名称为 docker-compose.yml,格式为 YAML 格式。
版本1中,其中每个顶级元素为服务名称,次级元素为服务容器的配置信息,例如

webapp:
  image: examples/web
  ports:
    - "80:80"
  volumes:
    - "/data"

版本2扩展了 Compose 的语法,同时尽量保持跟版本1的兼容,除了可以声明网络和存储信息外,最大的不同一是添加了版本信息,另一个是需要将所有的服务放到 services 根下面。版本2写法如下:

version: "2"
services:
  webapp:
    image: examples/web
    ports:
      - "80:80"
    volumes:
      - "/data"

每个服务都必须通过 image 指令指定镜像或 build 指令(需要 Dockerfile)等来自动构建生成镜像。
常用指定如下:

四、使用docker-compose编排nginx、tomcat集群

创建一个名为compose-tomcat-nginx的目录,作为项目工作目录,并在其中创建两个子目录:nginx、tomcat。目录结构如下:

# tree
.
├── docker-compose.yml
├── nginx
│   ├── Dockerfile
│   ├── nginx-1.8.0.tar.gz
│   ├── nginx.conf
│   └── nginx-sticky.tar.gz
└── tomcat
    ├── apache-tomcat-7.0.56.tar.gz
    ├── Dockerfile
    └── jdk-8u73-linux-x64.tar.gz

2 directories, 8 files

 docker-compose.yml文件内容如下:

# cat docker-compose.yml
tomcat1:
    build: ./tomcat
    expose:
        - 8080

tomcat2:
    build: ./tomcat
    expose:
        - 8080

nginx:
    build: ./nginx  
    links:
        - tomcat1:t01
        - tomcat2:t02
    ports:
        - "80:80"
    expose:
        - "80"

tomcat的Dockerfile文件内容如下:

# cat Dockerfile
FROM centos:6.9
MAINTAINER eivll0m@163.com

ADD jdk-8u73-linux-x64.tar.gz /app

ENV JAVA_HOME /app/jdk1.8.0_73

ADD apache-tomcat-7.0.56.tar.gz /app

WORKDIR /app/apache-tomcat-7.0.56

ENTRYPOINT ["bin/catalina.sh","run"]

EXPOSE 8080

nginx的Dockerfile文件内容如下:

FROM centos:6.9
MAINTAINER eivll0m@163.com

ADD nginx-1.8.0.tar.gz /app
ADD nginx-sticky.tar.gz /app

RUN yum -y install gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel

RUN cd /app/nginx-1.8.0 \
    && ./configure --prefix=/app/nginx  --add-module=/app/nginx-sticky \
    && make \
    && make install
COPY nginx.conf /app/nginx/conf

cmd ["/app/nginx/sbin/nginx", "-g", "daemon off;"]

EXPOSE 80

nginx.conf文件内容如下(未优化):

# cat nginx.conf

user  root root;
worker_processes  2;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    gzip on;
    gzip_comp_level 6;
    gzip_proxied any;
    gzip_buffers 4 8k;
    gzip_min_length 1024;
    gzip_types text/plain text/xml text/css application/x-javascript text/javascript image/jpeg;

    proxy_buffer_size 64k;
    proxy_buffers   32 32k;
    proxy_ignore_client_abort on;
    client_header_buffer_size 4k;
    client_max_body_size 50m;
    #send_timeout 5m;

    upstream tomcat_client {
         sticky;
         server t01:8080 weight=1;
         server t02:8080 weight=1;
    }

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;
	location / {
            proxy_pass http://tomcat_client;
            proxy_redirect default;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }


	#location ~ ^/console/ {
        #        proxy_pass      http://mh.lkpower.com;
        #        ssi on;
        #        proxy_redirect off;
        #}
	#location ~ ^/hospital/ {
        #        proxy_pass      http://mh.lkpower.com;
        #        ssi on;
        #        proxy_redirect off;
        #}
        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
    }

}

运行docker-compose:

# docker-compose up     #前台
# docker-compose up -d  #后台

其它相关命令:

# docker-compose ps
# docker-compose build --no-cache --force-rm
# docker-compose rm --all
# docker-compose scale tomcat1=5

弹性伸缩:

本集群实现了nginx代理后端tomcat,并实现了session保持。

dockercompose容器编排(代码片段)

本章知识点概括:DockerCompose容器编排构建自动发现的Docker服务架构实现容器服务自动加入Nginx集群**DockerCompose容器编排功能**Dockercompose的前身是Fig,它是一个定义及运行多个docker容器的工具使用DockerCompose不再需要使用shell脚本来... 查看详情

dockercompose编排(写法格式及实验)(代码片段)

目录一、DockerCompose前言二、Dockercompose的文件结构1、dockercompose配置常用字段2、dockercompose常用命令三、使用compose编排1、使用compose编排安装运行tomcat容器2、使用compose编排创建容器(以tomcat为例)一、DockerCompose前言DockerCo... 查看详情

dockercompose容器编排工具(代码片段)

DockerCompose容器编排工具一、DockerCompose理论知识1.1、Compose工具的由来Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。?使用前面介绍的Dockerfile文件可以很容易定义一个单独的应用容器。然而在日常开发工... 查看详情

云原生容器编排技术dockercompose(代码片段)

为什么需要DockerComposeDockerCompose介绍DockerCompose安装DockerCompose版本介绍DockerCompose基本命令介绍DockerCompose实战DockerComposeYml文件介绍总结为什么需要DockerComposeDocker帮助我们解决服务的打包安装的问题,随着而来的问题就是服务... 查看详情

dockercompose编排工具(代码片段)

DockerCompose介绍Compose项⽬是Docker官⽅的开源项⽬,负责实现对Docker容器集群的快速编排。从功能上看,跟OpenStack中的Heat十分类似。其代码⽬前在https://github.com/docker/compose上开源Compose定位是(定义和运⾏多个Docker容器的应⽤... 查看详情

docker------dockercompose编排(代码片段)

目录前言一.Docker-compose简介二.Compose部署1.DockerCompose环境安装2.YAML文件格式及编写注意事项3.DockerCompose配置常用字段4.DockerCompose常用命令5.DockerCompose文件结构三.使用Compose编排创建Nginx容器1.准备依赖文件2.编写配置文件docker-compose... 查看详情

docker------dockercompose编排(代码片段)

目录前言一.Docker-compose简介二.Compose部署1.DockerCompose环境安装2.YAML文件格式及编写注意事项3.DockerCompose配置常用字段4.DockerCompose常用命令5.DockerCompose文件结构三.使用Compose编排创建Nginx容器1.准备依赖文件2.编写配置文件docker-compose... 查看详情

使用dockercompose编排容器(代码片段)

一、安装dockercompose二进制包安装1、安装DockerCompose 从官方GitHubRelease处直接下载编译好的二进制文件即可#curl-Lhttps://github.com/docker/compose/releases/download/1.8.0/docker-compose-`uname-s`-`uname-m`>/usr/local/bin/docker-compose[[email protected]~]#... 查看详情

docker从入门到实践系列四-docker容器编排利器dockercompose(代码片段)

文章目录Compose简介概念组成安装与卸载二进制包方式安装测试卸载docker-compose.yml文件详解概念案例versionservicesimagebuildcontextdockerfilecontainer_namedepends_onportsexposerestartenvironmentenv_filecommandvolumesnetwork_modenetworksali 查看详情

docker高级管理(docker-compose编排工具,consul架构)(代码片段)

本章知识点概括:DockerCompose容器编排构建自动发现的Docker服务架构实现容器服务自动加入Nginx集群**DockerCompose容器编排功能**Dockercompose的前身是Fig,它是一个定义及运行多个docker容器的工具使用DockerCompose不再需要使用shell脚本来... 查看详情

阿里容器服务-编排模板语法简价

容器服务支持DockerCompose编排模板来描述多容器应用。作用:用于描述一个完整的应用,该应用可由好多个服务组成。例如一个web,他是由nginx/httpd+php+mysql组成。甚至可以根据服务量启动两个甚至更多的容器。能力:容器服务支持... 查看详情

docker-compose容器集群的快速编排(代码片段)

Docker-Compose介绍一、Docker-compose简介二、compose部署1.DockerCompose环境安装2.YAML文件格式及编写注意事项3.DockerCompose配置常用字段4.DockerCompose常用命令5.DockerCompose文件结构总结一、Docker-compose简介____Docker-Compose项目是Docker官方的开源... 查看详情

docker容器之compose编排consul集群template模板(代码片段)

dockercompose容器编排(1)dockercompose的前身Fig,它是一个定义及运行多个docker容器的工具(2)使用dockercompose不再需要使用shell脚本启动容器(3)dockercompose非常适合组合使用多个容器进行开发的场景YAML是一种标记语言很直观的数... 查看详情

docker容器——compose编排_consul集群_template模板(代码片段)

dockercompose容器编排(1)dockercompose的前身Fig,它是一个定义及运行多个docker容器的工具(2)使用dockercompose不再需要使用shell脚本启动容器(3)dockercompose非常适合组合使用多个容器进行开发的场景YAML是一种标记语言很直观的数... 查看详情

跟我一起学docker(12)--dockercompose的使用

1.什么是DockerCompose?编排和配置容器集群的工具。编排:定义被部署的对象的各组成部分之间的耦合关系,部署流程中各个动作的执行顺序,部署过程所需要的依赖文件和被部署文件的存储位置和获取方式,以及如何验证部署成... 查看详情

docker-compose容器快速单机编排(代码片段)

...ompose一.Docker-compose概述二.YAML文件格式及编写注意事项三.DockerCompose配置常用字段四.DockerCompose常用命令五.DockerCompose文件结构六.compose部署Nginx一.Docker-compose概述•Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器... 查看详情

docker-compose容器快速单机编排(代码片段)

...ompose一.Docker-compose概述二.YAML文件格式及编写注意事项三.DockerCompose配置常用字段四.DockerCompose常用命令五.DockerCompose文件结构六.compose部署Nginx一.Docker-compose概述•Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器... 查看详情

容器编排工具dockercompose(代码片段)

一、DockerCompose 概述Compose是一个用于定义和运行多容器Docker应用程序的工具。使用Compose,您可以使用Compose文件来配置应用程序的服务。然后,使用单个命令,您可以从配置中创建并启动所有服务。  Compose非常适合开发,... 查看详情