作者 | 飘渺Jam

责编 | 屠敏

出品 | CSDN 博客

what & why

Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。使用前面介绍的Dockerfile我们很容易定义一个单独的应用容器。然而在日常开发工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。例如要实现一个 Web 项目,除了 Web 服务容器本身,往往还需要再加上后端的数据库服务容器;再比如在分布式应用一般包含若干个服务,每个服务一般都会部署多个实例。如果每个服务都要手动启停,那么效率之低、维护量之大可想而知。这时候就需要一个工具能够管理一组相关联的的应用容器,这就是Docker Compose。

Compose有2个重要的概念:

  • 项目(Project):由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义。
  • 服务(Service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。

docker compose 安装与卸载

安装

二进制包在线安装

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

这个方法现在基本行不通,下载太慢了,不推荐使用。

二进制包离线安装

从https://github.com/docker/compose/releases/download/1.25.0/docker-compose-Linux-x86_64下载对应的安装包,比如我下载了Linux-x86_64的。

将下载好的安装包剪切到/usr/local/bin/docker-compose目录下mv/app/download/docker-compose-Linux-x86_64/usr/local/bin/docker-compose

添加执行权限

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

pip安装

  • 先安装好pip工具
#安装依赖
yum -y install epel-release
#安装PIP
yum -y install python-pip
#升级PIP
pip install --upgrade pip

  • 验证pip 版本
[root@tymonitor bin]# pip --version
pip 8.1.2 from /usr/lib/python2.7/site-packages (python 2.7)

  • 安装docker composepip install -U docker-compose==1.25.0
  • 验证docker compose版本
[root@tymonitor bin]# docker-compose --version
docker-compose version 1.25.0, build b42d419

安装补全插件

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

卸载

二进制卸载

rm /usr/local/bin/docker-compose

pip卸载

pip uninstall docker-compose

docker compose 重要命令

命令选项

  • -f, --file FILE 指定使用的 Compose 模板文件,默认为 docker-compose.yml,可以多次指定。
  • -p, --project-name NAME 指定项目名称,默认将使用所在目录名称作为项目名。
  • –x-networking 使用 Docker 的可拔插网络后端特性
  • –x-network-driver DRIVER 指定网络后端的驱动,默认为 bridge
  • –verbose 输出更多调试信息。
  • -v, --version 打印版本并退出。

常用&重要命令

  • config验证 Compose 文件格式是否正确,若正确则显示配置,若格式错误显示错误原因。如:docker-compose -f skywalking.yml config此命令不会执行真正的操作,而是显示 docker-compose 程序解析到的配置文件内容
  • images列出 Compose 文件中包含的镜像。如docker-compose -f skywalking.yml images
  • ps列出项目中目前的所有容器。如docker-compose -f skywalking.yml ps
  • build构建(重新构建)项目中的服务容器。如:docker-compose -f skywalking.yml build,一般搭配自定义镜像,比如编写的Dockfile,功能类似于docker build .
  • up该命令十分强大(重点掌握),它将尝试自动完成包括构建镜像,(重新)创建服务,启动服务,并关联服务相关容器的一系列操作。如docker-compose -f skywalking.yml up。默认情况,docker-compose up 启动的容器都在前台,控制台将会同时打印所有容器的输出信息,可以很方便进行调试。如果使用docker-compose up -d将会在后台启动并运行所有的容器。一般推荐生产环境下使用该选项。默认情况,如果服务容器已经存在,docker-compose up 将会尝试停止容器,然后重新创建(保持使用 volumes-from 挂载的卷),以保证新启动的服务匹配 docker-compose.yml 文件的最新内容。如果用户不希望容器被停止并重新创建,可以使用 docker-compose up --no-recreate。这样将只会启动处于停止状态的容器,而忽略已经运行的服务。如果用户只想重新部署某个服务,可以使用 docker-compose up --no-deps -d <SERVICE_NAME> 来重新创建服务并后台停止旧服务,启动新服务,并不会影响到其所依赖的服务。此命令有如下选项:①:-d 在后台运行服务容器。②:--no-color 不使用颜色来区分不同的服务的控制台输出。③:--no-deps 不启动服务所链接的容器。④:--force-recreate 强制重新创建容器,不能与 --no-recreate 同时使用。⑤:--no-recreate 如果容器已经存在了,则不重新创建,不能与 --force-recreate 同时使用。⑥:--no-build 不自动构建缺失的服务镜像。⑦:-t, --timeout TIMEOUT 停止容器时候的超时(默认为 10 秒)。
  • down此命令停止用up命令所启动的容器并移除网络,如docker-compose -f skywalking.yml down
  • stop格式为 docker-compose stop [options] [SERVICE...]停止已经处于运行状态的容器,但不删除它。通过 docker-compose start 可以再次启动这些容器,如果不指定service则默认停止所有的容器。如docker-compose -f skywalking.yml stop elasticsearch选项:-t, --timeout TIMEOUT 停止容器时候的超时(默认为 10 秒)。
  • start启动已经存在的服务容器。用法跟上面的stop刚好相反,如docker-compose -f skywalking.yml start elasticsearch
  • restart重启项目中的服务。用法跟上面的stop,start一样
  • logs格式为docker-compose logs [options] [SERVICE...]查看服务容器的输出。默认情况下,docker-compose 将对不同的服务输出使用不同的颜色来区分。可以通过 --no-color 来关闭颜色。该命令在调试问题的时候十分有用。如docker-compose -f skywalking.yml logs 查看整体的日志,docker-compose -f skywalking.yml logs elasticsearch 查看单独容器的日志

docker compose 模板文件

模板文件是使用 Compose 的核心,涉及到的指令关键字也比较多。本文主要列出几个常见&重要的指令,其他指令大家可以自行百度。

默认的模板文件名称为 docker-compose.yml,格式为 YAML 格式。

version: '3'
services:elasticsearch:image: elasticsearch:6.8.5container_name: elasticsearchrestart: alwaysvolumes:- /app/skywalking/elasticsearch/data:/usr/share/elasticsearch/data:rw- /app/skywalking/elasticsearch/conf/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml- /app/skywalking/elasticsearch/conf/jvm.options:/usr/share/elasticsearch/config/jvm.options- /app/skywalking/elasticsearch/logs:/usr/share/elasticsearch/logs:rwenvironment:- TZ=Asia/Shanghai- xpack.monitoring.enabled=false- xpack.watcher.enabled=falseports:- "9200:9200"- "9300:9300"

注意每个服务都必须通过 image 指令指定镜像或 build 指令(需要 Dockerfile)等来自动构建生成镜像。如果使用 build 指令,在 Dockerfile 中设置的选项(例如:CMD, EXPOSE, VOLUME, ENV 等) 将会自动被获取,无需在 docker-compose.yml 中重复设置。

常用&重要命令

  • images指定为镜像名称或镜像 ID。如果镜像在本地不存在,Compose 将会尝试拉取这个镜像。
image: apache/skywalking-oap-server:6.5.0image: apache/skywalking-ui:6.5.0

  • ports暴露端口信息。使用宿主端口:容器端口 (HOST:CONTAINER) 格式,或者仅仅指定容器的端口(宿主将会随机选择端口)都可以,端口字符串都使用引号包括起来的字符串格式。
ports: - "3000" - "8080:8080" - "127.0.0.1:8001:8001"

  • volumes数据卷所挂载路径设置。可以设置为宿主机路径(HOST:CONTAINER)或者数据卷名称(VOLUME:CONTAINER),并且可以设置访问模式 (HOST:CONTAINER:ro)。
volumes:- /app/skywalking/elasticsearch/data:/usr/share/elasticsearch/data:rw- conf/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
version: "3"
services:my_src:image: mysql:8.0volumes:- mysql_data:/var/lib/mysql
volumes:mysql_data:

  • ulimits指定容器的 ulimits 限制值。例如,指定最大进程数为 65535,指定文件句柄数为 20000(软限制,应用可以随时修改,不能超过硬限制) 和 40000(系统硬限制,只能 root 用户提高)。
ulimits:nproc: 65535nofile:soft: 20000hard: 40000

  • depends_on解决容器的依赖、启动先后的问题。以下例子中会先启动 redis mysql 再启动 web
version: '3'
services:web:build: .depends_on:- db- redis      redis:image: redis    db:image: mysql

  • environment设置环境变量。你可以使用数组或字典两种格式。
environment:SW_STORAGE: elasticsearchSW_STORAGE_ES_CLUSTER_NODES: elasticsearch:9200environment:- SW_STORAGE= elasticsearch- SW_STORAGE_ES_CLUSTER_NODES=elasticsearch:9200

  • restart指定容器退出后的重启策略为始终重启。该命令对保持服务始终运行十分有效,在生产环境中推荐配置为 always 或者 unless-stopped。
restart: always

docker-compose 实战

首先我需要推荐两件事:

  • 配置docker加速镜像创建或修改/etc/docker/daemon.json
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://hub-mirror.c.163.com","https://mirror.ccs.tencentyun.com","https://reg-mirror.qiniu.co"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

  • 给你的ide工具装上docker插件

本次实战我们以docker-compose部署skywalking为例。编写skywalking.yml,内容如下。

version: '3.3'
services:elasticsearch:image: docker.elastic.co/elasticsearch/elasticsearch:6.8.5container_name: elasticsearchrestart: alwaysports:- 9200:9200- 9300:9300environment:discovery.type: single-nodeulimits:memlock:soft: -1hard: -1oap:image: skywalking/oapcontainer_name: oapdepends_on:- elasticsearchlinks:- elasticsearchrestart: alwaysports:- 11800:11800- 12800:12800environment:SW_STORAGE: elasticsearchSW_STORAGE_ES_CLUSTER_NODES: elasticsearch:9200ui:image: skywalking/uicontainer_name: uidepends_on:- oaplinks:- oaprestart: alwaysports:- 8080:8080environment:SW_OAP_ADDRESS: oap:12800

部署完成后将其上传至服务器,执行docker-compose -f /app/skywalking.yml up -d即可。

声明:本文为CSDN博主「飘渺Jam」的原创文章。

docker compose 停止_Docker-Compose 基础与实战,看这一篇就够啦相关推荐

  1. Mybatis教程-实战看这一篇就够了

    推荐SpringCloud教程:https://blog.csdn.net/hellozpc/article/details/83692496 推荐Guava Cache教程:https://blog ...

  2. 看图学NumPy:掌握n维数组基础知识点,看这一篇就够了

    晓查 编译整理  量子位 报道 | 公众号 QbitAI NumPy是Python的最重要的扩展程序库之一,也是入门机器学习编程的必备工具.然而对初学者来说,NumPy的大量运算方法非常难记. 最近, ...

  3. python 初始化一个4维向量_看图学NumPy:掌握n维数组基础知识点,看这一篇就够了...

    摘要:NumPy是Python的最重要的扩展程序库之一,也是入门机器学习编程的必备工具.国外有位程序员讲NumPy的基本运算以图解的方式写下来,让学习过程变得轻松有趣. NumPy是Python的最重 ...

  4. ios 取出数组中前两个元素_看图学NumPy:掌握n维数组基础知识点,看这一篇就够了...

    晓查 编译整理 量子位 报道 | 公众号 QbitAI NumPy是Python的最重要的扩展程序库之一,也是入门机器学习编程的必备工具.然而对初学者来说,NumPy的大量运算方法非常难记. 最近,国 ...

  5. Docker的降维打击是怎么利用天时地利人和的?看这一篇就够了

    Docker的降维打击是怎么利用天时地利人和的?看这一篇就够了 容器的诞生 容器技术的奠基 容器生态的奠基 docker的出现 什么是容器 集装箱 容器 容器编排 容器的诞生 容器技术的奠基 2000 ...

  6. 基础 | 零散的MySql基础记不住,看这一篇就够啦

    ❝ 这是小小本周的第二篇,本篇将会着重的讲解关于MySql基础的内容,MySql基础看这一篇就够啦. ❞ 送书反馈与继续送书 之情小微信公众号第一次送书,Java深度调试技术,书已经被中奖者麦洛签收, ...

  7. docker 删除所有镜像_关于 Docker 镜像的操作,看完这篇就够啦 !(下)| 文末福利...

    紧接着上篇<关于 Docker 镜像的操作,看完这篇就够啦 !(上)>,奉上下篇 !!! 镜像作为 Docker 三大核心概念中最重要的一个关键词,它有很多操作,是您想学习容器技术不得不掌 ...

  8. 代理后台中间件_Golang Gin 实战(十三)| 中间件详解看这一篇就够了

    6000字大章带你死磕Golang Gin中间件 在Gin的整个实现中,中间件可谓是Gin的精髓.一个个中间件组成一条中间件链,对HTTP Request请求进行拦截处理,实现了代码的解耦和分离,并且 ...

  9. 计算机基础ip地址私有地址,关于ip地址的详解,看完这篇就够了

    原标题:关于ip地址的详解,看完这篇就够了 前天我们发布了什么是公网ip?什么是内网ip?为什么ip地址通常以192.168开头?,有朋友反映有没有更基础的,那我们就从ip地址开始说起. 一.特殊的I ...

  10. docker入门,看这一篇就够啦

    简介 Docker是一个开源的应用容器引擎,通过容器可以隔离应用程序的运行时环境(程序运行时依赖的各种库和配置),比虚拟机更轻量(虚拟机在操作系统层面进行隔离).docker的另一个优点就是build ...

最新文章

  1. iptables 入门
  2. matlab中fill函数的使用方法
  3. 百度启用Baidu.co.jp域名,有利于其在日本推广
  4. 2.5配置自定义HttpMessageConverters
  5. 腾讯云 python接口_python调用腾讯云短信接口
  6. 英伟达NVIDIA系列显卡GPU CUDA数据对比排行
  7. python源码解读之 string.py
  8. unity, AnimatorCullingMode踩坑
  9. 自动升降压PD快充方案 30W快充TYPE-C方案
  10. taro+vue微信小程序文本换行
  11. 思考方法,程序员生存之道
  12. windows php client,Installation and using elasticsearch php client on Windows Xampp
  13. 多个wifi路由器组建一个wifi网络增加网络覆盖范围
  14. 【课后习题】 线性代数第六版第二章 矩阵及其运算 习题二
  15. Origin: 绘制散点图并根据分组设置散点颜色
  16. 年薪达 35 万元,杭州成为薪酬最高的城市,北上、重庆通勤时间最久,揭晓 2022 年最具潜力的软件名城!...
  17. 微信小程序考勤系统的目的和功能
  18. MailStore邮件归档
  19. 如何在ubuntu16.04上安装eclipse
  20. github 开元项目

热门文章

  1. C++ Opengl 透明纹理源码
  2. C++4种类型转换操作符
  3. Android底层隐私数据,Android Intent传递数据底层分析详细介绍_Android_脚本之家
  4. CORS 跨域 实现思路及相关解决方案(转:http://www.cnblogs.com/sloong/p/cors.html)
  5. 3.Lucene3.x API分析,Director 索引操作目录,Document,分词器
  6. 2.Maven特点,Maven约定,建立第一个Maven项目
  7. s:selected的用法
  8. Linux sed 打印模式空间p命令使用案例
  9. 链表中位数(Middle of the Linked List)
  10. 博览安全圈:360曝Office高危漏洞 微软及时修复