Docker-compose是官方的开源项目,负责实现对Docker容器集群的快速编排
举个简单的例子,我们一个java Web应用,依赖的环境有jdk ,数据库使用的mysql,缓存数据库使用的redis,消息队列服务器使用的是rabbitmq,并且分为ABC三个应用协作运行,也就是说我们需要一台mysql服务器,一台rabbitmq服务器和一台redis服务器,Docker-Compose服务编排,也就是说我们使用Docker-compose自定义一个配置文件去配置这些环境,将环境安装在Docker中,并且编排好启动顺序,依赖,在以后应用服务移植时可以不用重复搭建环境,只需要安装Docker环境即可
Compose中有两个重要的概念:
服务(service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例,比如:ABC三个应用协作运行,需要三台mysql服务,可以从同一个镜像中运行三个不同的mysql实例即可
项目(project): 由一组关联应用容器组成的一个完整的业务单元,例如我们ABC三个应用协作,加上运行环境 redis实例,mq实例 ,mysql实例,这样构成一个项目的完整运行,是一组完整的业务单元
compose的默认管理对象是项目,也就是说通过命令对项目中的一组容器进行便捷的生命周期管理,compose项目由Python编写,实际上调用了Docker服务提供的API来对容器进行管理,因此,只要所有操作的平台支持DockerAPI,就可以利用Compose来进行编排管理
安装命令
#下载
sudo curl -L .20.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
#安装
chmod +x /usr/local/bin/docker-compose
#查看版本
docker-compose version
# 显示
mrwhite@mrwhite-PC:~$ docker-compose version
docker-compose version 1.20.0, build ca8d3c6
docker-py version: 3.1.3
CPython version: 3.6.4
OpenSSL version: OpenSSL 1.0.1t 3 May 2016
bash补全命令
curl -L .8.0/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose
卸载
如果是二进制包方式安装的,删除二进制文件即可
sudo rm /usr/local/bin/docker-compose
现在有一个springboot应用,使用的依赖环境有 redis,我们需要的环境就是redis,java环境,使用docker-compose将java和redis的环境打包为一组服务部署.
controller
/*** Docker-Compose应用测试类** @author baijie* @date 2019-08-23*/
@RestController
public class ComposeController {@Autowiredprivate RedisTemplate<String,String> redisTemplate;String KEY = "INCR_KEY" ;@GetMapping("/get/incr")public String getIncr(){String s = redisTemplate.opsForValue().get(KEY);if(StringUtils.isEmpty(s)){redisTemplate.opsForValue().set(KEY,"1");return "1";}else {Long increment = redisTemplate.opsForValue().increment(KEY);String();}}
}
server:port: 9070
spring:redis:host: redis_cacheport: 6379timeout: 60sdatabase: 0lettuce:pool:max-active: 200max-idle: 20min-idle: 5max-wait: -1
pom redis 依赖
<dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.9.0</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><exclusions><exclusion><groupId>redis.clients</groupId><artifactId>jedis</artifactId></exclusion><exclusion><groupId>io.lettuce</groupId><artifactId>lettuce-core</artifactId></exclusion></exclusions></dependency>
maven Docker 插件
<build><finalName>docker-springboot</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin><!-- Docker maven plugin --><plugin><groupId>com.spotify</groupId><artifactId>docker-maven-plugin</artifactId><version>1.0.0</version><configuration><imageName>${docker.image.prefix}/${project.artifactId}</imageName><imageTags><imageTag>v1</imageTag></imageTags><dockerDirectory>src/main/docker</dockerDirectory><resources><resource><targetPath>/</targetPath><directory>${project.build.directory}</directory><include>${project.build.finalName}.jar</include></resource></resources></configuration></plugin><!-- Docker maven plugin --></plugins></build>
springboot Dockerfile配置
FROM maven:3.5-jdk-8
准备f的配置
appendonly yes
daemonize no
创建文件夹并启动
cd ~
mkdir docker-compose
cd docker-compose
编写Docker-compose文件
version: "3"services:app:build: ./appports: - 9070:9018environment:- TZ=Asia/Shanghaidepends_on:- redis_cacheworking_dir: /appvolumes: - /etc/localtime:/etc/localtime:ro- ./app:/applinks:- redis_cachecommand: mvn clean spring-boot:runredis_cache:restart: alwaysports:- 6379:6379image: redis container_name: redis_cachecommand: redis-server /usr/local/etc/fvolumes:- ./redis_data/:/data/- ./f:/usr/local/etc/f
更改项目目录结构
将项目拷贝至docker-compose文件夹并命名为app,在其中创建一个Dockerfile
FROM maven:3.5-jdk-8
启动Docker-compose
# 拉取镜像
docker-compose pull
启动项目
docker-compose up -d
Docker-compose配置解释
version:
“3” 代表使用第三代语法构建docker-compose编排服务文件
services:
代表一组服务,该标签下每一个服务是在运行时是一个容器
app:
服务名,根据我们自己的服务自定义
image :
指定我们的容器运行时从哪个镜像启动实例,
build
代表构建的镜像的Dockerfile所在的目录,build和image在docker-compose文件中的同一个服务中必须定义一个
ports:
端口号配置 9070代表宿主机的端口,9018代表容器内部的端口,容器内部的端口与springboot内部配置的端口需要对应
environment:
容器运行时的环境配置,“SPRING_PROFILES_ACTIVE=dev” 代表启动springboot应用时指定的配置文件,- TZ=Asia/Shanghai配置容器的时区,防止容器内时间与宿主机时间不同步
working_dir:
代表容器内应用的工作目录
volumes:
容器内部的目录挂载,例如: - ./app ./app代表宿主机目录,/app代表容器内的目录
depends_on:
服务依赖,在服务下此标签的意思是依赖于以下服务
restart:
always 代表如果服务启动不成功会一直尝试
container_name:
指定容器的名称,如果没有这个配置,compose会默认分配一个容器名称
command:
表示以这个命令启动这个服务
links:
容器的链接,docker-compose中的每一个服务就是一个容器,而容器的环境是隔离的,容器相互依赖就需要通信,links是为了保持两个容器之间的通信,而且在容器内部通过compose配置links可以在容器内部使用服务名+端口来访问其他容器
Docker-compose 命令详解
#查看帮助
docker-compose -h# -f 指定使用的 Compose 模板文件,默认为 l,可以多次指定。
docker-compose -l up -d #启动所有容器,-d 将会在后台启动并运行所有的容器
docker-compose up -d#停用移除所有容器以及网络相关
docker-compose down#查看服务容器的输出
docker-compose logs#列出项目中目前的所有容器
docker-compose ps#构建(重新构建)项目中的服务容器。服务容器一旦构建后,将会带上一个标记名,例如对于 web 项目中的一个 db 容器,可能是 web_db。可以随时在项目目录下运行 docker-compose build 来重新构建服务
docker-compose build#拉取服务依赖的镜像
docker-compose pull#重启项目中的服务
docker-compose restart#删除所有(停止状态的)服务容器。推荐先执行 docker-compose stop 命令来停止容器。
docker-compose rm #在指定服务上执行一个命令。
docker-compose run ubuntu ping docker#设置指定服务运行的容器个数。通过 service=num 的参数来设置数量
docker-compose scale web=3 db=2#启动已经存在的服务容器。
docker-compose start#停止已经处于运行状态的容器,但不删除它。通过 docker-compose start 可以再次启动这些容器。
docker-compose stop
Docker Compose + Spring Boot + Nginx + Mysql 实践
本文发布于:2024-02-03 05:54:16,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170691085649082.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |