20221202 Docker 5. docker-compose

官网文档

Compose specification | Docker Documentation

Overview of docker compose CLI | Docker Documentation

概述

在实际生产环境中,一个应用往往由许多服务构成,而 docker 的最佳实践是一个容器只运行一个进程,因此运行多个微服务就要运行多个容器。多个容器协同工作需要一个有效的工具来管理他们,定义这些容器如何相互关联。compose 应运而生。

compose 是用来定义和运行一个或多个容器(通常都是多个)运行和应用的工具。使用 compose 可以简化容器镜像的构建以及容器的运行。

compose 使用 YAML 文件来定义多容器之间的关系。一个 docker-compose up 就可以把完整的应用跑起来。 本质上, compose 把 YAML 文件解析成 docker 命令的参数,然后调用相应的 docker 命令行接口,从而将应用以容器化的方式管理起来。它通过解析容器间的依赖关系顺序地启动容器。而容器间的依赖关系由 YAML 文件中的 links 标记指定。

docker compose 是什么

compose、machine 和 swarm 是 docker 原生提供的三大编排工具。简称docker三剑客。

Docker Compose能够在 Docker 节点上,以单引擎模式(Single-Engine Mode)进行多容器应用的部署和管理

背景

Docker Compose 的前身是 Fig。Fig 是一个由 Orchard 公司开发的强有力的工具,在当时是进行多容器管理的最佳方案。

Fig 是一个基于 Docker 的 Python工具,允许用户基于一个 YAML 文件定义多容器应用,从而可以使用 fig 命令行工具进行应用的部署。

Fig 还可以对应用的全生命周期进行管理。内部实现上,Fig 会解析 YAML 文件,并通过 Docker API 进行应用的部署和管理。

在 2014 年,Docker 公司收购了 Orchard 公司,并将 Fig 更名为 Docker Compose。

命令行工具也从 fig 更名为 docker-compose,并自此成为绑定在 Docker 引擎之上的外部工具。

虽然它从未完全集成到 Docker 引擎中,但是仍然受到广泛关注并得到普遍使用。

直至今日,Docker Compose 仍然是一个需要在 Docker 主机上进行安装的外部 Python 工具。

使用它时,首先编写定义多容器(多服务)应用的 YAML 文件,然后将其交由 docker-compose 命令处理,Docker Compose 就会基于 Docker 引擎 API 完成应用的部署。

yml 配置文件

Docker Compose 使用 YAML 文件来定义多服务的应用。YAML 是 JSON 的一个子集,因此也可以使用 JSON。

Docker Compose 默认使用文件名 docker-compose.yml 。当然,也可以使用 -f 参数指定具体文件。

Docker Compose 的 YAML 文件包含 4 个一级 key:version、services、networks、volumes

  • version 是必须指定的,而且总是位于文件的第一行。它定义了 Compose 文件格式(主要是 API)的版本。注意,version 并非定义 Docker Compose 或 Docker 引擎的版本号。

  • services 用于定义不同的应用服务。上边的例子定义了两个服务:一个名为 lagou-mysql数据库服务以及一个名为lagou-eureka的微服。Docker Compose 会将每个服务部署在各自的容器中。

  • networks 用于指引 Docker 创建新的网络。默认情况下,Docker Compose 会创建 bridge 网络。这是一种单主机网络,只能够实现同一主机上容器的连接。当然,也可以使用 driver 属性来指定不同的网络类型。

  • volumes 用于指引 Docker 来创建新的卷。

常用指令

# 帮助
docker-compse --help

# 后台启动
docker-compose up -d

# 停止服务
docker-compose down

# 列出所有运行容器,在配置文件所在目录执行
docker-compose ps

# 查看服务日志
docker-compose logs

# 构建或者重新构建服务
docker-compose build

# 启动服务
docker-compose start

# 停止已运行的服务
docker-compose stop

# 重启服务
docker-compose restart

反向代理案例

idea 安装docker插件。Dockerfile、docker-compose.yml 文件大部分内容会有提示信息。方便开发人员编写配置文件。

准备配置文件:

docker run -itd --name nginx -p 80:80 nginx:1.19.3-alpine
docker run -itd --name tomcat -p 8080:8080 tomcat:9.0.20-jre8-alpine


mkdir -p /data/tomcat1/webapps /data/tomcat2/webapps
docker cp nginx:/etc/nginx/ /data
docker cp tomcat:/usr/local/tomcat/webapps /data/tomcat1
docker cp tomcat:/usr/local/tomcat/webapps /data/tomcat2 

echo "tomcat1" > /data/tomcat1/webapps/ROOT/index.jsp
echo "tomcat2" > /data/tomcat2/webapps/ROOT/index.jsp
docker rm -f nginx tomcat

修改配置文件:

# 删除nginx默认自带的配置文件,这个配置文件监听80端口
rm /data/nginx/conf.d/default.conf
# nginx.conf增加内容
vim /data/nginx/nginx.conf

include vhost/*.conf;
# 增加nginx配置文件
mkdir -p /data/nginx/vhost
vim /data/nginx/vhost/lagouedu.com.conf

upstream nginxlagouedu {
  server 192.168.10.1:18081;
  server 192.168.10.1:18082;
}

server {
  listen 80;
  server_name localhost;
  autoindex on;
  index index.html index.htm index.jsp;
  location / {
    proxy_pass http://nginxlagouedu;
    add_header Access-Control-Allow-Origin *;
  }
}

docker-compse 配置文件:

version: '3'
services:
  lagou-nginx:
    restart: always
    container_name: lagou-nginx
    volumes:
      - /data/nginx:/etc/nginx/
    image: nginx:1.19.3-alpine
    ports:
      - 80:80
  lagou-tomcat1:
    restart: always
    container_name: lagou-tomcat1
    volumes:
      - /data/tomcat1/webapps:/usr/local/tomcat/webapps
    image: tomcat:9.0.20-jre8-alpine
    ports:
      - 18081:8080
    depends_on:
      - lagou-nginx
  lagou-tomcat2:
    restart: always
    container_name: lagou-tomcat2
    volumes:
      - /data/tomcat2/webapps:/usr/local/tomcat/webapps
    image: tomcat:9.0.20-jre8-alpine
    ports:
      - 18082:8080
    depends_on:
      - lagou-nginx

执行命令:

# 启动
docker-compose up
# 后台启动
docker-compose up -d

# 停止
docker-compose down

测试:

curl localhost:18081
tomcat1
curl localhost:18082
tomcat2
curl localhost:80
tomcat1或tomcat2,有负载均衡效果
posted @ 2022-12-03 20:07  流星<。)#)))≦  阅读(54)  评论(0编辑  收藏  举报