dongnan
总版主
总版主
  • 粉丝52
  • 发帖数2160
  • 铜币13127枚
  • 威望5808点
  • 银元150个
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 原创写手
阅读:1956回复:5

docker 编排工具 docker-compose

楼主#
更多 发布于:2016-09-30 15:13
功能
Docker Compose 是 Docker 官方编排(Orchestration)项目之一,负责快速在集群中部署分布式应用;

Dockerfile 可以让用户管理一个单独的应用容器;而 Compose 则允许用户在一个模板(YAML 格式)中定义一组相关联的应用容器(被称为一个 project,即项目),例如一个 Web 服务容器再加上后端的数据库服务容器等。

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

场景

创建一个经典的 Web 项目:一个 Haproxy 容器,两个 Web 容器
创建一个 compose-haproxy-web 目录,作为项目工作目录,并在其中分别创建两个子目录:haproxy 和 web。

docker-compose 安装部署
1. 准备工作
安装docker-compose 依赖 docker-engine 1.10 版本以上(for Xx-compose.yml version2),所以需要先安装docker-engine ,可以参考这里:
centos 7 部署 docker
ubuntu 安装 docker 最新版本

2. 安装 compose
curl -L https://github.com/docker/compose/releases/download/1.8.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose


3. 验证
docker-compose --version
docker-compose version 1.8.0, build f3628c7

参考
https://github.com/docker/compose/releases
https://docs.docker.com/compose/install/

扩展
docker-compose 部署 harbor 仓库


更新 curl -L "https://github.com/docker/compose/releases/download/1.11.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
https://docs.docker.com/compose/install/#alternative-install-options
#
dongnan
总版主
总版主
  • 粉丝52
  • 发帖数2160
  • 铜币13127枚
  • 威望5808点
  • 银元150个
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 原创写手
沙发#
发布于:2016-10-12 14:03
docker-compose 命令
帮助
docker-compose --help
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
  bundle             Generate a Docker bundle from the Compose file
  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
  push               Push 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

示例
1. 停止服务
docker-compose stop
Stopping deploy_jobservice_1 ... done
Stopping deploy_proxy_1 ... done
Stopping deploy_registry_1 ... done
Stopping deploy_ui_1 ... done
Stopping deploy_mysql_1 ... done
Stopping deploy_log_1 ... done

2. 启动服务
docker-compose start
Starting log ... done
Starting ui ... done
Starting mysql ... done
Starting jobservice ... done
Starting registry ... done
Starting proxy ... done

3. 销毁服务
#停止/移除,容器,网络,镜像,存储卷
docker-compose down
Stopping deploy_jobservice_1 ... done
Stopping deploy_proxy_1 ... done
Stopping deploy_registry_1 ... done
Stopping deploy_ui_1 ... done
Stopping deploy_mysql_1 ... done
Stopping deploy_log_1 ... done
Removing deploy_jobservice_1 ... done
Removing deploy_proxy_1 ... done
Removing deploy_registry_1 ... done
Removing deploy_ui_1 ... done
Removing deploy_mysql_1 ... done
Removing deploy_log_1 ... done
Removing network deploy_default

4. 创建服务
docker-compose up -d
Creating network "deploy_default" with the default driver
Creating deploy_log_1
Creating deploy_registry_1
Creating deploy_mysql_1
Creating deploy_ui_1
Creating deploy_jobservice_1
Creating deploy_proxy_1

5. 列出容器
docker-compose ps
       Name                      Command                 State                       Ports                  
------------------------------------------------------------------------------------------------------------
deploy_jobservice_1   /go/bin/harbor_jobservice        Up                                                    
deploy_log_1          /bin/sh -c cron && rsyslogd -n   Up           0.0.0.0:1514->514/tcp                    
deploy_mysql_1        docker-entrypoint.sh mysqld      Up           3306/tcp                                
deploy_proxy_1        nginx -g daemon off;             Up           0.0.0.0:443->443/tcp, 0.0.0.0:80->80/tcp
deploy_registry_1     /entrypoint.sh serve /etc/ ...   Restarting   5000/tcp, 0.0.0.0:5001->5001/tcp        
deploy_ui_1           /go/bin/harbor_ui                Up           80/tcp                        

6. 关闭指定的 compose 容器
ls *.yml
es.yml  tomcat.yml

# -f 参数
docker-compose -f es.yml down
Stopping quickstart_kibana_1 ... done
省略...
Removing network quickstart_default


#
dongnan
总版主
总版主
  • 粉丝52
  • 发帖数2160
  • 铜币13127枚
  • 威望5808点
  • 银元150个
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 原创写手
板凳#
发布于:2017-05-23 10:32
dongnan
总版主
总版主
  • 粉丝52
  • 发帖数2160
  • 铜币13127枚
  • 威望5808点
  • 银元150个
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 原创写手
地板#
发布于:2017-05-23 10:36
docker-compose 创建的volume 在哪里?
docker inspect  r-ywwd-nginx
省略....
        "Mounts": [
            {
                "Type": "volume",
                "Name": "compose_web_data",
                "Source": "/var/lib/docker/volumes/compose_web_data/_data",
                "Destination": "/var/www/html",
                "Driver": "local",
                "Mode": "rw",
                "RW": true,
                "Propagation": ""
            }
        ],
省略....
#
dongnan
总版主
总版主
  • 粉丝52
  • 发帖数2160
  • 铜币13127枚
  • 威望5808点
  • 银元150个
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 原创写手
4楼#
发布于:2017-09-26 10:40
docker-compose label
错误描述
docker-compose up
ERROR: The Compose file './docker-compose.yml' is invalid because:
services.irm-db.labels contains {"aliyun.logs.mysql": "stdout"}, which is an invalid type, it should be a string
省略...

docker-compose.yml 配置文件
labels 部分定义如下,
   labels:
      - aliyun.logs.mysql: stdout
      - aliyun.logs.mysql.tags: item=irm-db

错误原因

语法错误,导致 docker-compose 解析错误

解决方法
调整 labels 定义语法,如下(去掉了 "-",符号 ):
   labels:
      aliyun.logs.mysql: stdout
      aliyun.logs.mysql.tags: item=irm-db

扩展: docker-compose labels
labels 接受两种定义方式,选择其中一种即可:
labels:
  com.example.description: "Accounting webapp"
  com.example.department: "Finance"
  com.example.label-with-empty-value: ""
或者
labels:
  - "com.example.description=Accounting webapp"
  - "com.example.department=Finance"
  - "com.example.label-with-empty-value"

#
dongnan
总版主
总版主
  • 粉丝52
  • 发帖数2160
  • 铜币13127枚
  • 威望5808点
  • 银元150个
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 原创写手
5楼#
发布于:2018-07-03 10:13
docker-compose up 注意事项
默认情况下,如果服务容器已经存在, docker-compose up 将会尝试停止容器,然后重新创建(保持使用 volumes-from 挂载的卷),以保证新启动的服务匹配 docker-compose.yml文件的最新内容。

如果不希望容器被停止并重新创建, 可以使用 docker-compose up --no-recreate ,这样将只会启动处于停止状态的容器,而忽略已经运行的服务。


如果只想重新部署某个服务,可以使用 docker-compose up --no-deps -d <SERVICE_NAME>  来重新创建服务并后台停止旧服务,启动新服务,并不会影响到其所依赖的服务。


docker-compose up -h
Builds, (re)creates, starts, and attaches to containers for a service.
...省略

Usage: up [options] [SERVICE...]

Options:
    -d                         Detached mode: Run containers in the background,
                               print new container names.
                               Incompatible with --abort-on-container-exit.
    --no-color                 Produce monochrome output.
    --no-deps                  Don't start linked services.
    --force-recreate           Recreate containers even if their configuration
                               and image haven't changed.
                               Incompatible with --no-recreate.
    --no-recreate             If containers already exist, don't recreate them.
                               Incompatible with --force-recreate.
    --no-build                 Don't build an image, even if it's missing.
    --build                    Build images before starting containers.
    --abort-on-container-exit  Stops all containers if any container was stopped.
                               Incompatible with -d.
    -t, --timeout TIMEOUT      Use this timeout in seconds for container shutdown
                               when attached or when containers are already
                               running. (default: 10)
    --remove-orphans           Remove containers for services not
                               defined in the Compose file
游客

返回顶部