Docker-Compose基础与实战,看这一篇就够了

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。

1.jpeg


what & why


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


Compose有2个重要的概念


  • 项目(Project):由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义。


  • 服务(Service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。


docker compose 安装与卸载


安装


二进制包在线安装


curl-Lhttps://github.com/docker/compose/releases/download/1.25.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose sudochmodx/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-yinstallepel-release#安装PIPyum-yinstallpython-pip#升级PIPpipinstall--upgradepip


  • 验证pip 版本


[root@tymonitorbin]#pip--versionpip8.1.2from/usr/lib/python2.7/site-packages (python2.7)


安装docker compose


pip install -U docker-compose==1.25.0


2.jpeg


验证docker compose版本


[root@tymonitorbin]#docker-compose--versiondocker-composeversion1.25.0, buildb42d419


安装补全插件


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 程序解析到的配置文件内容:


5.png


images


列出 Compose 文件中包含的镜像。如docker-compose -f skywalking.yml images


6.png


ps


列出项目中目前的所有容器。如docker-compose -f skywalking.yml ps


8.png


build


构建(重新构建)项目中的服务容器。如:docker-compose -f skywalking.yml build,一般搭配自定义镜像,比如编写的Dockfile,功能类似于docker build .


up


该命令十分强大(重点掌握),它将尝试自动完成包括构建镜像,(重新)创建服务,启动服务,并关联服务相关容器的一系列操作。如docker-compose -f skywalking.yml up。默认情况,docker-compose up 启动的容器都在前台,控制台将会同时打印所有容器的输出信息,可以很方便进行调试。


9.png


如果使用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/mysqlvolumes:
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-redisredis:
image: redisdb:
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


sudomkdir-p/etc/dockersudotee/etc/docker/daemon.json<<-'EOF'{
"registry-mirrors": [
"https://hub-mirror.c.163.com",
"https://mirror.ccs.tencentyun.com",
"https://reg-mirror.qiniu.co"    ]
}
EOFsudosystemctldaemon-reloadsudosystemctlrestartdocker


给你的ide工具装上docker插件


11.png


本次实战我们以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即可。


12.png


相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
15天前
|
存储 监控 安全
【专栏】探讨Docker Compose的核心概念、使用方法及最佳实践,助你轻松驾驭容器编排的世界
【4月更文挑战第27天】Docker Compose是款轻量级容器编排工具,通过YAML文件统一管理多容器应用。本文分三部分深入讨论其核心概念(服务、网络、卷和配置)、使用方法及最佳实践。从快速入门到高级特性,包括环境隔离、CI/CD集成、资源管理和安全措施。通过案例分析展示如何构建多服务应用,助力高效容器编排与管理。
|
2月前
|
存储 机器学习/深度学习 中间件
快速上手 Elasticsearch:Docker Compose 部署详解
本文介绍了如何使用Docker Compose快速搭建Elasticsearch学习环境。Elasticsearch是一款用于实时搜索和分析的分布式中间件,适用于多种场景,如搜索、日志分析、机器学习等。首先,创建docker网络,拉取最新版8.12.2镜像。接着,编写docker-compose.yml文件,配置单节点集群,设置端口映射、内存限制及数据卷挂载。然后,创建并配置数据卷目录,允许远程访问和跨域。最后,启动服务并验证,通过浏览器访问确认服务运行正常。本文为初学者提供了一个简便的Elasticsearch部署方法。
224 4
快速上手 Elasticsearch:Docker Compose 部署详解
|
2月前
|
关系型数据库 MySQL Java
Docker Compose详细教程(从入门到放弃)
Docker Compose详细教程(从入门到放弃)
232 0
|
4月前
|
存储 数据可视化 数据安全/隐私保护
使用 Docker Compose 部署 Docker Registry
【1月更文挑战第2天】 在内网环境中,我们期望能够在本地共享镜像。为了解决这一问题,Docker Registry成为了我们的救星。Docker Registry是一个用于存储和管理Docker镜像的开源工具。通过在本地部署Docker Registry,您可以轻松地构建、存储和分享自己的Docker镜像。
171 3
使用 Docker Compose 部署 Docker Registry
|
2月前
|
Java Docker 微服务
如何使用Docker和Docker Compose部署微服务
【2月更文挑战第12天】
296 0
|
5天前
|
前端开发 API 数据库
【Docker专栏】Docker Compose实战:编排多容器应用
【5月更文挑战第7天】Docker Compose是Docker的多容器管理工具,通过YAML文件简化多容器应用部署。它能一键启动、停止服务,保证开发、测试和生产环境的一致性。安装后,创建`docker-compose.yml`文件定义服务,如示例中的web和db服务。使用`docker-compose up -d`启动服务,通过`docker-compose ps`、`stop`、`down`和`logs`命令管理服务。
【Docker专栏】Docker Compose实战:编排多容器应用
|
12天前
|
Shell 应用服务中间件 nginx
6.Docker Compose
6.Docker Compose
|
18天前
|
NoSQL Redis Docker
[docker] Compose 简介
[docker] Compose 简介
|
23天前
|
NoSQL 数据库 Docker
《Docker 简易速速上手小册》第5章 Docker Compose 与服务编排(2024 最新版)
《Docker 简易速速上手小册》第5章 Docker Compose 与服务编排(2024 最新版)
46 0
|
1月前
|
NoSQL Redis Docker
Docker Compose、Swarm、Stack、Secret、Config
Docker Compose、Swarm、Stack、Secret、Config