前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >09. Docker Compose

09. Docker Compose

作者头像
有一只柴犬
发布2024-01-25 11:01:08
2040
发布2024-01-25 11:01:08
举报
文章被收录于专栏:JAVA体系

1、前言

随着应用架构的不段复杂和微服务的应用,通常在一个系统中需要包含多个模块,而一般情况下这些模块都会被部署到不同的 Docker 容器中。如果每一个模块都通过手动方式来完成部署,则效率是非常低,且也不利于系统的维护和扩展。

因此我们需要一个能够方便地定义,管理(编排)我们复杂的容器的工具,他就是我们接下来要说的Docker Compose。他是一个服务编排工具,可以很方便的帮助我们对容器进行定义和编排,他不是通过shell脚本命令,而是通过yml描述语言来完成。

2、安装Docker Compose

Docker Compose的github地址:GitHub - docker/compose: Define and run multi-container applications with Docker

Docker官方文档地址:Docker Compose overview | Docker Documentation

2.1、Docker Compose版本

官方定义Docker Compose:Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YAML 文件来配置应用程序的服务。然后,使用单个命令,您可以根据配置创建并启动所有服务。

当前Github最新release地址为2.20.2版本。推荐使用2.x版本,因为官方已经表明v1版本将在2023-07起停止更新,将在新版的Docker中不再可用,而V2版本包含在所有当前支持的Docker版本中。

我这边下载的版本为2.16.0版本。

2.2、下载安装

官方文档中也有详细的安装步骤。Overview | Docker Documentation

官方有2种安装方式,一种是独立安装Compose,另一种是安装Compose插件。采用插件安装是在我们已有的Docker引擎上完成Compose安装。这里我们采用插件方式安装:

1)首先我们下载安装Docker Compose:

代码语言:javascript
复制
sudo curl -SL https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose

如果curl很慢,也可以手动下载文件,然后上传上来。然后cp到/usr/local/bin/docker-compose下。

2)接下来要给当前文件赋予执行(+x)权限:

代码语言:javascript
复制
chmod + x /usr/local/bin/docker-compose

3)查看dockerf compose版本:

代码语言:javascript
复制
docker-compose --version

这样便安装成功了。

3、初试Docker Compose

以前面我们联系的镜像myapp为例。

3.1、传统方案部署应用

首先编制Dockerfile文件:

代码语言:javascript
复制
FROM openjdk:8

# 执行维护者的信息
MAINTAINER shamee csdn peng793049488

# 创建一个存放该工程的目录
RUN mkdir -p /data/project
COPY myapp.jar /data/project/myapp.jar

# 对外暴露一个8899端口
EXPOSE 8899

# 执行启动
ENTRYPOINT ["/bin/sh", "-c", "java -jar /data/project/myapp.jar"]

其次,构建镜像:

代码语言:javascript
复制
docker build -t myapp .

最后,启动容器:

代码语言:javascript
复制
docker run -d -p 18080:8080 myapp

查看执行结果:

3.2、使用编排部署应用

1)同样编制好Dockerfile文件:

代码语言:javascript
复制
FROM openjdk:8

# 执行维护者的信息
MAINTAINER shamee csdn peng793049488

# 创建一个存放该工程的目录
RUN mkdir -p /data/project
COPY myapp.jar /data/project/myapp.jar

# 对外暴露一个8899端口
EXPOSE 8899

# 执行启动
ENTRYPOINT ["/bin/sh", "-c", "java -jar /data/project/myapp.jar"]

2)接着,在目录下创建“docker-compose.yml”文件:

代码语言:javascript
复制
touch docker-compose.yml

并输入以下内容:

代码语言:javascript
复制
version: '3'
services:
    myapp:
        build: .
        ports:
            - "18080:8080"
  • version:Compose配置文件格式的版本,3为当前最新推荐版本。
  • services:定义了该应用种所包含的模块。
  • myapp:定义了myapp模块。
  • build:通过“build”命令,执行当前的Dockerfile文件。
  • ports:指定了映射端口。类似docker run 中的-p。

3)启动应用:

代码语言:javascript
复制
docker-compose up

初次启动,会经历镜像构建比较慢:

构建结束后,会启动该容器:

来访问下页面,页面结果是一样的:

3.3、其他命令

通过docker compose部署的应用,我们可以使用相应命令查看镜像,和容器信息等。

3.3.1、ps

查看容器。

代码语言:javascript
复制
docker-compose ps
# 查看全部容器
docker-compose ps -a
3.3.2、images

查看镜像。

3.3.3、depends_on

当启动一些模块的时候,比如依赖于其他模块的优先启动,可以使用depends_on。比如一个web应用模块启动之前,db模块必须先启动。则在docker-compose.yml中可以指定这种顺序:

代码语言:javascript
复制
version: '3'
services:
    myapp:
        image: httpd
        depends_on:
            - db
    db:
        image: centos
3.3.4、scale

设置指定运行容器的个数,动态进行扩容和缩容。

代码语言:javascript
复制
# 扩容到3个示例
docker-compose scale myapp=3

4、小结

docker compose相关参数还有很多,今天这里只是介绍了几个常用的参数以及命令。使用compose重点在于docker-compose.yml的配置管理,以后会慢慢接触到。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-08-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、前言
  • 2、安装Docker Compose
    • 2.1、Docker Compose版本
      • 2.2、下载安装
      • 3、初试Docker Compose
        • 3.1、传统方案部署应用
          • 3.2、使用编排部署应用
            • 3.3、其他命令
              • 3.3.1、ps
              • 3.3.2、images
              • 3.3.3、depends_on
              • 3.3.4、scale
          • 4、小结
          相关产品与服务
          容器服务
          腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档