终于写到docker-compose了,其实我最开始接触docker的时候,是由于一个开源项目须要用docker 环境和docke-compose 因此我最早接触的是docker-compse 后面才恶补的docker的一些基础知识。html
能够看到docker-composer 和docker 有关系,可是你也了解docker-compose 的命令 简单的操做docker 容器。前端
说了这么多,尚未说docker-compose 有什么做用,为何要使用docker-coompose。
其实咱们都知道,在咱们实际的项目中,一个项目通常都是前端服务端数据库都进行分离的。因此一个项目通常都是有多个镜像组成的。那怎么将这一组镜像管理起来呢?就是经过docker-compose 啦java
docker-compose 中有两个重要呢的概念
服务(service ): 就是咱们上面说的一个应用容器,仅仅负责真个项目的中的一部分,好比数据库mysql.mysql
项目(project):就是咱们上面说你的项目啦,包含一组容器。linux
docker-compose 经过 docker-compose.yml 文件对这一组容器进行配置。git
好了,正式开始接触 docker-compose吧程序员
docker-compose 安装很简单,windos 版本的已经自带了。咱们能够经过github
docker-compose -v
查看咱们本机安装的docker-compose 版本。
Linux 安装也很简单。
在官网上也有:https://github.com/docker/compose/releasesweb
sudo apt-get update #安装最新的docke-ce sudo apt-get install docker-ce # 下载最新的docker-compose curl -L https://github.com/docker/compose/releases/download/1.25.0-rc4/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose # 修改docker-compose 权限 chmod +x /usr/local/bin/docker-compose
卸载 docke-composeredis
sudo rm /usr/local/bin/docker-compose
若是上面安装不行的话,或者报错,能够用下面的方式进行安装。
在上面的官网上找到对应版本的Assests 选择对应的文件下载。
下载下来后,咱们放到 /usr/local/bin/ 目录下。执行下面操做
#更名 sudo mv docker-compose-Linux-x86_64 ./docker-compose #增长执行权限 sudo chmod +x /usr/local/bin/docker-compose
这样就和上面的效果是同样的啦,咱们能够经过docker-compose -v
查看安装成功没有。
知道了docker-compose 那最重要的就是docker-compose.yml 文件啦,经过这个文件就能够管理项目的镜像了,那咱们怎么写docker-compose.yml 文件呢?
官方提供了不少模版,咱们按照模版来写就能够了。
version: "3" services: webapp: image: examples/web ports: - "80:80" volumes: - "/data"
能够看到格式就是咱们熟悉的yml 格式,和咱们springboot 项目中配置是差很少的。
咱们前面知道的一个项目是由一组服务组成的,也就是你对应文件中的services。webapp 就是咱们为服务起的一个名字,image 对应的镜像名,ports 镜像暴露的端口,volumes 镜像的数据卷。能够看到,里面的命令和docker run 的指令是差很少的。
解决容器的依赖,表示一个容器依赖其余的其余容器,好比说
version: "3" services: webapp: image: examples/web ports: - "80:80" volumes: - "/data" depends_on: - redis - mysql redis: image: redis:latest restart: always ports: - "6379:6379" mysql: image: mysql:latest restart: always ports: - "3306:3306"
仍是上面的例子,只不过我多加了两个 service 。表示这个项目中用到了mysql 和redis 而且在webapp 中使用depends_on 表示redis 和mysql 先webapp 启动。
更多的模版,你们用的时候能够参考官网上就能够了我感受。知道是什么意思就能够,不用都记下来。
https://yeasy.gitbooks.io/docker_practice/content/compose/compose_file.html
咱们能够经过帮助指令来查看docker-compose 怎么使用。
docker-compose --help
基本语法格式:
docker-compose [-f=<arg>...] [options] [COMMAND] [ARGS...]
我这里也就将一下常见的,由于经过--help
均可以查到。
用于检查咱们的docker-compose.yml 文件的内容格式是否正确,在咱们运行以前先检测一下比较好。
用来启动项目,好比咱们如今有一个docker-compose.yml 文件,那咱们进入到这个文件目录,执行docker-compose up
就能够将项目依赖的镜像下载下来,并启动相应的容器服务。整个项目都启动起来了,直接使用就行了,可谓是至关强大了。
docker-compose up -d 表示后台启动。
和 up 对应,用来中止咱们的项目。
重启咱们项目
其余的也不说了,能够查看官网:
https://docs.docker.com/compose/reference/overview/
光说不练假把式,咱们上面说的一堆基础的知识,仍是须要咱们实践才行,否则咱们不会有什么实质性的收获。因此接下来咱们就搭建一个简单的demo。
咱们仍是用前面的的hello的项目,咱们对项目进行一些修改,增长 redis。
这里我就不具体的讲啦,有不会的能够看我这篇文章,写的很简单明了:
咱们这里先在在pom.xml 中增长redis 依赖:
<!--Redis使用starter--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
在application.properties 中增长redis 配置
#配置redis # Redis数据库索引(默认为0) spring.redis.database=0 # Redis服务器地址 spring.redis.host=192.168.252.53 # Redis服务器链接端口 spring.redis.port=6389 # Redis服务器链接密码(默认为空) spring.redis.password= # 链接池最大链接数(使用负值表示没有限制) 默认 8 spring.redis.lettuce.pool.max-active=8 # 链接池最大阻塞等待时间(使用负值表示没有限制) 默认 -1 spring.redis.lettuce.pool.max-wait=-1 # 链接池中的最大空闲链接 默认 8 spring.redis.lettuce.pool.max-idle=8 # 链接池中的最小空闲链接 默认 0 spring.redis.lettuce.pool.min-idle=0
在controller 包中建立一个redisController 类
@RestController @RequestMapping("/redis") @Slf4j public class RedisController { @Autowired private StringRedisTemplate stringRedisTemplate; @RequestMapping(value = "/add",method = RequestMethod.GET) public String add(@RequestParam(value="key")String key,@RequestParam(value = "value") String value){ ValueOperations ops=stringRedisTemplate.opsForValue(); ops.set(key,value); return "success"; } @RequestMapping(value = "/get",method = RequestMethod.GET) public String get(@RequestParam(value = "key")String key){ ValueOperations ops=stringRedisTemplate.opsForValue(); return (String) ops.get(key); } }
好了,咱们将项目打包成镜像,至于怎么打包成镜像上一篇我已经讲了,不会的能够查看:
咱们使用 redis 镜像,可是咱们不想使用默认的配置,想要使用本身的配置启动redis。因此咱们来复制一份redis.conf 。我就修改了
#设置redis 能够远程访问 bind 0.0.0.0 #后台启动 daemonize yes
redis.conf 放在咱们上图的redis目录下。
咱们来编写docker-compose.yml ,直接套用上面的模版。
version: "3" services: webapp: image: quellanan/hello:1.0.0 ports: - "9000:9000" volumes: - "/data" depends_on: - redis redis: image: redis:latest restart: always ports: - "6389:6379" volumes: - /redis/redis.conf:/etc/redis/redis.conf command: redis-server /etc/redis/redis.conf
能够看到基本上是根据模版来的,指定咱们镜像,端口,数据卷。
这里webapp 的没有什么好说的 ,上面都说了,一看就能懂,说一下redis的。
images 指定的镜像为redis:latest ,若是你本地没有这个镜像,就会从官网上下载。
restart:always 表示自动重启。
ports:"6389:6379"
表示镜像启动redis容器的端口是6379,映射到服务器的6389 端口,因此咱们在项目配置的redis 端口应该是6389.
volumes: /redis/redis.conf:/etc/redis/redis.conf
表示将 ./redis/redis.conf 文件加载到 容器中的 /etc/redis/redis.conf 位置。
说明第一个路径是相对路径,第二个路径是绝对路径。
command: redis-server /etc/redis/redis.conf
表示在启动redis 容器的时候会执行的命令。这样就能够实现启动redis镜像加载咱们本身的配置文件了。
准备工做都作好了,开始咱们大展拳脚,哈哈,其实否则,咱们准备工做作好了,就已经成功一大半了,咱们接下来要作的就是 就是经过docker-compose 启动镜像。咱们直接在存放docker-compose.yml 目录下执行:
docker-compose up
这样咱们就启动成功了。
若是想后台启动的话输入:
docker-compose up -d
咱们项目启动,如今来测试一下到底成功没有。
http://192.168.252.53:9000/
这个是测试项目是正常启动了。
咱们接下来看看咱们配置的redis 有没有成功。
http://192.168.252.53:9000/redis/add?key=a&value=123qaz http://192.168.252.53:9000/redis/get?key=a
能够看到界面上接口没有问题了,redis已经已经生效了,咱们还不太肯定,能够去服务器上看下。
。本地没有装redis ,咱们能够进入到redis容器中去查看。
操做以下:
先经过docker ps
查看redis 容器id
而后经过下面命令进入容器。
docker exec -it 容器id /bin/bash
最后链接redis
redis-cli
好了,就说这么多啦
后续加油♡
欢迎你们关注我的公众号 "程序员爱酸奶"
分享各类学习资料,包含java,linux,大数据等。资料包含视频文档以及源码,同时分享本人及投递的优质技术博文。
若是你们喜欢记得关注和分享哟❤