1. 首页
  2. 技术知识

Docker Compose快速部署多容器服务实战的实例详解

目录

    1 什么是Docker Compose2 安装Docker Compose3 Docker Compose文件格式的简单介绍4 Docker Compose常用命令5 使用Docker Compose一键部署Spring Boot+Redis实战

      5.1 构建应用

        5.1.1 Spring Boot项目5.1.2 Redis配置文件

      5.2 打包应用并构建目录

        5.2.1 打包Spring Boot项目5.2.2 上传redis.conf配置文件

      5.3 编写Dockerfile

        5.3.1 Spring Boot容器的Dockerfile5.3.2 redis容器的Dockerfile

      5.4 编写docker-compose.yml5.5 运行并测试部署结果

    6 小总结

1 什么是Docker Compose

前面我们使用 Docker 的时候,定义 Dockerfile 文件,然后使用 docker build、docker run 等命令操作容器。然而微服务架构的应用系统一般包含若干个微服务,每个微服务一般都会部署多个实例,如果每个微服务都要手动启停,那么效率之低,维护量之大可想而知。


使用 Docker Compose 可以轻松、高效的管理容器,它是一个用于定义和运行多容器 Docker 的应用程序工具

2 安装Docker Compose

安装命令:

[root@iZ2ze4m2ri7irkf6h6n8zoZ ~]# curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose

[root@iZ2ze4m2ri7irkf6h6n8zoZ ~]# chmod +x /usr/local/bin/docker-compose检查是否安装成功:

[root@iZ2ze4m2ri7irkf6h6n8zoZ ~]# docker-compose -v


3 Docker Compose文件格式的简单介绍

Docker Compose文件一般命名为docker-compose.yml,并且执行Docker-compose命令时在该文件所在目录下执行。

Docker Compose 分为三层,分别是工程(project)、服务(service)/引用标签、容器(container)

例如:

docker-compose.yml   # 一个文件代表一个project

serveices:          # 服务

   container-name:   # 容器

     build:

      – xxx:xxx

network:            # 引用标签

   xxx:下面是一个标准的docker-compose.yml文件

version: “3”  # 指定版本

services:     # services

  proxy:      # 自定义容器名称

    build: ./proxy  # Dockerfile所在目录,用于构建容器

    networks: # 自定义容器网络

      – frontend

  APP:      

    build: ./app

    networks:

      – frontend

      – backend

  db:

    image: postgres

    networks:

      – backend

networks:

  frontend:

    driver: custom-driver-1

  backend:

    driver: custom-driver-2

    driver_opts:

      foo: “1”

      bar: “2”


4 Docker Compose常用命令

ps:列出所有运行容器

docker-compose ps
logs:查看服务日志输出

docker-compose logs
port:打印绑定的公共端口,下面命令可以输出 eureka 服务 8761 端口所绑定的公共端口

docker-compose port eureka 8761
build:构建或者重新构建服务

docker-compose build
start:启动指定服务已存在的容器

docker-compose start eureka
stop:停止已运行的服务的容器

docker-compose stop eureka
rm:删除指定服务的容器

docker-compose rm eureka
up:构建、启动容器

docker-compose up
kill:通过发送 SIGKILL 信号来停止指定服务的容器

docker-compose kill eureka
pull:下载服务镜像

docker-compose pull eureka
scale:设置指定服务运气容器的个数,以 service=num 形式指定

docker-compose scale user=3 movie=3
run:在一个服务上执行一个命令

docker-compose run web bash


5 使用Docker Compose一键部署Spring Boot+Redis实战


5.1 构建应用


5.1.1 Spring Boot项目

依赖:

<dependency>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-web</artifactId>

</dependency>

<!–redis–>

<dependency>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-data-redis</artifactId>

</dependency>配置文件:

spring:

  redis:

    #host: 127.0.0.1

    host: ymx.redis

    port: 6379

    password:

    jedis:

      pool:

        max-active: 8

        max-wait: -1

        max-idle: 500

        min-idle: 0

    lettuce:

      shutdown-timeout: 0controller代码:

@RestController

public class HelloController {

    @Autowired

    private RedisTemplate<String, String> redisTemplate;

    @RequestMapping(“/hello/{id}”)

    public String hello(@PathVariable(“id”) Integer id) {

        return redisTemplate.opsForValue().get(String.valueOf(id));

    }

    @RequestMapping(“/save/{id}/{name}”)

    public String save(@PathVariable(“id”) Integer id, @PathVariable(“name”) String name) {

        try {

            redisTemplate.opsForValue().set(String.valueOf(id), “Hello ” + name + “!”);

        } catch (Exception e) {

            return “false”;

        }

        return “success”;

}


5.1.2 Redis配置文件

只是将redis自带的redis.conf做了一点修改

#注释掉bind 127.0.0.1

# bind 127.0.0.1 -::1

#修改protected-mode yes->no

protected-mode no


5.2 打包应用并构建目录


5.2.1 打包Spring Boot项目


5.2.2 上传redis.conf配置文件

5.2.3 目录结构

– mycompose

  – docker-compose.yml

  – rd  

    – Dockerfile  

    – redis.conf

  – sp

    – Dockerfile  

    – sp_redis-0.0.1-SNAPSHOT.jar


5.3 编写Dockerfile


5.3.1 Spring Boot容器的Dockerfile

FROM java:8

MAINTAINER YMX “1712229564@qq.com”

COPY sp_redis-0.0.1-SNAPSHOT.jar /root/sp_redis-0.0.1-SNAPSHOT.jar

EXPOSE 8080

ENTRYPOINT [“java”, “-jar”,”/root/sp_redis-0.0.1-SNAPSHOT.jar”]


5.3.2 redis容器的Dockerfile

FROM redis

MAINTAINER ymx 1712229564@qq.com

COPY redis.conf /usr/local/etc/redis/redis.conf

EXPOSE 6379

CMD [“redis-server”,”/usr/local/etc/redis/redis.conf” ]


5.4 编写docker-compose.yml

version: “2.8” # 表示该 Docker-Compose 文件使用的是 Version 2 file

services:

  sp-demo:       # 指定服务名称

    build: ./sp  # 指定 Dockerfile 所在路径

    ports:       # 指定端口映射

      – “9001:8080”

    links:

      – re-demo:ymx.redis # 进行容器链接

  re-demo:

    build: ./rd


5.5 运行并测试部署结果

运行:

[root@iZ2ze4m2ri7i mycompose]# docker-compose up

Creating network “mycompose_default” with the default driver

Building re-demo

Sending build context to Docker daemon  96.77kB

Step 1/5 : FROM redis

latest: Pulling from library/redis

……测试:

[root@iZ2ze4m2ri7i mycompose]# curl http://localhost:9001/save/2/Ymx

success

[root@iZ2ze4m2ri7i mycompose]# curl http://localhost:9001/hello/2

Hello Ymx!


6 小总结

在Spring Boot配置文件中,redis的host没有使用localhost或者127.0.0.1,而是使用了域名ymx.redis,这一域名在docker-compose.yml文件中进行了映射,进而Spring Boot的容器能够链接到redis容器,但是这一情况依赖于一个默认条件,就是docker的网络默认是桥接模式,两个容器都在同一子网中,因此才能够互相访问。

因此,links并不是唯一的容器网络解决方案,在容器较多时,需要使用networks进行网络的管理。

参考文章:

https://www.jianshu.com/p/658911a8cff3

https://www.jianshu.com/p/3004fbce4d37

https://blog.csdn.net/luo15242208310/article/details/88642187

https://blog.csdn.net/qq_36781505/article/details/86612988

到此这篇关于Docker Compose快速部署多容器服务实战的文章就介绍到这了,更多相关Docker Compose多容器实战内容请搜索共生网络以前的文章或继续浏览下面的相关文章希望大家以后多多支持共生网络!

原创文章,作者:starterknow,如若转载,请注明出处:https://www.starterknow.com/105701.html

联系我们