Docker Compose入门指南
2023-09-11 14:20:01 时间
为什么要使用Docker Compose
可以使用Dockerfile(或Maven)构建镜像,使用微服务架构的应用系统一般包含若干个微服务,每个微服务一般有多个实例。如果每个微服务都要手动启停那么维护成本会非常高,docker compose只能控制当前主机的服务,无法控制集群
安装Compose
方法一:
# curl -L https://github.com/docker/compose/releases/download/1.8.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
# chmod +x /usr/local/bin/docker-compose
查看版本信息
# docker-compose --version
但是此方法会经常因为网络的原因而无法安装
方法二:
1、安装python-pip
yum -y install epel-release
yum -y install python-pip
2、安装docker-compose
pip install docker-compose
待安装完成后,执行查询版本的命令,即可安装docker-compose
docker-compose version
入门示例
1. mvn clean package microservice-discovery-eureka-0.0.1-SNAPSHOT.jar
2.microservice-discovery-eureka-0.0.1-SNAPSHOT.jar目录下创建Dockerfile文件
FROM java:8
VOLUME /tmp
ADD microservice-discovery-eureka-0.0.1-SNAPSHOT.jar app.jar
RUN bash -c 'touch /app.jar'
EXPOSE 9000
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
3.microservice-discovery-eureka-0.0.1-SNAPSHOT.jar目录下创建docker-compose.yml
version: '3' # 表示该docker-compose.yml文件使用的是Version 2 file format
services: # Version 2 file format的固定写法,为project定义服务。
microservice-discovery-eureka: # 指定服务名称
image: itmuch/microservice-discovery-eureka:0.0.1-SNAPSHOT # 指定服务所使用的镜像
ports: # 暴露端口信息
- "8761:8761"
4.在docker-compose.yml目录下执行以下命令:
docker-compose up -d # 在后台构建镜像并且启动容器
5.访问htthp://宿主机ip:8761 即可访问eureka server首页
docker-compose.yml常用命令
综合实战
编排SpingCloud微服务
1.使用Maven构建Docker镜像,各个项目pom文件添加以下代码
<!-- 添加spring-boot的maven插件 -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!-- 添加docker-maven插件 -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.13</version>
<configuration>
<imageName>itmuch/${project.artifactId}:${project.version}</imageName>
<baseImage>java</baseImage>
<entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
</build>
2.编写 docker-compose.yml文件
version: '3'
services:
microservice-discovery-eureka:
image: itmuch/microservice-discovery-eureka:0.0.1-SNAPSHOT
network_mode: host
ports:
- 8761:8761
microservice-provider-user:
image: itmuch/microservice-provider-user:0.0.1-SNAPSHOT
network_mode: host
ports:
- 8000:8000
microservice-consumer-movie-ribbon-hystrix:
image: itmuch/microservice-consumer-movie-ribbon-hystrix:0.0.1-SNAPSHOT
network_mode: host
ports:
- 8010:8010
microservice-hystrix-dashboard:
image: itmuch/microservice-hystrix-dashboard:0.0.1-SNAPSHOT
network_mode: host
ports:
- 8030:8030
microservice-hystrix-turbine:
image: itmuch/microservice-hystrix-turbine:0.0.1-SNAPSHOT
network_mode: host
ports:
- 8031:8031
microservice-gateway-zuul:
image: itmuch/microservice-gateway-zuul:0.0.1-SNAPSHOT
network_mode: host
ports:
- 8040:8040
## 注1:本Compose文件使用的网络模式是host,使用这种模式,可以让所有的微服务都无需修改eureka.client.serviceUrl.defautlZone的配置,而直接使用http://localhost:8761/eureka/。
## 注2:该方式一般不适合生产,实体书里也并未提及,仅作拓展阅读。
3.简化docker-compose.yml文件
compose中所有服务共享一个隔离网络, 可使用服务名作为主机名发现其他服务
version: '3'
services:
discovery:
image: itmuch/microservice-discovery-eureka:0.0.1-SNAPSHOT
ports:
- "8761:8761"
microservice-provider-user:
image: itmuch/microservice-provider-user:0.0.1-SNAPSHOT
microservice-consumer-movie-ribbon-hystrix:
image: itmuch/microservice-consumer-movie-ribbon-hystrix:0.0.1-SNAPSHOT
microservice-gateway-zuul:
image: itmuch/microservice-gateway-zuul:0.0.1-SNAPSHOT
microservice-hystrix-dashboard:
image: itmuch/microservice-hystrix-dashboard:0.0.1-SNAPSHOT
microservice-hystrix-turbine:
image: itmuch/microservice-hystrix-turbine:0.0.1-SNAPSHOT
# 最简单的配置方式,等价于docker-compose.yml。
4.编排高可用的eureka server
version: "3" # 表示使用docker-compose.yml的Version 3 file format编写
services:
microservice-discovery-eureka-ha1:
hostname: peer1 # 指定hostname
image: itmuch/microservice-discovery-eureka-ha:0.0.1-SNAPSHOT
links:
- microservice-discovery-eureka-ha2
ports:
- "8761:8761"
environment:
- spring.profiles.active=peer1
microservice-discovery-eureka-ha2:
hostname: peer2
image: itmuch/microservice-discovery-eureka-ha:0.0.1-SNAPSHOT
links:
- microservice-discovery-eureka-ha1
ports:
- "8762:8762"
environment:
- spring.profiles.active=peer2
## 该文件是最自然的写法,但无法正常使用。运行docker-compose up时,会报循环依赖的异常。
docker-compose up
version: "3"
services:
peer1: # 默认情况下,其他服务可使用服务名称连接到该服务。对于peer2节点,它需连接http://peer1:8761/eureka/,因此,我们可配置该服务的名称为peer1。
image: itmuch/microservice-discovery-eureka-ha:0.0.1-SNAPSHOT
ports:
- "8761:8761"
environment:
- spring.profiles.active=peer1
peer2:
image: itmuch/microservice-discovery-eureka-ha:0.0.1-SNAPSHOT
hostname: peer2
ports:
- "8762:8762"
environment:
- spring.profiles.active=peer2
## 使用Compose编排高可用的Eureka Server。
5.spring cloud 微服务动态伸缩
docker-compose up
docker-compose scala microservice-simple-provider-user=3 microservice-gateway-zuul=3
让microservice-simple-provider-user,microservice-gateway-zuul都启动3个实例
相关文章
- CentOS 一键安装 docker和docker-compose
- Docker打包错误:Failed to execute goal com.spotify:docker-maven-plugin:1.2.0:build (default-cli) on project security
- 【Docker】docker安装mysql
- docker安装并设置开机启动(Linux)
- docker安装入门
- Docker - 构建镜像:使用docker build命令和Dockerfile文件
- docker中使用systemd
- Docker入门系列之三:如何将dockerfile制作好的镜像发布到Docker hub上
- 关于在esx平台windows2008R2虚拟机里部署docker报错的问题
- Android项目持续集成实践之Gitlab CI(Docker版本)
- 【docker】Docker快速入门总结笔记(命令大全)
- Centos 安装 flannel 实现 docker 网络互通
- Docker入门与应用系列(一)介绍和部署
- docker清理无用资源
- 79.第十七章 企业级容器技术docker -- Docker 镜像制作和管理、Docker 数据管理(七)
- y19.第二章 Docker从入门到精通 -- Docker介绍和安装(一)
- 【云原生之Docker实战】使用docker部署个人导航页webstack
- 【云原生之Docker实战】使用Docker部署pdf2htmlEX文件转换工具
- 【云原生之Docker实战】使用Docker部署speedtest测速平台
- 【云原生之Docker实战】部署Docker Registry镜像仓库服务器
- 【云原生之Docker实战】使用docker部署nacos平台
- 【Docker系列】2.Linux 安装docker+docker-compose