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

目录 1 什么是Docker Compose 2 安装Docker Compose 3 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容器的Dockerfile 5.3.2 redis容器的Dockerfile 5.4 编写dockercompose.yml 5.5 运行并测试部署结果 6 小总结

1 什么是Docker Compose

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

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

2 安装Docker Compose

安装命令:

?
1
2
[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

检查是否安装成功:

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

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

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

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

例如:

?
1
2
3
4
5
6
7
docker-compose.yml   # 一个文件代表一个project
serveices:          # 服务
container-name:   # 容器
build:
– xxx:xxx
network:            # 引用标签
xxx:

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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:列出所有运行容器

?
1
docker-compose ps

logs:查看服务日志输出

?
1
docker-compose logs

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

?
1
docker-compose port eureka 8761

build:构建或者重新构建服务

?
1
docker-compose build

start:启动指定服务已存在的容器

?
1
docker-compose start eureka

stop:停止已运行的服务的容器

?
1
docker-compose stop eureka

rm:删除指定服务的容器

?
1
docker-compose rm eureka

up:构建、启动容器

?
1
docker-compose up

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

?
1
docker-compose kill eureka

pull:下载服务镜像

?
1
docker-compose pull eureka

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

?
1
docker-compose scale user=3 movie=3

run:在一个服务上执行一个命令

?
1
docker-compose run web bash

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

5.1 构建应用

5.1.1 Spring Boot项目

依赖:

?
1
2
3
4
5
6
7
8
9
<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>

配置文件:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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: 0

controller代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@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做了一点修改

?
1
2
3
4
#注释掉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项目

%小知识:Docker Compose快速部署多容器服务实战的实例详解-猿站网-插图

5.2.2 上传redis.conf配置文件 5.2.3 目录结构
?
1
2
3
4
5
6
7
8
– 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
?
1
2
3
4
5
6
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
?
1
2
3
4
5
6
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

?
1
2
3
4
5
6
7
8
9
10
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 运行并测试部署结果

运行:

?
1
2
3
4
5
6
7
[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
……

测试:

?
1
2
3
4
[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多容器实战内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/Mr_YanMingXin/article/details/122914701

声明: 猿站网有关资源均来自网络搜集与网友提供,任何涉及商业盈利目的的均不得使用,否则产生的一切后果将由您自己承担! 本平台资源仅供个人学习交流、测试使用 所有内容请在下载后24小时内删除,制止非法恶意传播,不对任何下载或转载者造成的危害负任何法律责任!也请大家支持、购置正版! 。本站一律禁止以任何方式发布或转载任何违法的相关信息访客发现请向站长举报,会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。本网站的资源部分来源于网络,如有侵权烦请发送邮件至:2697268773@qq.com进行处理。
建站知识

小知识:树莓派系列之使用docker安装青龙面板和改端口号的配置问题

2023-3-9 17:25:57

建站知识

小知识:SVN服务器备份操作步骤分享

2023-3-9 17:40:34

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索