请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i
Docker 这个东西所扮演的角色,容易理解,它是一个容器引擎,也就是说实际上我们的容器最终是由Docker创建,运行在Docker中,其他相关的容器技术都是以Docker为基础,它是我们使用其他容器技术的核心。
前面我们使用 Docker 的时候,定义 Dockerfile 文件,然后使用 docker build、docker run 等命令操作容器。然而微服务架构的应用系统一般包含若干个微服务,每个微服务一般都会部署多个实例,如果每个微服务都要手动启停,那么效率之低,维护量之大可想而知
优点:
根据定义的docker-compose.yaml配置文件批量容器编排,轻松高效的管理容器定义,Docker就会按照你声明的配置去把所有的容器启动起来及运行
缺点:
但是Docker-Compose只能管理当前主机上的Docker,也就是说不能去启动其他主机上的Docker容器
使用事项:
compose是docker官方的开源项目,需要安装!与它配对使用的是一个docker-compose.yaml文件,docker-compose命令必须在一个包含docker-compose.yaml文件目录下才能使用。
使用Dockerfile
定义应用程序的环境。
使用docker-cmpose.yaml
定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
最后,执行docker-cmpose up
命令来启动并运行整个应用程序。
docker-cmpose.yaml
的配置案例如下(配置参数参考下文):
version: "3.0" # 对于docker版本号 services: #定义服务 web: #web引用,自己编写的程序,下面是应用配置 build: . #获取当前目录下Dockerfile文件编译 depends_on: #代表启动顺序 - db - redis ports: - "5000:5000" #端口暴露 volumes: #挂载路径 - .:/code - logvolume01:/var/log links: - redis redis: #redis应用 image: redis deploy: replicas: 6 #副本数 db: #db应用 images:postgres volumes: logvolume01: {}
使用compose必然需要docker
yum install docker#安装docker,需要root
docker --version#查看版本
样例输出:
sudo systemctl start docker.service#启动 Docker sudo systemctl enable docker.service#关闭Docker
由于compose是docker官方的开源项目,需要安装!!!
# 国外 sudo curl -L"https://github.com/docker/compose/releases/download/v1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose#国内(推荐) sudo curl -L"https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose#授权
docker-compose --version#查看版本
样例输出:
此处以Springboot项目为例,其pom.xml依赖如下
<dependencies><dependency><groupId>org.springframework.bootgroupId><artifactId>spring-boot-starter-webartifactId>dependency><dependency><groupId>org.springframework.bootgroupId><artifactId>spring-boot-starter-testartifactId><scope>testscope>dependency><dependency><groupId>org.springframework.bootgroupId><artifactId>spring-boot-starter-data-redisartifactId>dependency>dependencies>
注:在此示例中,redis
是应用程序网络上的 redis 容器的主机名
#配置启动端口 server.port=8888 #配置redis地址,此处指定后续dockers镜像名称 spring.redis.host=redis
package com.example.compose;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.data.redis.core.StringRedisTemplate;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController; @RestControllerpublicclass IndexController {/** * . * 注入redis*/ @Autowiredprivate StringRedisTemplate redisTemplate;/** * . * 程序计数器,每访问一次就+1 * *@return*/ @GetMapping("/hello")public String hello() { Long views= redisTemplate.opsForValue().increment("views");return "hello docker compose views:" + views; } }
在你的项目目录中,创建一个Dockerfile。
有关编写 Dockerfile 更多信息,请参阅Docker 用户指南 和Dockerfile 参考
#指定jdk1.8 FROM java:8 #当前jar拷贝到容器中指定名称 COPY *.jar /app.jar #程序运行时指定程序端口 CMD ["--server-port=8888"] #暴露端口 EXPOSE 8888 #运行 ENTRYPOINT ["java", "-jar","/app.jar"]
在你的项目目录中创建一个名docker-compose.yaml
的文件。定义了两个服务:composeapp和redis.
version: '3.0' #对应版本号 services: composeapp: build: . #表示获取当前目录下Dockerfile文件进行编译 #dockerfile: Dockerfile #指定当前目录下的文件 image: composeapp #镜像名称 depends_on: #优先启动 - redis ports: #端口映射 - "8888:8888" redis: #拉取镜像 image: "library/redis:alpine"
友情提示:上述版本号对比示例图。官网对比链接
mkdir my_composeapp#创建目录 cd my_composeapp#进入
上传项目打包后的jar
、Dockerfile
、docker-compose.yaml
相关配置文件
注:docker-compose命令必须在一个包含docker-compose.yaml文件目录下才能使用
docker-compose up docker-compose up -d#-d【后台启动】 docker-compose down#关闭 【ctrl + c】
样例输出:
项目启动,页面输出日志
此处可见已拉取redis镜像并生成了容器、及已生成java项目运行容器
curl localhost:8888/hello#访问测试
样例输出:
至此,docker-compose使用简直在方便了!!!大大简化了我们的部署工作。学废的小伙伴记得给自己加鸡腿~
Chile Address 版权所有
Powered by WordPress